Je voudrais savoir s'il existe un moyen d'envoyer une notification en cas de blocage? Si oui, quelles requêtes seraient nécessaires. Je comprends que SQL Server s'occupe des blocages, je voudrais simplement des informations sur les requêtes impliquées.
J'ai trouvé ce qui suit pour déterminer les requêtes de longue durée:
SELECT
creation_time
,last_execution_time
,total_physical_reads
,total_logical_reads
,total_logical_writes
, execution_count
, total_worker_time
, total_elapsed_time
, total_elapsed_time / execution_count avg_elapsed_time
,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) AS statement_text
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
where total_elapsed_time >= 300000000 --5 min
ORDER BY total_elapsed_time / execution_count DESC;
Je voudrais savoir si ce qui précède est la bonne façon de procéder, ou existe-t-il une meilleure façon de déterminer si une requête prend plus de temps qu'un intervalle spécifique, par exemple 5 minutes, comme indiqué?
Merci
Je favoriserais la suggestion de @StanleyJohns si vous avez SQL2008. Les événements prolongés valent la peine de vous familiariser avec en tant qu'outil de diagnostic et la série An XEvent a Day de Jonathon est un excellent point de départ.
Une alternative pour les blocages consiste à activer les indicateurs de trace 1204 et 1222 , qui transfèrent les informations de blocage dans le journal des erreurs SQL. Activez les deux pour obtenir les informations sous deux formats différents, ce qui peut faciliter la compréhension des chaînes de blocage complexes.
la source