Est-il possible de se connecter le texte de chaque requête exécutée sur SQL Server?
-
28-10-2019 - |
Question
Nous avons cette situation récurrente où plusieurs fois par semaine, notre application cesse de répondre. Ce que je voudrais faire est d'être en mesure d'afficher le texte de la requête en cours d'exécution sur SQL Server.
Je peux utiliser sp_who
pour voir les connexions ouvertes, mais il ne présente pas le texte de la requête réelle.
Si je peux voir la requête qui gèle ma base de données, je peux avoir un point de départ pour l'optimisation.
Il est arrivé il y a quelques minutes et notre système admin a dû redémarrer la boîte. Ce redémarrage est pas durable.
Que dois-je faire?
Je voudrais voir le texte réel des requêtes qui sont en cours d'exécution sur mon serveur.
SQL Server 2000
La solution
utiliser ce alors que le bloc se passe:
SELECT
r.session_id AS spid
,r.cpu_time,r.reads,r.writes,r.logical_reads
,r.blocking_session_id AS BlockingSPID
,LEFT(OBJECT_NAME(st.objectid, st.dbid),50) AS ShortObjectName
,LEFT(DB_NAME(r.database_id),50) AS DatabaseName
,s.program_name
,s.login_name
,OBJECT_NAME(st.objectid, st.dbid) AS ObjectName
,SUBSTRING(st.text, (r.statement_start_offset/2)+1,( (CASE r.statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE r.statement_end_offset
END - r.statement_start_offset
)/2
) + 1
) AS SQLText
FROM sys.dm_exec_requests r
JOIN sys.dm_exec_sessions s ON r.session_id = s.session_id
CROSS APPLY sys.dm_exec_sql_text (sql_handle) st
WHERE r.session_id!=@@SPID
listera tous SPID actifs, qui les bloquent et SQL de chaque SPID
EDIT cette requête est pour 2005+ SQL Server, question initiale n'a pas déclarer SQL Server 2000
Autres conseils
Voir l'article Comment surveiller le blocage dans SQL Server 2005 et SQL Server 2000 pour la définition de sp_blocker_pss08
(un script compatible SQL Server 2000).