Ранее мы разобрали DMV sys.dm_os_wait_stats и посмотрели как оно может быть полезно чтобы определить узкие места. Однако данная статистика охватывает весь сервер с момента рестарта или принудительного сброса статистики. Достаточно часто мы хотим знать о процессах, происходящих в данный момент на сервере.
Что если мы хотим знать какие запросы запущены в данный момент или были запущены недавно и их планы всё ещё в кэше. Вот небольшой запрос, который позволит это увидеть:
SELECT dm_ws.wait_duration_ms, dm_ws.wait_type, dm_es.status, dm_t.TEXT, dm_qp.query_plan, dm_ws.session_ID, dm_es.cpu_time, dm_es.memory_usage, dm_es.logical_reads, dm_es.total_elapsed_time, dm_es.program_name, DB_NAME(dm_r.database_id) DatabaseName, — Optional columns dm_ws.blocking_session_id, dm_r.wait_resource, dm_es.login_name, dm_r.command, dm_r.last_wait_type FROM sys.dm_os_waiting_tasks dm_ws INNER JOIN sys.dm_exec_requests dm_r ON dm_ws.session_id = dm_r.session_id INNER JOIN sys.dm_exec_sessions dm_es ON dm_es.session_id = dm_r.session_id CROSS APPLY sys.dm_exec_sql_text (dm_r.sql_handle) dm_t CROSS APPLY sys.dm_exec_query_plan (dm_r.plan_handle) dm_qp WHERE dm_es.is_user_process = 1 GO
Вы можете поменять CROSS APPLY на OUTER APPLY, если хотите увидеть все подробности, которые опущены из-за кэша плана.
Давайте проанализируем результат вышеупомянутого запроса и посмотрим как он нам может помочь определить запрос и тип ожидания, которое он создаёт.
Вот описание основных столбцов, которые возвратил запрос.
wait_duration_ms – текущее время ожидания запроса в мс, который выполняется в данный момент.
wait_type – тип ожидания
text – текст запроса
query_plan – если щёлкнуть на него, то вы увидите план запроса
И ещё много дополнительной информации. Например CPU_time, memory_usage, and logical_reads.
В будущем мы посмотрим как можно избавиться от разного типа ожиданий.
Автор: Pinal Dave
*** *** *** *** *** *** *** *** *** *** *** ***
Полезные Скрипты
Рубрика Проверь себя
Ссылка на наш канал YouTube