Published on

May 24, 2018

Изучение сеанса системного здоровья SQL Server

SQL Server предоставляет мощную функцию, называемую Расширенные события, которая позволяет администраторам баз данных собирать и анализировать диагностическую информацию о сервере. Один из наиболее полезных сеансов расширенных событий – это сеанс системного здоровья, который фиксирует важную информацию о состоянии и производительности сервера.

В недавней статье блога Гранта Фритчи он рассказал о том, как сеанс системного здоровья можно использовать для определения запросов, которые должны ждать более 30 секунд для получения ресурса. Он продемонстрировал, как извлечь информацию XML из сеанса, но оставил разбор XML кому-то другому. В этой статье мы более подробно рассмотрим предоставленный Грантом код и изучим концепцию сеанса системного здоровья.

Фрагмент кода, предоставленный Грантом, позволяет нам получить ценную информацию из сеанса системного здоровья. Разберем его:

SELECT 
    xed.event_data.value('(@timestamp)[1]', 'datetime2') AS [timestamp],
    xed.event_data.value('(data[@name="wait_type"]/text)[1]', 'varchar(25)') AS wait_type, 
    xed.event_data.value('(data[@name="duration"]/value)[1]', 'int')/1000/60.0 AS wait_time_in_min, 
    xed.event_data.value('(action[@name="sql_text"]/value)[1]', 'varchar(max)') AS sql_text, 
    xed.event_data.value('(action[@name="session_id"]/value)[1]', 'varchar(25)') AS session_id, 
    xData.Event_Data,
    fx.object_name
FROM sys.fn_xe_file_target_read_file ('system_health*.xel','system_health*.xem',null,null) fx
CROSS APPLY (SELECT CAST(fx.event_data AS XML) AS Event_Data) AS xData
CROSS APPLY xData.Event_Data.nodes('//event') AS xed (event_data)
WHERE fx.object_name = 'wait_info';

Этот запрос извлекает информацию, такую как временная метка, тип ожидания, время ожидания в минутах, SQL-текст, идентификатор сеанса и другое из сеанса системного здоровья. Анализируя эти данные, администраторы баз данных могут получить представление о узких местах производительности и определить запросы, вызывающие задержки.

Хотя сеанс системного здоровья предоставляет ценную информацию, следует учитывать несколько ограничений. Во-первых, сеанс хранит только ограниченное количество информации, поэтому на загруженной системе данные могут быстро исчезнуть. Кроме того, когда речь идет о блокировке, сеанс показывает только заблокированный запрос и тип блокировки, который он пытался получить. Он не предоставляет информацию о запросе, который фактически блокировал его, что может затруднить устранение проблемы.

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

В заключение, сеанс системного здоровья в SQL Server – это мощный инструмент для мониторинга и диагностики производительности сервера. Используя информацию, зафиксированную этим сеансом, администраторы баз данных могут проактивно определять и устранять узкие места производительности. Однако важно знать ограничения сеанса и реализовать дополнительные процессы для хранения и анализа данных со временем.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.