2010-12-01 4 views
7

alt textDonner un sens du nombre de lectures/écritures dans SQL Profiler

Voir les instructions SQL indiquées dans cette vue SQL Profiler. Tous ces événements proviennent d'une machine cliente occupée par un processus de longue durée, fonctionnant sur plusieurs milliers de lignes. Chaque traitement d'une ligne prend environ 6,5 secondes, ce qui est le temps que le profileur SQL affiche entre les déconnexions, même si l'instruction de mise à jour prend seulement 1 ms. Chaque connexion/déconnexion utilise le même SPID. Notez qu'entre les événements Login et Logout, les instructions SQL indiquent un nombre de lectures de 17 et un nombre d'écritures de 0. Cependant, l'événement Déconnexion indique un nombre total de lectures supérieur à 2 millions et un nombre d'écritures supérieur à 10k. Quels événements ai-je besoin de profiler pour essayer de comprendre quelle déclaration cause ces lectures/écritures, parce que je pense que ce sont elles qui causent le retard de 6,5 secondes, mais je ne les vois pas se produire?

+1

Vous n'utilisez pas de curseur, n'est-ce pas? –

+0

non. Ont également ajouté les événements de curseur dans SQL Profiler pour confirmer qu'aucun d'entre eux ne sont levés. –

Répondre

7

Les chiffres Lecture/Écriture donnés pour l'événement Audit: Déconnexion sont les totaux cumulés pour la durée de cette connexion. En soi, les valeurs ne vous indiquent aucun détail - si vous exécutez 10 commandes pendant la durée de vie d'une connexion, vous verrez les chiffres totaux pour les 10 commandes de cette session. Pour connaître la répartition par instruction, vous devez consulter les événements SQL: BatchCompleted (ou SQL: StmtCompleted) enregistrés pour ce même SPID entre l'événement Audit: Login de début et l'audit de fin: Logout un événement.

Mise à jour: En regardant l'image, la chose qui ressemble un peu bizarre (pour moi au moins), est qu'après chaque vérification: Déconnexion, la Reads valeur n'est pas remis à zéro, et donc chaque fois qu'elle est incrémenté par le nombre de lectures pour l'instruction en cours d'exécution (17). Je ne suis pas sûr à 100% donc à quel point ce chiffre sera réinitialisé - mais le point de base est que le chiffre est cumulatif et aurait pu être accumulé au fil du temps/un certain nombre de déclarations ne signifie pas nécessairement que vous avez un lourd requête frapper le serveur!

Je suppose que les chiffres Reads/Writes pour Audit: Logout se comportent de manière cumulative comme ci-dessus. Mais le Duration bucks cette tendance. Il semble que la durée ne soit pas cumulative. Quelques descriptions de MSDN:

Durée: Montant du temps écoulé depuis l'utilisateur connecté (environ).
Lit: Nombre d'E/S logiques de lecture émises par lors de la connexion.
Écrit: Nombre d'E/S logiques d'écriture émises par l'utilisateur lors de la connexion .

+0

Il semble que la colonne Durée soit la seule à se réinitialiser depuis la dernière déconnexion. Les lectures/écritures sont en effet cumulatives sur le SPID. Donc je suis moins paniqué sur le fait qu'il y en a tellement ... maintenant je dois encore essayer de comprendre quelle est la cause de la durée de 6.5sec quand la déclaration réelle est seulement 1ms! –

+0

@Shawn -C'est-à-dire que vous ne voyez pas la précision de StartTime dans la capture d'écran, mais il semble presque que la durée affichée correspond à l'heure d'une vérification: Déconnexion à la suivante. C'est peut-être pourquoi c'est documenté comme étant "approximativement". Je ne pense pas qu'il y ait de quoi s'inquiéter. – AdaTheDev

Questions connexes