Добро пожаловать на наш блог о стратегиях управления предприятием в SQL Server. В этой статье мы рассмотрим сессию system_health и как ее можно настроить для улучшения ее полезности в предприятий среде.
Сессия system_health – это сессия расширенных событий по умолчанию, которая запускается по умолчанию на каждом экземпляре SQL Server с SQL Server 2008. Однако, по умолчанию поведение сессии system_health в SQL Server 2008 и 2008 R2 заключается в записи событий в кольцевой буфер, который является целью памяти. Это может быть менее полезно в предприятий среде, где важно сохранять данные сессии событий в файле.
Чтобы сделать сессию system_health более подходящей для предприятий, вы можете добавить к ней файловую цель, аналогично тому, что было сделано в версиях SQL Server 2012 и новее. Добавление файловой цели позволит записывать данные сессии в файл, что делает их более надежными и легкими в управлении.
Вот пример того, как можно настроить сессию system_health с файловой целью:
-- Расширенная сессия событий по умолчанию
IF EXISTS (SELECT *
FROM sys.server_event_sessions
WHERE name = 'system_health')
DROP EVENT SESSION system_health ON SERVER;
GO
-- Предикаты в этой сессии были тщательно разработаны для минимизации влияния сбора событий
-- Изменение определения предиката может повлиять на производительность системы
--
CREATE EVENT SESSION system_health ON SERVER
ADD EVENT sqlserver.error_reported (
ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text, sqlserver.tsql_stack)
WHERE severity >= 20
OR (error = 17803
OR error = 701
OR error = 802
OR error = 8645
OR error = 8651
OR error = 8657
OR error = 8902)),
ADD EVENT sqlos.scheduler_monitor_non_yielding_ring_buffer_recorded,
ADD EVENT sqlserver.xml_deadlock_report,
ADD EVENT sqlos.wait_info (
ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text)
WHERE (duration > 15000
AND ((wait_type > 31
AND (wait_type > 47
AND wait_type < 54)
OR wait_type < 38
OR (wait_type > 63
AND wait_type < 70)
OR (wait_type > 96
AND wait_type < 100)
OR (wait_type = 107)
OR (wait_type = 113)
OR (wait_type > 174
AND wait_type < 179)
OR (wait_type = 186)
OR (wait_type = 207)
OR (wait_type = 269)
OR (wait_type = 283)
OR (wait_type = 284))))
OR (duration > 30000
AND wait_type < 22))),
ADD EVENT sqlos.wait_info_external (
ACTION (package0.callstack, sqlserver.session_id, sqlserver.sql_text)
WHERE (duration > 5000
AND ((wait_type > 365
AND wait_type < 372)
OR (wait_type > 372
AND wait_type < 377)
OR (wait_type > 377
AND wait_type < 383)
OR (wait_type > 420
AND wait_type < 424)
OR (wait_type > 426
AND wait_type < 432)
OR (wait_type > 432
AND wait_type < 435)))
OR (duration > 45000
AND ((wait_type > 382
AND wait_type < 386)
OR (wait_type > 423
AND wait_type < 427)
OR (wait_type > 434
AND wait_type < 437)
OR (wait_type > 442
AND wait_type < 451)
OR (wait_type > 451
AND wait_type < 473)
OR (wait_type > 484
AND wait_type < 499)
OR wait_type = 365
OR wait_type = 372
OR wait_type = 377
OR wait_type = 387
OR wait_type = 432
OR wait_type = 502))))
ADD TARGET package0.asynchronous_file_target (SET filename = N'C:\Database\XE\system_health.xel'),
ADD TARGET package0.ring_buffer (SET max_memory = 4096)
WITH (STARTUP_STATE = ON);
GO
Теперь, когда данные сессии записываются в файл, вы также можете запланировать скрейпер для копирования файлов в центральную папку журнала в сети. Однако, обратите внимание, что прямое размещение файлов на UNC-шаре (через сопоставленный диск или UNC-именование) не работает в SQL Server 2008 или 2008 R2.
Настроив сессию system_health с файловой целью, вы делаете шаг в сторону более подходящего для предприятий решения. Просто не забудьте снова запустить сессию после внесения любых изменений.
Мы надеемся, что вы найдете эту статью полезной для понимания стратегий управления предприятием в SQL Server. Следите за нашим блогом для получения более информативных статей о темах SQL Server.