Rechercher des requêtes qui provoquent des attentes


34

Compte tenu d’un certain type d’attente, comment identifier les requêtes qui causent ces attentes en toute sécurité sur un serveur SQL 2008 R2 de production?

Dans ce cas particulier, je me pose des questions async_network_io.

Réponses:


32

Ma façon préférée de vérifier cela consiste à utiliser l'excellent processus stocké sp_WhoIsActive d'Adam Machanic. Voici une vidéo sur la façon de l'utiliser et un lien pour télécharger le code:

http://www.brentozar.com/archive/2010/09/sql-server-dba-scripts-how-to-find-slow-sql-server-queries/

Le problème, c'est que vous devez l'exécuter périodiquement pour vérifier les résultats. Si vous souhaitez que ces données soient collectées périodiquement pour vous, consultez le didacticiel de Kendra Little sur la capture des résultats de sp_WhoIsActive dans une table:

http://www.littlekendra.com/2011/02/01/whoisactive/

Enfin, si vous souhaitez que quelque chose se déclenche lorsqu'une requête attend async_network_io, vous pouvez utiliser un nouvel outil appelé Evénements étendus. C'est comme des points de débogage dans le moteur SQL Server où vous pouvez créer de la magie. Franchement, c'est un peu pénible à utiliser maintenant en 2008.


14

'async_wait_io' n'est pas un type d'attente. Les types d'attente ASYNC% possibles sont les suivants:

  • ASYNC_IO_COMPLETION
  • ASYNC_NETWORK_IO
  • ASYNC_DISKPOOL_LOCK

Quelques bons liens pour les types d'attente:

Mon aller à la requête pour trouver les temps d'attente actuels:

SELECT  req.session_id
       ,blocking_session_id
       ,ses.host_name
       ,DB_NAME(req.database_id) AS DB_NAME
       ,ses.login_name
       ,req.status
       ,req.command
       ,req.start_time
       ,req.cpu_time
       ,req.total_elapsed_time / 1000.0 AS total_elapsed_time
       ,req.command
       ,req.wait_type
       ,sqltext.text
FROM    sys.dm_exec_requests req
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext
JOIN    sys.dm_exec_sessions ses
        ON ses.session_id = req.session_id
WHERE req.wait_type IS NOT NULL
--WHERE req.wait_type = '?'

Désolé, je voulais dire async_network_io.
Kyle Brandt

Autres très bons articles: Perdez les statistiques d'attente avec Brent O et Buck Woody et Attendez . Ils sont très utiles!
Marian

@Marian: Brent me montrait des trucs aujourd'hui mais il lui manquait beaucoup de temps avant d'arriver à celui-ci, peut-être que cet article serait tout aussi bon :-)
Kyle Brandt

@Kyle tu as Brent pour te montrer des trucs et toujours nous demander? :) Vous devriez l'enchaîner à la chaise de votre bureau .. séchez son cerveau .. puis laissez-le partir;). Et n'oubliez pas de nous informer des résultats!
Marian

@Marian: Yup très chanceux d'avoir son aide. Le problème, cependant, est que si je reçois une réponse, tous les autres utilisateurs d’Internet l’obtiendront aussi :-)
Kyle Brandt
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.