Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
najti_prichiny_blokirovok_sql [2026/04/15 06:42] tro создано |
najti_prichiny_blokirovok_sql [2026/04/22 06:57] (текущий) tro |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Найти причины блокировок SQL ====== | ====== Найти причины блокировок SQL ====== | ||
| + | |||
| + | ===== Перевірка на блокування ===== | ||
| + | ==== Розширена аналітика поточних блокувань + статистичні данні ==== | ||
| + | < | ||
| + | SELECT | ||
| + | s.session_id, | ||
| + | s.program_name, | ||
| + | s.host_name, | ||
| + | DB_NAME(s.database_id) | ||
| + | r.command, | ||
| + | r.status, | ||
| + | r.wait_type, | ||
| + | r.wait_time/ | ||
| + | |||
| + | -- ЧАС | ||
| + | r.total_elapsed_time/ | ||
| + | r.total_elapsed_time/ | ||
| + | |||
| + | -- CPU | ||
| + | r.cpu_time | ||
| + | CAST(r.cpu_time * 100.0 | ||
| + | / NULLIF(r.total_elapsed_time, | ||
| + | |||
| + | -- IO | ||
| + | r.logical_reads | ||
| + | r.reads | ||
| + | r.writes | ||
| + | -- скільки МБ прочитано з диску | ||
| + | r.reads * 8 / 1024 AS прочитано_МБ, | ||
| + | |||
| + | -- БЛОКУВАННЯ | ||
| + | r.blocking_session_id | ||
| + | r.open_transaction_count | ||
| + | |||
| + | -- ПРОГРЕС (для BACKUP, DBCC, ALTER INDEX) | ||
| + | r.percent_complete | ||
| + | r.estimated_completion_time/ | ||
| + | |||
| + | -- ПАМ' | ||
| + | mg.granted_memory_kb/ | ||
| + | mg.used_memory_kb/ | ||
| + | mg.requested_memory_kb/ | ||
| + | |||
| + | -- ПЛАН ВИКОНАННЯ (посилання) | ||
| + | r.plan_handle, | ||
| + | |||
| + | -- ТЕКСТ ЗАПИТУ | ||
| + | SUBSTRING(t.text, | ||
| + | (r.statement_start_offset/ | ||
| + | ((CASE r.statement_end_offset | ||
| + | WHEN -1 THEN DATALENGTH(t.text) | ||
| + | ELSE r.statement_end_offset | ||
| + | END - r.statement_start_offset)/ | ||
| + | ) AS поточний_оператор, | ||
| + | t.text | ||
| + | |||
| + | FROM sys.dm_exec_sessions s | ||
| + | JOIN sys.dm_exec_requests r | ||
| + | ON s.session_id = r.session_id | ||
| + | OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t | ||
| + | LEFT JOIN sys.dm_exec_query_memory_grants mg | ||
| + | ON r.session_id = mg.session_id | ||
| + | WHERE s.is_user_process = 1 | ||
| + | ORDER BY r.cpu_time DESC, r.logical_reads DESC | ||
| + | </ | ||
| + | |||
| + | ==== Показує всі сесії що зараз заблоковані кимось іншим ==== | ||
| + | < | ||
| + | SELECT session_id, wait_type, blocking_session_id | ||
| + | FROM sys.dm_exec_requests | ||
| + | WHERE blocking_session_id > 0 | ||
| + | </ | ||
| + | ===== Перевірка на блокування програмою 1С ===== | ||
| + | < | ||
| + | SELECT TOP 10 | ||
| + | s.session_id, | ||
| + | r.wait_type, | ||
| + | r.blocking_session_id, | ||
| + | t.text AS запит | ||
| + | FROM sys.dm_exec_sessions s | ||
| + | JOIN sys.dm_exec_requests r ON s.session_id = r.session_id | ||
| + | OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t | ||
| + | WHERE s.program_name LIKE ' | ||
| + | ORDER BY r.wait_time DESC | ||
| + | </ | ||
| + | ==== Перевірка Хто кого блокує + деталі винуватця ==== | ||
| + | < | ||
| + | SELECT | ||
| + | r.session_id AS жертва, | ||
| + | r.wait_type, | ||
| + | r.wait_time/ | ||
| + | r.blocking_session_id AS винуватець, | ||
| + | s_block.program_name AS програма_винуватця, | ||
| + | s_block.host_name AS хост_винуватця, | ||
| + | t.text AS запит_жертви | ||
| + | FROM sys.dm_exec_requests r | ||
| + | JOIN sys.dm_exec_sessions s_block | ||
| + | ON r.blocking_session_id = s_block.session_id | ||
| + | OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t | ||
| + | WHERE r.blocking_session_id > 0 | ||
| + | ORDER BY r.wait_time DESC | ||
| + | </ | ||
| + | |||
| ===== Довгі відкриті транзакції (типова причина в 1С) ===== | ===== Довгі відкриті транзакції (типова причина в 1С) ===== | ||
| < | < | ||
| Строка 20: | Строка 123: | ||
| ORDER BY open_sec DESC; | ORDER BY open_sec DESC; | ||
| </ | </ | ||
| + | ===== Пошук що саме робить проблемна сесія (в прикладі номер 62) ===== | ||
| + | < | ||
| + | SELECT r.session_id, | ||
| + | | ||
| + | | ||
| + | FROM sys.dm_exec_requests r | ||
| + | CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t | ||
| + | WHERE r.session_id = 62 | ||
| + | </ | ||
| + | ===== Вбити проблемний процес ===== | ||
| + | < | ||
| + | KILL 58 | ||
| + | </ | ||
| + | ===== Перевірка навантаження дискової підсистеми ===== | ||
| + | < | ||
| + | SELECT | ||
| + | DB_NAME(vfs.database_id) AS база, | ||
| + | mf.physical_name AS файл, | ||
| + | vfs.io_stall_read_ms / NULLIF(vfs.num_of_reads, | ||
| + | AS середня_затримка_читання_мс, | ||
| + | vfs.io_stall_write_ms / NULLIF(vfs.num_of_writes, | ||
| + | AS середня_затримка_запису_мс, | ||
| + | vfs.num_of_reads AS читань, | ||
| + | vfs.num_of_writes AS записів, | ||
| + | vfs.io_stall AS загальна_затримка_мс | ||
| + | FROM sys.dm_io_virtual_file_stats(NULL, | ||
| + | JOIN sys.master_files mf | ||
| + | ON vfs.database_id = mf.database_id | ||
| + | AND vfs.file_id = mf.file_id | ||
| + | WHERE DB_NAME(vfs.database_id) IN (' | ||
| + | ORDER BY vfs.io_stall DESC | ||
| + | </ | ||
| + | |||