2017-09-29 7 views
0

je puis en suivant tracert environ une requête dans ma demande:SQL Server durée différente entre la requête StmtCompleted et directe

enter image description here

Comme vous pouvez le voir, la requête lit tous les registres de la table et le résultat est un grand impact dans la durée.

Mais quand j'essaie d'exécuter la requête directement, le résultat est un autre ... Qu'est-ce qui ne va pas?

enter image description here

+0

êtes-vous exécutaient requête dans le 2ème exemple ou tout simplement vérifier l'expliquer plan? –

+0

Il est probablement bloqué par d'autres processus utilisant INVENTSUM. Ajoutez BlockedProcessReport à la trace et configurez le seuil de processus bloqué à 1 seconde, temporairement, puis replacez-le à la valeur d'origine lorsque vous avez terminé l'analyse. – cloudsafe

+0

Essayez d'activer les statistiques dans votre requête dans SSMS et voir comment le nombre de lectures et le temps CPU se compare à votre trace. –

Répondre

4

Vous avez exécuté une autre requête de SSMS.

La requête affichée dans profiler fait partie de la procédure stockée et comporte 8 paramètres. Ce que vous avez exécuté est une requête avec des constantes qui a un autre plan d'exécution car toutes les constantes sont connues et l'estimation a été faite en base de ces valeurs connues. Lorsque l'instruction de votre sp a été exécutée, le plan a été créé pour les paramètres reniflés de Dieu-sait-quoi et ce plan est différent de ce que vous avez dans SSMS. De l'épaisseur des flèches dans SSMS, il est clair que la requête n'effectue pas les lectures 7.954.449.

Si vous voulez voir votre plan d'exécution réel dans profiler, vous devez sélectionner l'événement correspondant (Showplan XML Statistics Profile).

0

Oui, il existe deux requêtes différentes. L'Axapta utilise des espaces réservés en commun. Votre requête utilise des constantes littérales.

L'indicateur forceLiterals dans la requête rend la requête Axapta similaire à votre exemple SSMS. L'indice Axapta par défaut est forcePlaceholders.

L'objectif principal des espaces réservés est d'optimiser un flux massif de requêtes similaires avec différentes constantes provenant de plusieurs clients. Principalement en raison de l'utilisation d'un cache de plans de requête.


voir aussi l'avertissement d'injection pour forceLiterals: https://msdn.microsoft.com/en-us/library/aa861766.aspx