Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
stvorennja_v_sql_sistemi_monitoringa_blokuvan [2026/05/01 14:41] tro |
stvorennja_v_sql_sistemi_monitoringa_blokuvan [2026/05/01 14:52] (текущий) tro |
||
|---|---|---|---|
| Строка 100: | Строка 100: | ||
| -- 1. Загальний знімок стану системи | -- 1. Загальний знімок стану системи | ||
| INSERT INTO dbo.SnapshotLog ( | INSERT INTO dbo.SnapshotLog ( | ||
| - | CaptureTime, | + | CaptureTime, |
| SuspendedSessions, | SuspendedSessions, | ||
| SqlMemoryUsedMb, | SqlMemoryUsedMb, | ||
| Строка 110: | Строка 110: | ||
| (SELECT COUNT(*) FROM sys.dm_exec_requests WHERE status = ' | (SELECT COUNT(*) FROM sys.dm_exec_requests WHERE status = ' | ||
| (SELECT COUNT(*) FROM sys.dm_exec_requests WHERE blocking_session_id > 0), | (SELECT COUNT(*) FROM sys.dm_exec_requests WHERE blocking_session_id > 0), | ||
| - | (SELECT ISNULL(SUM(wait_time), | + | (SELECT ISNULL(SUM(wait_time), |
| WHERE wait_type NOT IN (' | WHERE wait_type NOT IN (' | ||
| p.physical_memory_in_use_kb / 1024, | p.physical_memory_in_use_kb / 1024, | ||
| Строка 142: | Строка 142: | ||
| DATEDIFF(SECOND, | DATEDIFF(SECOND, | ||
| FROM sys.dm_exec_requests r | FROM sys.dm_exec_requests r | ||
| - | JOIN sys.dm_exec_sessions s_blocked | + | JOIN sys.dm_exec_sessions s_blocked |
| - | JOIN sys.dm_exec_sessions s_blocking ON r.blocking_session_id = s_blocking.session_id | + | JOIN sys.dm_exec_sessions s_blocking |
| CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t_blocked | CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t_blocked | ||
| - | OUTER APPLY sys.dm_exec_sql_text(s_blocking.sql_handle) t_blocking | + | OUTER APPLY ( |
| + | SELECT SUBSTRING(t.text, | ||
| + | FROM sys.dm_exec_requests r2 | ||
| + | CROSS APPLY sys.dm_exec_sql_text(r2.sql_handle) t | ||
| + | WHERE r2.session_id = r.blocking_session_id | ||
| + | | ||
| LEFT JOIN sys.dm_tran_session_transactions tst ON tst.session_id = r.blocking_session_id | LEFT JOIN sys.dm_tran_session_transactions tst ON tst.session_id = r.blocking_session_id | ||
| LEFT JOIN sys.dm_tran_active_transactions at ON at.transaction_id = tst.transaction_id | LEFT JOIN sys.dm_tran_active_transactions at ON at.transaction_id = tst.transaction_id | ||
| WHERE r.blocking_session_id > 0; | WHERE r.blocking_session_id > 0; | ||
| - | -- 3. Очікування на об' | + | -- 3. Очікування на об' |
| INSERT INTO dbo.LockLog ( | INSERT INTO dbo.LockLog ( | ||
| CaptureTime, | CaptureTime, | ||
| Строка 164: | Строка 169: | ||
| DB_NAME(l.resource_database_id), | DB_NAME(l.resource_database_id), | ||
| OBJECT_NAME(l.resource_associated_entity_id, | OBJECT_NAME(l.resource_associated_entity_id, | ||
| - | | + | |
| l.resource_type, | l.resource_type, | ||
| l.request_mode, | l.request_mode, | ||
| Строка 176: | Строка 181: | ||
| LEFT JOIN sys.dm_tran_session_transactions tst ON tst.session_id = l.request_session_id | LEFT JOIN sys.dm_tran_session_transactions tst ON tst.session_id = l.request_session_id | ||
| LEFT JOIN sys.dm_tran_active_transactions at ON at.transaction_id = tst.transaction_id | LEFT JOIN sys.dm_tran_active_transactions at ON at.transaction_id = tst.transaction_id | ||
| - | LEFT JOIN sys.indexes i | ||
| - | ON i.object_id = l.resource_associated_entity_id | ||
| - | AND i.index_id = l.resource_subtype_int | ||
| OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t | OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) t | ||
| WHERE l.resource_type IN (' | WHERE l.resource_type IN (' | ||
| Строка 214: | Строка 216: | ||
| -- 5. Очищення даних старше 14 днів | -- 5. Очищення даних старше 14 днів | ||
| - | DELETE FROM dbo.BlockingLog | + | DELETE FROM dbo.BlockingLog |
| - | DELETE FROM dbo.LockLog | + | DELETE FROM dbo.LockLog |
| DELETE FROM dbo.HeavySessionLog WHERE CaptureTime < DATEADD(DAY, | DELETE FROM dbo.HeavySessionLog WHERE CaptureTime < DATEADD(DAY, | ||
| - | DELETE FROM dbo.SnapshotLog | + | DELETE FROM dbo.SnapshotLog |
| END; | END; | ||
| GO | GO | ||
| - | PRINT ' | + | PRINT ' |
| + | </ | ||
| + | ===== Крок 4 — Створюємо SQL Agent Job: ===== | ||
| + | < | ||
| + | USE msdb; | ||
| + | GO | ||
| + | |||
| + | DECLARE @jobId BINARY(16); | ||
| + | |||
| + | EXEC sp_add_job | ||
| + | @job_name = N'1C - Monitoring Capture', | ||
| + | @enabled = 1, | ||
| + | @job_id = @jobId OUTPUT; | ||
| + | |||
| + | EXEC sp_add_jobstep | ||
| + | @job_id = @jobId, | ||
| + | @step_name = N'Run monitoring capture', | ||
| + | @subsystem = N' | ||
| + | @command = N'EXEC MonitoringDB.dbo.usp_CaptureMonitoring;', | ||
| + | @database_name = N' | ||
| + | |||
| + | EXEC sp_add_schedule | ||
| + | @schedule_name = N'1C Monitor Every 2 min', | ||
| + | @freq_type = 4, | ||
| + | @freq_interval = 1, | ||
| + | @freq_subday_type = 4, | ||
| + | @freq_subday_interval = 2; | ||
| + | |||
| + | EXEC sp_attach_schedule | ||
| + | @job_id = @jobId, | ||
| + | @schedule_name = N'1C Monitor Every 2 min'; | ||
| + | |||
| + | EXEC sp_add_jobserver | ||
| + | @job_id = @jobId, | ||
| + | @server_name = N' | ||
| + | |||
| + | GO | ||
| + | |||
| + | SELECT name, enabled, date_created | ||
| + | FROM msdb.dbo.sysjobs | ||
| + | WHERE name = N'1C - Monitoring Capture'; | ||
| + | |||
| + | PRINT ' | ||
| + | </ | ||
| + | ==== Крок 4.1 - запуск завдання вручну (для | ||
| + | < | ||
| + | -- Запускаємо вручну | ||
| + | EXEC msdb.dbo.sp_start_job N'1C - Monitoring Capture'; | ||
| + | </ | ||
| + | ==== Крок 4.2 Перевырка успышносты запису ==== | ||
| + | < | ||
| + | -- Перевіряємо що з'явився новий запис | ||
| + | SELECT * FROM MonitoringDB.dbo.SnapshotLog ORDER BY Id DESC; | ||
| + | |||
| + | -- Перевіряємо статус останнього запуску job-а | ||
| + | SELECT | ||
| + | j.name, | ||
| + | h.run_date, | ||
| + | h.run_time, | ||
| + | h.run_duration, | ||
| + | CASE h.run_status | ||
| + | WHEN 0 THEN ' | ||
| + | WHEN 1 THEN ' | ||
| + | WHEN 2 THEN ' | ||
| + | WHEN 3 THEN ' | ||
| + | WHEN 4 THEN ' | ||
| + | END AS run_status, | ||
| + | h.message | ||
| + | FROM msdb.dbo.sysjobs j | ||
| + | JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id | ||
| + | WHERE j.name = N'1C - Monitoring Capture' | ||
| + | ORDER BY h.run_date DESC, h.run_time DESC; | ||
| + | </ | ||
| + | ===== Крок 6 - отримання результатів моніторинга ===== | ||
| + | < | ||
| + | SELECT * FROM MonitoringDB.dbo.BlockingLog | ||
| + | WHERE CaptureTime >= DATEADD(MINUTE, | ||
| + | ORDER BY CaptureTime DESC; | ||
| + | |||
| + | SELECT * FROM MonitoringDB.dbo.HeavySessionLog | ||
| + | WHERE CaptureTime >= DATEADD(MINUTE, | ||
| + | ORDER BY CaptureTime DESC; | ||
| </ | </ | ||