Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
leonix
Member

Откуда:
Сообщений: 403
Другими словами проще говоря.
Нужно постоянно подсчитывать блокировки и если за последние полчаса количество блокировок стало больше некоторой величины то отправлять письмо.
Подскажите куда копать.
18 апр 19, 09:50    [21865764]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
leonix
Member

Откуда:
Сообщений: 403
И эти блокировки должны быть более 15 секунд.
Т.е. надо постоянно подсчитывать блокировки длительностью более 15 сек.
18 апр 19, 09:51    [21865765]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
leonix,

каких блокировок?
18 апр 19, 09:52    [21865767]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
leonix
Member

Откуда:
Сообщений: 403
TaPaK
leonix,

каких блокировок?


На строки или на таблицы.
Например когда один пользователь пишет в таблицу, а другой ждёт когда освободиться таблица более 15 сек.
Какая это блокировка? Обычная блокировка :)
18 апр 19, 09:57    [21865775]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
leonix,

так sys.dm_exec_requests там и время и кто и как
18 апр 19, 09:58    [21865776]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
А вообще, праивльнее EE
копать в эту сторону
https://www.sqlskills.com/blogs/erin/capture-blocking-information-with-extended-events-and-the-blocked-process-report/


"более 15 сек" раз "в пол часа". Я думаю если всё так стоять будет, все лично прийдут :)
18 апр 19, 10:01    [21865779]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
leonix
Member

Откуда:
Сообщений: 403
Если я обращусь sys.dm_exec_requests, это будет моментальный снимок. Если сделаю через 1 сек, то может картина не поменяется, будут теже блокировки.
Мне их надо накапливать за последний час например.
Пока не соображу как сделать.
18 апр 19, 10:03    [21865782]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33658
Блог
leonix,

Делайте снимки каждые 15 секунд.
18 апр 19, 10:24    [21865808]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
leonix
Member

Откуда:
Сообщений: 403
Критик
leonix,

Делайте снимки каждые 15 секунд.


Будут та же картина. Если я буду записывать данные о блокировках в БД, то
будут дублироваться одни и те же блокировки.
18 апр 19, 10:30    [21865822]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
leonix
Критик
leonix,

Делайте снимки каждые 15 секунд.


Будут та же картина. Если я буду записывать данные о блокировках в БД, то
будут дублироваться одни и те же блокировки.

merge по spId не предлагать? Что не так с EE?
18 апр 19, 10:36    [21865829]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
leonix
Member

Откуда:
Сообщений: 403
TaPaK
leonix
пропущено...


Будут та же картина. Если я буду записывать данные о блокировках в БД, то
будут дублироваться одни и те же блокировки.

merge по spId не предлагать? Что не так с EE?


Придётся загружать данные о блокировках и потом обрабатывать, удалять дубли.

EE недавно пробовал, даже тему тут создавал. Я не понял как EE отправлять по почте.
18 апр 19, 11:03    [21865853]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
leonix
TaPaK
пропущено...

merge по spId не предлагать? Что не так с EE?


Придётся загружать данные о блокировках и потом обрабатывать, удалять дубли.

EE недавно пробовал, даже тему тут создавал. Я не понял как EE отправлять по почте.

ключевое слово merge. Но если вы ничего не хотите делать, то да, волшебной кнопки нет.

автор
Я не понял как EE отправлять по почте.

и смех и грех...
18 апр 19, 11:05    [21865856]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
Еще варианты
https://aboutsqlserver.com/2013/04/08/locking-in-microsoft-sql-server-part-16-monitoring-blocked-processes-report-with-event-notifications/
https://www.sqlserver-dba.com/2017/01/how-to-monitor-blocked-processes-with-sql-alert-and-email-sp_whoisactive-report.html
18 апр 19, 11:11    [21865862]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7758
Создайте алёрты на длительные транзакции и длительно выполняемые запросы. Обычно 2-3 часа подвисаний говорят о каких-то проблемах.
18 апр 19, 11:17    [21865872]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
PsyMisha
Member

Откуда: другая столица
Сообщений: 769
leonix, если я, конечно, правильно понял вашу проблему - такой примитивный механизм подойдет?
1) Создайте почтовый профиль на сервере - .\Management --> Database Mail
2) Создайте сиквельный джоб на сервере, с периодичностью запуска раз в n-минут
3) В скрипте в секции бизнес-логики опишите то, что вы понимаете под запросом на поиск блокировок, тот самый статичный запрос, вывод которого вас устраивает, базовый пример от меня - в этой же секции
4) В джобе сделайте шаг с этим новым скриптом и подставьте ваши параметры в модуль отправки почты
5) Профит, не?

DECLARE @Some_Locks_Count AS INT

-- ##############
-- ВЛОЖИТЬ БИЗНЕС_ЛОГИКУ
SELECT @Some_Locks_Count = COUNT(*) FROM sys.dm_exec_requests
-- ##############

IF @Some_Locks_Count > 30 -- to amend
BEGIN
		EXEC msdb.dbo.sp_send_dbmail
		@profile_name = 'Default Mail Sender',
		@recipients = 'operator@domain.com',
		@subject = 'Lock amount exceeds the maximum!',
		@body = 'There is a number of issues with locks on the server. Please kindly check and do the needful',
		@from_address = 'admin@domain.com',
		@reply_to = 'NoReply@domain.com',
		@importance = 'High'

END
19 апр 19, 09:39    [21866812]     Ответить | Цитировать Сообщить модератору
 Re: Как сделать оповещение в случае большого количества длит-ных блок-ок за последние полчаса?  [new]
Idol_111
Member

Откуда:
Сообщений: 604
зачем все усложнять то? Все давно придумано:
EXEC msdb.dbo.sp_add_alert @name=N'Blocking', 
		@enabled=1, 
		@delay_between_responses=300, 
		@include_event_description_in=1, 
		@performance_condition=N'SQLServer:General Statistics|Processes blocked||>|5', 
		@job_id=N'00000000-0000-0000-0000-000000000000'
GO
EXEC msdb.dbo.sp_add_notification @alert_name=N'Blocking', @operator_name=N'MS-SQL-Admins', @notification_method = 1
GO

предварительно установив BlockedProcessThreshold на 20.

Более чем достаточно для понимания того, что у тебя происходит на сервере.
24 апр 19, 00:48    [21870205]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить