среда, 27 июля 2016 г.

Возможности логгирования для заданий SQL Server Agent

По мотивам статьи: http://sqlmag.com/blog/semi-advanced-logging-options-sql-server-agent-jobs


Многие администраторы БД (и я в их числе) серьёзно полагаются на задания (Jobs) SQL Server Agent для решения разнообразнейших задачек - всё от однообразного (обязательного) обслуживания и проверки ошибок в базах данных до регулярного выполнения сложных бизнес-логик или всесторонних операций Иморта/Экспорта.

Удивительно, многие администраторы БД обычно пропускают несколько легкодоступных продвинутых опций, которые могут значительно упростить взаимодействие с Заданиями SQL Server Agent. Особенно, когда эти задания падают с ошибками, и нужно сделать отладку, да и вообще - во многих случаях может быть очень выгодно, когда есть наиболее полные логи.



 Страница Advanced в настройках шага задания

Вся история выполнения заданий записывается в системную таблицу sysjobhistory (в базе msdb), количество записываемой информации ограничено типом данных nvarchar(4000).

 Чтобы получить преимущество от дополнительного логгирования, нужно включить флажок на странице Advanced для каждого конкретного шага задания (Job Step), по которому вы хотите собирать дополнительную информацию. Как это сделать, показано на скриншоте ниже:
Job Steps

Output file
Эта опция позволяет направить весь вывод, совершаемый в вашем задании (Job) во внешний лог-файл. Лично мне нравится использовать эту опцию во многих случаях , когда выполняется операция DBCC CHECKDB (и другие операции проверки ошибок), - и получить вывод по всем проверяемым БД в простой .txt файл. Проанализировать содержимое такого файла гораздо легче, чем искать нужную информацию в SQL Server Logs. К тому же в этом случае (выполнение DBCC CHECKDB) и во многих других случаях можно понять как выполнилась операция, просто взглянув на размер лог-файла (если будут ошибки, то лог-файл будет намного больше).


Log to table

Честно говоря я не использовал ни разу эту опцию - не знаю почему. Это опция позволяет записывать дополнительную информацию, выводимую в заданиях в новую системную таблицу dbo.sysjobsteplogs  (в базе msdb), эта таблица появится после включения этой опции. Способ эффективного использования: с помощью скриптов периодически сканировать данную таблицу на появление нужных текстовых отрывков (последовательностей), сразу после логгирования информации в эту таблицу из различных шагов заданий. В итоге, вы сможете получить дополнительную информацию или информацию о результате выполнения.


Include step output in history

Это одна из моих любимых опций, которые я включаю, во многих случаях решения проблем с заданиями (или шагом задания), которые время от времени падают с ошибкой. Включив этот флажок, у вас будет лучшее понимание ситуации что произошло и что могло быть причиной проблемы.
Например, вместо того чтобы направить результаты операции DBCC CHECKDB в текстовый лог-файл (это включение опции Output file ), можно просто выводить всю подробную информацию по заданию в саму Историю (хранится в системной таблице в базе msdb). 


Когда и как использовать эти опции?

Многие задания (Jobs) работают тогда, когда вы не можете оперативно посмотреть ход и результаты выполнения (в консоли Job Activity Monitor): поздно ночью или рано утром. А также в то время суток, когда вы можете оперативно вмешаться в работу сервера, но при этом могут возникнут внешние условия, которые помешают вам, и которые невозможно предвидеть заранее. Поэтому, если вы сталкиваетесь с заданиями (Jobs), которые периодически падают с ошибкой и вы думаете, что это может быть связано с работой любых других заданий/операций, которые выполняются примерно в это же время, тогда просто включайте и используйте описанные выше опции, чтобы добавить простую отладку (о текущем состоянии сервера) или логгировать все подробности выполнения заданий. В результате, вы будете понимать, что происходит на вашем сервере в периоды выполнения заданий.

Например, можно сделать запрос к sys.dm_os_waiting_tasks или sys.dm_os_wait_stats (или/и другим похожим DMV) и получить результаты такого запроса тут же в шаге задания. 

Ещё один пример: вы работаете над бизнес-задачей, и у вас что-то не получается, но вы не можете разобраться в проблеме. Тогда вы просто добавляете в шаги задания простые SELECT-ы (здесь вы выводите ту отладочную информацию, которая как-то может помочь с решением проблемы) и результаты этих запросов будут добавлены в результаты выполнения ваших заданий (Jobs). Такие результаты могут очень сильно помочь с решением проблемы.

Итак, использование этих опций может дать значительные улучшения в двух случаях: 1. когда мы добавляем в новые или уже работающие задания вывод любой дополнительной информации ; 2. когда мы собираем всю необходимую отладочную информацию, которая поможет нам выявить и устранить неполадки.


Требования и замечания

Чтобы получить преимущество от использования этих опций и при этом не столкнутся с проблемами нужно помнить о нескольких важных требованиях (замечаниях):

Во-первых, для того чтобы использовать опцию Log to table нужны разрешения на изменение схемы базы msdb (для учётной записи, под которой происходит включение этой опции), и разрешение на запись данных в таблицу dbo.sysjobsteplogs  (в базе msdb)  для учётной записи, которая будет фактически записывать данные в таблицу (эта та учётная запись, под которой будет выполняться шаги задания).

Во-вторых, когда вы будете использовать опцию Include step output in history ваша база msdb значительно увеличится в размерах (из-за подробного логгирования каждого шага задания и записи этой информации в базу msdb)!

В-третьих, если вы захотите задействовать опцию Output file : нужно для учётной записи службы SQL Server Agent дать права доступа на Изменение (MODIFY) в каталог, который вы определите (здесь будут складываться файлы с логами).


Заключение

Не следует повсюду включать опции расширенного логирования заданий (Jobs) SQL Server Agent (ведь по умолчанию данные опции выключены!)

Грамотное и точечное применение этих опций (это агрегирования результатов запросов и вывода полного контекста выполнения задач обслуживания  там где это действительно нужно) даёт мощный толчок в решении проблем с неподатливыми заданиями (Jobs) или получения любой дополнительной информации по ходу выполнения (если это требуется).

Комментариев нет:

Отправить комментарий