Очень часто ввиду непроработанной архитектуры, возникают запросы которые способны положить любую высокопроизводительную базу,
Тут может быть и CROSS JOIN или запрос не попадающий в индекс, заблокированные сессиии и тд..
Как быстро разобраться кто и зачем это делает?)
Ведь в определенный момент может остановиться вся система, если не настроены тайм ауты на выполнения запросов.
Для анализа таких запросов в SQL SERVER очень умный дядька придумал хранимую процедуру sp_WhoIsActive
Мы ее немного модифицируем и сделаем рассылку проблемных запросов с выполнением больше часа на наш ящик для их последующего анализа.
Создадим в нашей схеме таблицу, сюда будем складывать наши запросы
Подробнее здесь
DECLARE @destination_table VARCHAR(4000) ;
SET @destination_table = 'WhoIsActive_' + CONVERT(VARCHAR, GETDATE(), 112) ;
DECLARE @schema VARCHAR(4000) ;
EXEC sp_WhoIsActive
@get_transaction_info = 1,
@get_plans = 1,
@return_schema = 1,
@schema = @schema OUTPUT ;
SET @schema = REPLACE(@schema, '<table_name>', @destination_table) ;
PRINT @schema
Подробнее здесь
DECLARE @destination_table VARCHAR(4000) ;
SET @destination_table = 'WhoIsActive_' + CONVERT(VARCHAR, GETDATE(), 112) ;
DECLARE @schema VARCHAR(4000) ;
EXEC sp_WhoIsActive
@get_transaction_info = 1,
@get_plans = 1,
@return_schema = 1,
@schema = @schema OUTPUT ;
SET @schema = REPLACE(@schema, '<table_name>', @destination_table) ;
PRINT @schema
Качаем последнюю версию sp_WhoIsActive
Для того чтобы сохранить результаты процедуры в таблицу выполняем
EXEC dbo.sp_WhoIsActive @destination_table = 'WhoIsActiveLog' ;
Создаем представление которое будет показывать самые свежайшие запросы
Создаем процедуру, которая будет нам отправлять запросы на ящик
+ Немного смайлов
Из жизни. На планерке в летнем лагере. Приводят мальчика, который подглядывал за девушками-вожатыми в душе. С целью, типа, отчитать его… Ну, директор лагеря задает вопрос: — Понравилось? Мальчик в растерянности, через паузу выдает: — Нет… Девушки-вожатые, в один голос: — НЕТ?!