Я хотел бы знать, есть ли способ отправить уведомление в тупик? Если так, какие запросы потребуются. Я понимаю, что SQL Server заботится о взаимоблокировках, мне просто нужна информация о задействованных запросах.
Я нашел следующее, чтобы определить длительные запросы:
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;
Я хотел бы знать, является ли приведенный выше подход верным, или есть лучший способ определить, занимает ли какой-либо запрос больше определенного интервала, скажем 5 минут, как показано?
Благодарность
Я бы предпочел предложение @StanleyJohns, если у вас SQL2008. Расширенные мероприятия, с которыми стоит ознакомиться в качестве диагностического инструмента, и серия Jonathon An XEvent a Day - отличное место для начала.
Альтернативой для взаимоблокировок является включение флагов трассировки 1204 и 1222 , которые сбрасывают информацию о взаимоблокировках в журнал ошибок SQL. Включите оба варианта, чтобы получить информацию в двух разных форматах, что облегчит понимание сложных цепочек взаимоблокировок.
источник