Повідомлення про тривалий запит або тупик у SQL Server 2008 R2?


15

Мені хотілося б знати, чи є спосіб надіслати сповіщення про тупик? Якщо так, то які запити будуть потрібні. Я розумію, що 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 хв, як показано?

Спасибі

Відповіді:


8

У SQL 2008 з'явилася нова функція, яку можна використовувати для тупикових ситуацій та довгих запущених черг: розширені події . Розширені події є об'єктами низького рівня і споживають набагато менше ресурсів, ніж інші методи, такі як профілювання / відстеження, оповіщення тощо.

Щоб використовувати розширені події, deadlocksознайомтеся з цим дописом Джонатаном Кехаясом , MVP-сервером SQL-сервера.

Щоб використовувати розширені події для пошуку long running queries, ознайомтеся з цією детальною публікацією Pinal Dave , іншого SQL-сервера MVP.


10

Ви можете налаштувати оповіщення для обох із засобом SQL. Створіть нове попередження та виберіть "Сповіщення про стан продуктивності SQL Server"

Для тривалих запитів оберіть Об'єкт "MSSQL $ InstanceName: Операції" та Лічильник: Найдовший час виконання транзакції. Налаштуйте значення та параметри сповіщення про сповіщення, і ви готові йти.

Для тупикових ситуацій об'єктом є "MSSQL $ InstanceName: Locks", а лічильник - "Кількість тупиків / сек"

Якщо ви хочете більш детально контролювати повідомлення про тупик, перевірте це: http://www.sqlservercentral.com/articles/Administration/3243/


Я спробував налаштувати сповіщення, як ви запропонували, однак робота запуститься лише в тому випадку, якщо у мене визначені кроки. Чи є спосіб встановити попередження без визначення кроків завдання?
Hasanain

4

Я б віддав перевагу пропозиції @StanleyJohns, якщо у вас є SQL2008. Розширені події варто ознайомити з діагностичним інструментом, а серія Jonathon An XEvent a Day - чудове місце для початку.

Альтернативою для тупикових ситуацій є включення прапорів 1204 та 1222 слідів , які скидають інформацію про тупик до журналу помилок SQL. Увімкніть обидва, тому ви отримуєте інформацію у двох різних форматах, що полегшує розуміння складних ланцюгів тупикових ситуацій.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.