Использование сеанса system_health
Применимо к: SQL Server Управляемый экземпляр SQL Azure
Сеанс system_health является сеансом расширенных событий, который по умолчанию включен в состав SQL Server. Этот сеанс запускается автоматически при запуске Компонент SQL Server Database Engine и выполняется без заметного воздействия на производительность. В этом сеансе собираются системные данные, которые можно использовать для устранения неполадок, связанных с производительностью компонента Компонент Database Engine.
Важно!
Поэтому этот сеанс не рекомендуется останавливать или удалять. Любые изменения, внесенные в параметры сеанса system_health, могут быть перезаписаны будущим обновлением продукта.
Сеанс собирает следующие данные.
Sql_text и session_id для всех сеансов, в которых возникает ошибка с уровнем серьезности >20.
sql_text и session_id для всех сеансов, в которых возникает ошибка, связанная с памятью. К этим ошибкам относятся 17803, 701, 802, 8645, 8651, 8657 и 8902.
Запись всех нерешенных проблем планировщика. Они записываются в журнал ошибок SQL Server в виде ошибки 17883.
Все обнаруженные взаимоблокировки, включая граф взаимоблокировок.
Вызовы, sql_text и session_id для любых сеансов, ожидающих кратковременных блокировок (или других интересных ресурсов) в течение > 15 секунд.
Вызовы,sql_text и session_id для любых сеансов, ожидающих блокировки в течение > 30 секунд.
callstack, sql_text и session_id для всех сеансов, которые долгое время находились в режиме ожидания с вытеснением. Длительность зависит от типа ожидания. Ожидание с вытеснением возникает в том случае, если SQL Server ожидает внешних вызовов API.
Значения callstack и session_id для ошибок размещения CLR и виртуального выделения.
События ring_buffer для брокера памяти, монитора планировщиков, OOM узла памяти, безопасности и возможности подключения.
Компонент системы результирует из
sp_server_diagnostics
.Данные об исправности экземпляра, собираемые scheduler_monitor_system_health_ring_buffer_recorded.
Сбои размещения CLR.
Ошибки возможности подключения при использовании connectivity_ring_buffer_recorded.
Ошибки безопасности при использовании security_error_ring_buffer_recorded.
Примечание
Дополнительные сведения о взаимоблокировках см. в руководстве по взаимоблокировкам.
Дополнительные сведения о сообщениях об ошибках SQL см. в разделе Ошибки ядра СУБД.
Просмотр данных сеанса
В сеансе для хранения данных используется целевой кольцевой буфер и целевой файл событий. Целевой файл событий имеет максимальный размер 5 МБ и политику хранения файлов — 4 файла.
Для просмотра данных сеанса из целевого кольцевого буфера с пользовательским интерфейсом расширенных событий, доступным в SQL Server Management Studio, см. раздел Расширенный просмотр целевых данных из расширенных событий в SQL Server – просмотр динамических данных.
Чтобы просмотреть данные сеанса из целевого объекта кольцевого буфера с помощью Transact-SQL, используйте следующий запрос:
SELECT CAST(xet.target_data as xml)
FROM sys.dm_xe_session_targets xet
JOIN sys.dm_xe_sessions xe ON (xe.address = xet.event_session_address)
WHERE xe.name = 'system_health'
Для просмотра данных сеанса из файла событий пользуйтесь доступным пользовательским интерфейсом расширенных событий в SQL Server Management Studio. Дополнительные сведения см. в разделе Advanced Viewing of Target Data from Extended Events in SQL Server(Расширенный просмотр целевых данных из расширенных событий в SQL Server).
Восстановление сеанса system_health
Если сеанс system_healt был удален, то вы можете его восстановить, выполнив файл u_tables.sql в редакторе запросов. Этот файл находится в следующей папке, где C: означает диск, на котором установлены программные файлы SQL Server, а MSSQL1x — основной номер версии SQL Server:
C:\Program Files\Microsoft SQL Server\MSSQL1x.\<*instanceid*>\MSSQL\Install
Имейте в виду, что после восстановления сеанса необходимо его запустить с помощью инструкции ALTER EVENT SESSION
или через узел Расширенные события в обозревателе объектов. Если этого не сделать, сеанс запустится автоматически при следующем перезапуске службы SQL Server .
Сеанс system_health в Azure SQL
В базе данных Azure SQL нет встроенного сеанса system_health расширенных событий, но вы можете использовать для sys.fn_xe_file_target_read_file
чтения из сеансов расширенных событий, создаваемых самостоятельно и сохраняемых в Хранилище BLOB-объектов Azure. Пример пошагового руководства см. в статье Код целевого объекта файла событий для расширенных событий в базе данных Azure SQL.
В Управляемый экземпляр SQL Azure целевой объект XEL сеанса system_health расширенных событий недоступен, но system_health можно получить через целевой объект кольцевого буфера. Дополнительные сведения см. в статье Целевые объекты для расширенных событий в SQL Server.