Перевод и дополнение: What is the system_health extended events session?
Подобно трассе по-умолчанию (defaul trace), system health — это сессия Extended Events, которая автоматически запускается, когда экземпляр SQL Server стартует и собирает информацию о происходящем на сервере.
ИЗ BOL можно узнать, что она собирает:
- Ошибки со срочностью >= 20
- Ошибки, относящиеся к памяти (17803, 701, 802, 8645, 8651, 8657 и 8902)
- Дедлоки
- Сессии, которые ожидали блокировки более 30 секунд
- Ошибки CLR allocation & virtual allocation
- и тд.
Наиболее полезные события, это ошибки, дедлоки и ожидания блокировок. Обратите внимание, что system_health возвращает иную информацию, нежели трасса по-умолчанию.
Хорошо, мы собираем данные, но где они хранятся? Если вы посмотрите в SSMS, вы увидите 2 места хранения:
Первое место хранения находится на файловой системе и файлы имеют названия типа system_heals*.xel, обратите внимание, что подобных файлов обычно несколько, за исключением моментов, когда SQL Server был совсем недавно установлен, хранятся они примерно по следующему пути C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log. Второе место хранения находится ориентировочно по пути Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\, здесь файлы так же имеют название типа system_health*.xel, но длина названия значительно больше.
Теперь мы знает что такое system_health сессия и где она хранится, но как же нам посмотреть что она собирает?
Исчерпывающую информацию вы можете найти здесь. Рассмторим основные возможности:
Вы можете открыть 1 или более файлов *.xel через SSMS
Посмотреть текущую сессию через «View target data»
Когда вы открываете второе место хранения (ring_buffer), то вы получите информацию в виде XML, которую не так просто понять.
Наблюдать только новые события с момент открытия окна «Watch Live Data»
С помощью табличной функции в запросе
SELECT * FROM sys.fn_xe_file_target_read_file ('system_health*.xel',null,null,null)
Информация возвращается в виде XML. Вы можете воспользоваться XQuery для работы с ней. Это очень удобно, так как позволяет работать с информацией очень гибко.
Заключение
Сессия Extended Events по-умолчанию (system_health) собирает очень полезные события о работе вашего SQL Server, в моей практике она не раз помогала понять причины проблем или хотя бы направляла в нужную сторону. Самое ценное в system_health то, что она работает «из коробки» и позволит получить некоторую информацию из прошлого, даже если никакого мониторинга настроено не было.