1. Въведение
1.1 Какво представляват SQL Server Разширени събития?
SQL Server Extended Events е лека система за наблюдение на производителността, която позволява на администраторите и разработчиците да събират и анализират подробни данни за активността на сървъра. Тази система е интегрирана в SQL Server Database Engine и предоставя изчерпателна информация както за нормалните операции, така и за сценариите за отстраняване на проблеми.
1.2 Защо да използваме разширени събития за наблюдение?
SQL Server Разширените събития предлагат няколко убедителни предимства за наблюдение и отстраняване на проблеми с базата данни:
- Минимално влияние върху производителността с лека архитектура
- Детайлно управление на събирането на данни и филтрирането на събития
- Персонализируемо събиране на данни, съобразено със специфичните нужди на мониторинга
- Възможност за едновременно заснемане на събития от множество пакети
- Гъвкави възможности за филтриране, за да се фокусирате върху съответните операции
- Поддръжка за мониторинг на производствената система без влошаване на потребителското изживяване
- Цялостно проследяване на показателите за ефективност
- Разширени диагностични възможности за отстраняване на неизправности
- Поддържане на одитна следа за съответствие с изискванията
- Опции за анализ на данни в реално време и исторически данни
1.3 Разширени събития срещу SQL Server Profiler
Докато SQL Server Profiler е бил традиционен инструмент за мониторинг, MS SQL Extended Events предлага по-ефективна алтернатива. Extended Events консумира по-малко системни ресурси и предлага по-добра мащабируемост за производствени среди.
SQL Server Profiler вече е остарял и Microsoft препоръчва мигриране към Extended Events за всички дейности по наблюдение.
2. Разбиране на архитектурата на разширените събития
2.1 Компоненти на двигателя за разширени събития
Механизмът за разширени събития се състои от няколко основни компонента, които работят заедно за събиране, обработка и съхраняване на данни за събития. Разбирането на тези компоненти ви помага да проектирате ефективни решения за мониторинг.
- диспечер: Компонентът диспечер координира потока от събития от източниците на събития към механизма за разширени събития. Когато дадено събитие се задейства, диспечерът получава известието и го насочва към активни сесии, които са се абонирали за този специфичен тип събитие.
- буфер: Буферите временно съхраняват данни за събития в паметта, преди да ги запишат в целевите устройства. Този механизъм за буфериране подобрява производителността, като намалява I/O операциите. Размерът на буфера и настройките за управление могат да бъдат конфигурирани, за да се балансира използването на паметта с изискванията за събиране на данни.
- Сесия: Сесията определя обхвата на наблюдение на събития. Тя указва кои събития да се записват, какви действия да се изпълняват, кои предикати да се прилагат и къде да се съхраняват резултатите. Сесиите могат да бъдат създавани, променяни, стартирани и спирани независимо.
- Целеви екземпляр: Целевите екземпляри представляват местоназначенията за съхранение на заснетите данни за събития. Всяка сесия може да записва в една или няколко цели, като например файлове, буфери за пръстени или броячи. Целите обработват и съхраняват информацията за събитията за по-късен анализ.
2.2 Пакети за събития
SQL Server Разширените събития организират функционалността в пакети. Всеки пакет съдържа свързани събития, действия, типове, предикати и цели. Често срещани пакети включват sqlserver, sqlos и package0.
- Пакетът sqlserver предоставя специфични за базата данни събития, като заявки и транзакции.
- Пакетът sqlos съдържа събития на операционната система.
- Package0 предлага функционалност с общо предназначение, използвана във всички пакети.
2.3 Видове събития и полета
Събитията представляват събития в рамките на SQL Server които искате да наблюдавате. Всеки тип събитие има предварително дефинирани полета, които събират съответната информация. Например, събитието sql_statement_completed включва полета за продължителност, процесорно време, четене и запис.
Събитията могат да бъдат синхронни или асинхронни. Синхронните събития се задействат по време на самата операция, докато асинхронните събития се задействат след завършване. Разбирането на характеристиките на събитията ви помага да изберете подходящи събития за вашите нужди от мониторинг.
2.4 Действия
Действията добавят допълнителна информация към заснетите събития. Когато дадено събитие се задейства, се изпълняват свързани действия, за да се събере допълнителен контекст, като например SQL текст, идентификатор на сесия или информация за стека на повикванията.
Често срещаните действия включват sql_text за заснемане на заявки, database_name за идентифициране на базата данни и client_hostname за проследяване на оригиналния сървър. Действията предоставят важен контекст за отстраняване на проблеми и анализ.
2.5 цели
Целите определят как и къде се съхраняват данните за събитията. SQL Server Разширените събития поддържат множество типове цели, включително:
- event_file за дисково съхранение, осигуряващо постоянно съхранение за подробен анализ
- ring_buffer за съхранение, базирано на паметта, предлагащ бърз достъп до скорошни събития с минимални режийни разходи
- event_counter за лесно броене
- хистограма за групиране
- pair_matching за корелиране на свързани събития
2.6 Предикати (филтри)
Предикатите филтрират събития въз основа на зададени условия, намалявайки обема на заснетите данни. Можете да филтрирате по име на база данни, име на приложение, идентификатор на сесия, прагове на продължителност или стойност на произволно поле за събитие.
Ефективното използване на предикати минимизира въздействието върху производителността, като улавя само релевантни събития. Сложните предикати комбинират множество условия, използвайки логически оператори, за да създадат прецизни критерии за филтриране.
3. Състояния и жизнен цикъл на разширена сесия на събитие
3.1 Състояния на сесията: CREATE, ALTER и DROP
Разширените сесии на събитията преминават през различни състояния:
- Изразът CREATE EVENT SESSION дефинира нова сесия, но не я стартира. Сесията съществува в спряно състояние, докато не бъде изрично активирана.
- Инструкцията ALTER EVENT SESSION променя конфигурацията на сесията или променя състоянието ѝ между спряна и стартирана.
- Изразът DROP EVENT SESSION премахва дефиницията на сесията изцяло от сървъра.
3.2 Съдържание и характеристики на сесията
Всяка сесия съдържа колекция от събития, действия, цели и предикати. Сесиите имат подразбиращи се граници, които определят техния обхват и поведение. Опциите за конфигурация контролират разпределението на паметта, задържането на събития и латентността на изпращане.
Характеристиките на сесиите включват дали те се запазват след рестартиране на сървъра, максималното разпределение на паметта и как се справят с натиска върху паметта. Тези настройки значително влияят на поведението на сесията и консумацията на ресурси.
3.3 Граници на сесиите и пакети
Границите на сесиите определят връзките между събития, цели и пакети. Събития от един пакет могат да задействат действия от друг пакет, осигурявайки гъвкавост в стратегиите за събиране на данни.
Връзките между пакетите ви позволяват да комбинирате събития от множество източници в рамките на една сесия. Тази възможност дава възможност за цялостни сценарии за наблюдение, които обхващат различни SQL Server подсистеми.
4. Създаване на разширени сесии на събития с помощта на SSMS
4.1 Предварителни изисквания и настройка
Преди да създадете SQL Server За сесии с разширен обхват на събития, уверете се, че имате съответните разрешения. Необходимо е разрешение ALTER ANY EVENT SESSION за сесии с обхват на сървъра или разрешение CONTROL за базата данни за сесии с обхват на базата данни.
Проверете това SQL Server Management Studio е инсталиран и свързан с вашия целеви екземпляр. Запознайте се с изискванията за мониторинг и определете кои събития и цели най-добре отговарят на вашите нужди.
4.2 Достъп до разширени събития в Object Explorer
За да получите достъп до интерфейса Extended Events в SSMS, изпълнете следните стъпки:
- Отворете SQL Server Студио за управление и се свържете с вашия SQL Server инстанция.
- В Object Explorer разгънете управление -> Разширени събития.
- Възелът „Разширени събития“ съдържа сесии и Услуги папки за управление на вашите конфигурации за мониторинг.
4.3 Създаване на нова сесия
За да създадете нова сесия:
-
- Щракнете с десния бутон върху сесии папка под Разширени събития.
- Изберете Нова сесия за да отворите диалоговия прозорец за конфигурация. Следващото съдържание ще използва този метод за създаване на нова сесия.
Забележка: Съветник за нова сесия е на разположение и за по-екскурзоводско преживяване.
4.3.1 Обща конфигурация на страницата
От Общи страница, конфигурирайте основните свойства на сесията:
- Въведете име на сесия в Име на сесията поле. Използвайте описателни имена, които указват целта на мониторинга.
- По желание изберете Стартиране на сесията на събитието при стартиране на сървъра за да активирате автоматичното активиране на сесията.
- Шаблонът за сесия по подразбиране е празноМожете да използвате други шаблони, ако използвате предварително дефинирана конфигурация.
4.3.2 Настройка на страницата за събития
- Събития страницата ви позволява да изберете кои събития да наблюдавате:
- Изберете елемента от менюто Събития страница отляво Изберете страница панел.
- В Библиотека със събития, разгледайте наличните събития или използвайте функцията за търсене.
- Филтрирайте събития, като въведете ключови думи като „sql_statement_completed“, за да намерите подходящи събития.
- Изберете желаното събитие, например sql_statement_completed.
- Щракнете върху бутона със стрелка надясно, за да преместите събитието в Избрани събития списък.
4.3.3 Конфигурация за съхранение на данни
- За съхранение на данни страницата определя къде се съхраняват данните за събитията:
- Изберете елемента от менюто За съхранение на данни страница отляво Изберете страница панел.
- В Цели област, изберете тип цел от падащото меню.
(1) event_file Цел
Целта event_file съхранява данни във файлове на диск с разширение .xel:
- Изберете файл_събитие от падащото меню за тип цел.
- Посочете пътя до файла, например C:\temp\YourSession_Target.xel.
- Конфигурирайте опциите за прехвърляне, за да управлявате дисковото пространство, като зададете максимален размер на файла и брой файлове.
- Целта записва събития непрекъснато, докато сесията спре или се достигнат ограниченията за съхранение.
(2) Цел на ring_buffer
Целта ring_buffer съхранява събития в паметта за бърз достъп без дисково I/O:
- Изберете пръстен_буфер като целеви тип.
- Конфигурирайте максималното разпределение на паметта за буфера.
- Имайте предвид, че по-старите събития се изхвърлят, когато буферът се запълни, което прави това подходящо за наблюдение на скорошна активност.
(3) event_counter Цел
Целта event_counter просто брои събитията, без да съхранява подробни данни. Това осигурява минимални разходи, когато ви е необходима само информация за честотата.
(4) Цел на хистограмата
Хистограмата групира събитията по зададена стойност на полето, създавайки статистика за разпределение. Това е полезно за идентифициране на често срещани модели или стойности с висока честота.
(5) pair_matching Цел
Целта pair_matching корелира свързани събития, като например придобиване и освобождаване на заключване. Това позволява анализ на сдвоени операции и техните времеви зависимости.
4.3.4 Разширени настройки
- Подробно страницата предоставя опции за конфигуриране на ниво сесия:
- Изберете елемента от менюто Подробно страница отляво Изберете страница панел.
- Определен Режим на запазване на събития да контролира как се обработват събитията под натиск върху паметта.
- комплект Максимална латентност на изпращането да се балансира обработката в реално време с производителността на системата.
- Определен Максимален размер на паметта и Максимален размер на събитието въз основа на вашите изисквания за мониторинг.
- Изберете Режим на дял на паметта за оптимизиране за еднопроцесорни или многопроцесорни среди.
4.4 Конфигуриране на филтри за събития (предикати)
Предикатите намаляват обема на данните, като филтрират събития въз основа на специфични критерии. За да конфигурирате филтри:
- От Събития страницата, изберете събитието, което искате да филтрирате, например „sql_statement_completed“.
- Кликнете Определен за да отворите диалоговия прозорец за конфигуриране на събитието.
- Изберете елемента от менюто Филтър (предикат) таб.
- В Област падащото меню изберете полето за филтриране, като например продължителност.
- Изберете an Оператор, като например „>“.
- Въведете филтъра Стойност, например 1000000 (1 секунда).
- Добавете още условия, ако е необходимо.
4.5 Избиране на действия и полета за събития
За всяко събитие можете да изберете данните, които да се събират:
- От Събития изберете събитието, за което искате да изберете данните, например „sql_statement_completed“.
- Кликнете Определен за да отворите диалоговия прозорец за конфигуриране на събитието.
- Изберете елемента от менюто Глобални полета (действия) таб.
- Изберете действия за добавяне на допълнителна информация, като например database_name или client_app_name.
- Прегледайте Полета за събития раздел, за да видите кои полета се заснемат автоматично.
- Изчистете всички ненужни полета, за да намалите обема на данните.
4.6 Стартиране и управление на сесии
След като конфигурирате сесията си, можете да я стартирате и да наблюдавате нейната работа:
- Кликнете OK за да създадете сесията.
- В Object Explorer разгънете сесии папка, за да видите новата си сесия.
- Щракнете с десния бутон върху името на сесията и изберете Старт на сесията за да започнете да записвате събития.
- За да видите данни в реално време, щракнете с десния бутон върху сесията и изберете Гледайте данни на живо.
- Спрете сесията, като щракнете с десния бутон на мишката и изберете Спиране на сесията.
5. Създаване на разширени сесии на събития с помощта на T-SQL
5.1 Синтаксис на СЪЗДАВАНЕ НА СЕСИЯ НА СЪБИТИЕ
Създаването на разширени сесии за събития с T-SQL осигурява прецизен контрол и позволява скриптиране за автоматизирано внедряване. Операторът CREATE EVENT SESSION следва специфична синтактична структура.
Основният синтаксис включва името на сесията, клаузите ADD EVENT за всяко събитие, клаузите ADD TARGET за местоназначения за съхранение и опционалните клаузи WITH за конфигуриране на сесията.
5.2 Създаване на основна сесия на събитие
Една основна сесия следи специфични събития и записва резултати в цел. Ето как да се конструират основните компоненти.
5.2.1 Дефиниране на име и опции на сесията
Започнете, като създадете сесията с описателно име:
CREATE EVENT SESSION [SampleSession] ON SERVER
Клаузата ON SERVER създава сесия с обхват на сървъра, която се запазва при промени в базата данни. За база данни Azure SQL използвайте ON DATABASE за сесии с обхват на базата данни.
5.2.2 Добавяне на събития с ADD EVENT
Добавете събития за записване, като използвате клаузата ADD EVENT:
CREATE EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_statement_completed
Това обхваща всички завършени SQL изрази. Можете да добавите множество събития, като включите допълнителни клаузи ADD EVENT.
5.2.3 Конфигуриране на действия за събития
Действията събират допълнителен контекст за всяко събитие. Добавете действията в скоби след името на събитието:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name, sqlserver.username)
)
Този пример улавя SQL текста, името на базата данни и потребителското име за всяко завършено изявление.
5.2.4 Задаване на предикати за събития (клауза WHERE)
Предикатите филтрират събитията, за да намалят обема на данните. Използвайте клаузата WHERE в дефиницията на събитието:
CREATE EVENT SESSION [SampleSession] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text)
WHERE ([package0].[greater_than_uint64]([duration],(5000000)))
)
Това филтрира за оператори с продължителност, по-голяма от 5 секунди (5 000 000 микросекунди).
5.3 Добавяне на цели на събития
Целите определят къде се съхраняват данните за събитията и как се обработват.
5.3.1 Синтаксис на ДОБАВАНЕ НА ЦЕЛ
Добавете цели, използвайки клаузата ADD TARGET, след като всички събития са дефинирани:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Префиксът package0 показва, че целта идва от базовия пакет.
5.3.2 Конфигуриране на целеви параметри
Всеки тип цел приема специфични параметри. За event_file, конфигурирайте filename, max_file_size и max_rollover_files:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel',
max_file_size=(50),
max_rollover_files=(5)
)
Тази конфигурация създава файлове с размер до 50 MB всеки, като чрез преминаване през менюто се поддържат до 5 файла.
5.4 Опции и настройки на сесията
Клаузата WITH конфигурира опции на ниво сесия, които контролират поведението и използването на ресурси.
5.4.1 MAX_MEMORY и EVENT_RETENTION_MODE
Контролирайте разпределението на паметта и обработката на събития под напрежение:
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS
)
Опциите за EVENT_RETENTION_MODE включват ALLOW_SINGLE_EVENT_LOSS за минимално използване на паметта, ALLOW_MULTIPLE_EVENT_LOSS за умерено натоварване и NO_EVENT_LOSS за пълно запазване на данни с цената на потенциално влияние върху производителността.
5.4.2 MAX_DISPATCH_LATENCY
Задайте максималното време, през което събитията могат да останат в буферите, преди да бъдат записани в целевите файлове:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
По-ниските стойности осигуряват повече данни в реално време, но за сметка на увеличени входно/изходни операции.
5.4.3 РЕЖИМ_НА_ПАМЕТ_ДЯЛ
Оптимизирайте разделянето на паметта за вашата хардуерна конфигурация:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Опциите включват NONE за един дял, PER_NODE за NUMA системи и PER_CPU за максимална едновременност на многопроцесорни системи.
5.5 Стартиране, спиране и промяна на сесии
Управлявайте състоянието и конфигурацията на сесията чрез оператори ALTER EVENT SESSION.
5.5.1 ПРОМЯНА НА СЕСИЯ НА СЪБИТИЯ за Старт/Стоп
Започнете сесия след създаването ѝ:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = START;
Спиране на сесия на бягане:
ALTER EVENT SESSION [SampleSession] ON SERVER STATE = STOP;
5.5.2 Промяна на съществуващи сесии
Променете конфигурацията на сесията, докато е спряна. Добавете събития:
ALTER EVENT SESSION [SampleSession] ON SERVER ADD EVENT sqlserver.sql_batch_completed;
Премахване на събития:
ALTER EVENT SESSION [SampleSession] ON SERVER DROP EVENT sqlserver.sql_statement_completed;
5.5.3 Премахване на сесии от събития
Премахнете сесия изцяло с DROP EVENT SESSION:
DROP EVENT SESSION [SampleSession] ON SERVER;
Сесията трябва да бъде спряна преди отпадане.
6. Подробна работа с целеви събития
6.1 event_file Целева конфигурация
Целта event_file осигурява постоянно съхранение на данни за събития с гъвкави опции за конфигуриране.
6.1.1 Път до файла и правила за именуване
Посочете пълния път и име на файла за файловете със събития:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel'
)
Използвайте разширението .xel за разширени файлове с журнали на събития. Уверете се, че SQL Server Сервизният акаунт има права за запис в посочената директория.
6.1.2 Прехвърляне на файлове и управление на размера им
Конфигурирайте автоматично прехвърляне на файлове за управление на дисковото пространство:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\MySession.xel',
max_file_size=(50),
max_rollover_files=(10)
)
Когато файлът достигне 50 MB, SQL Server Разширените събития създават нов файл с увеличен суфикс. След достигане на 10 файла, най-старият файл се презаписва.
6.1.3 Четене на данни от файл със събития
Заявете данни от файла със събития, използвайки функцията sys.fn_xe_file_target_read_file:
SELECT
event_data,
file_name,
file_offset
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Шаблонът за заместващи символи чете всички файлове, свързани със сесията.
6.2 ring_buffer Целева употреба
Целта ring_buffer съхранява събития в паметта за бърз достъп до скорошна активност.
6.2.1 Съхранение на събития, базирано на паметта
Конфигурирайте ring_buffer за съхранение, базирано на памет:
ADD TARGET package0.ring_buffer
Събитията остават достъпни само докато сесията е активна и SQL Server работи. Данните се губят, когато сесията спре или сървърът се рестартира.
6.2.2 Размер и конфигурация на буфера
Контрол на разпределението на паметта за пръстеновия буфер:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Задайте памет в KB. Когато буферът се запълни, по-старите събития се отхвърлят, използвайки FIFO подход.
6.2.3 Запитване на данни от буфера на пръстена
Достъп до данни от буфера на пръстена чрез DMVs:
SELECT
CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer';
target_data съдържа информация за събития във формат XML.
6.3 event_counter Цел
Целта event_counter осигурява просто броене без подробно съхранение на данни:
ADD TARGET package0.event_counter
Тази цел проследява честотата на събитията с минимални режийни разходи, което е полезно за мониторинг на голям обем, където само броят е от значение.
6.4 хистограма Цел
Хистограмата групира събитията по стойности на полетата:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Тази конфигурация създава хистограма, показваща разпределението на събитията в базите данни.
6.5 Цел за съвпадение на двойки
Целта pair_matching корелира свързани събития, като например придобивания на заключвания с освобождавания:
ADD TARGET package0.pair_matching(
SET begin_event=N'sqlserver.lock_acquired',
end_event=N'sqlserver.lock_released',
begin_matching_columns=N'resource_type',
end_matching_columns=N'resource_type'
)
Това позволява анализ на сдвоени операции и тяхната продължителност.
7. Преглед и анализ на данни за разширени събития
7.1 Използване на SSMS за преглед на данни в реално време
SQL Server Management Studio предоставя графичен интерфейс за преглед на данни от разширени събития в реално време:
- В Object Explorer разгънете управление -> Разширени събития -> сесии.
- Щракнете с десния бутон върху активната си сесия.
- Изберете Гледайте данни на живо за да отворите програмата за преглед на данни в реално време.
- Събитията се показват в мрежата, когато се случат.
- Щракнете върху отделни събития, за да видите подробни стойности на полетата в панела с подробности.
- Използвайте филтрите в лентата с инструменти, за да се фокусирате върху конкретни типове събития или стойности на полета.
7.2 Заявки към данни от файлове със събития с T-SQL
T-SQL заявките предоставят гъвкав анализ на заснети данни за събития.
7.2.1 Функция sys.fn_xe_file_target_read_file
Прочетете данните от файла със събития, използвайки тази системна функция:
SELECT
object_name AS EventName,
CAST(event_data AS XML) AS EventData,
file_name,
file_offset,
timestamp_utc
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
);
Функцията връща по един ред на събитие с XML форматирани подробности.
7.2.2 Разбор на XML данни за събития
Извличане на специфични стойности от XML данните за събитието:
SELECT
event_data.value('(event/@name)[1]', 'VARCHAR(50)') AS EventName,
event_data.value('(event/@timestamp)[1]', 'DATETIME2') AS Timestamp,
event_data.value('(event/data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
event_data.value('(event/data[@name="statement"]/value)[1]', 'VARCHAR(MAX)') AS Statement
FROM (
SELECT CAST(event_data AS XML) AS event_data
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
) AS EventData;
XQuery изразите извличат отделни стойности на полета от XML структурата.
7.2.3 Преобразуване на данни за събития в таблици
Създаване на структурирани набори от резултати от данни за събития:
WITH EventData AS (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\MySession*.xel',
NULL, NULL, NULL
)
)
SELECT
EventXML.value('(event/@name)[1]', 'VARCHAR(100)') AS EventName,
EventXML.value('(event/data[@name="cpu_time"]/value)[1]', 'BIGINT') AS CPUTime,
EventXML.value('(event/data[@name="physical_reads"]/value)[1]', 'BIGINT') AS PhysicalReads,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM EventData;
7.3 Запитване на данни от буфера на пръстена
Извличане на данни от целеви ring_buffer:
SELECT
n.value('(@name)[1]', 'VARCHAR(50)') AS EventName,
n.value('(@timestamp)[1]', 'DATETIME2') AS Timestamp,
n.value('(data[@name="duration"]/value)[1]', 'BIGINT') AS Duration,
n.value('(action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE s.name = 'YourSessionName'
AND t.target_name = 'ring_buffer'
) AS Data
CROSS APPLY TargetData.nodes('//event') AS q(n);
7.4 Системни изгледи за разширени събития
SQL Server предоставя няколко DMV и каталожни изгледа за управление и наблюдение на сесии с разширени събития.
7.4.1 sys.server_event_sessions
Преглед на дефинициите на сесиите, съхранени на сървъра:
SELECT
name,
event_retention_mode_desc,
max_dispatch_latency,
max_memory,
max_event_size,
memory_partition_mode_desc
FROM sys.server_event_sessions;
Този изглед на каталога показва подробности за конфигурацията за всички дефинирани сесии.
7.4.2 sys.dm_xe_sessions
Преглед на текущо активните сесии:
SELECT
name,
create_time,
total_regular_buffers,
regular_buffer_size,
total_large_buffers,
large_buffer_size
FROM sys.dm_xe_sessions;
Този DMV предоставя информация по време на изпълнение за активни сесии на разширени събития.
7.4.3 sys.dm_xe_session_targets
Преглед на целите, свързани с активни сесии:
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
t.execution_duration_ms
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
7.4.4 Други полезни DMVs
Допълнителните изгледи предоставят изчерпателна информация за сесията:
- sys.dm_xe_session_events: Изброява събитията в активните сесии
- sys.dm_xe_session_event_actions: Показва действия, конфигурирани за събития на сесия
- sys.dm_xe_objects: Каталогизира всички налични събития, действия и цели
- sys.dm_xe_object_columns: Полета с подробности, налични за всеки тип събитие
- sys.dm_xe_packages: Изброява всички пакети за разширени събития
8. Практически случаи на употреба и примери
8.1 Мониторинг на изпълнението на SQL оператори
Проследяването на изпълнението на SQL изрази предоставя информация за моделите на заявките и характеристиките на производителността.
8.1.1 Проследяване на събития sql_statement_completed
Създайте сесия за наблюдение на завършените SQL изрази:
CREATE EVENT SESSION [QueryMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.client_hostname,
sqlserver.username
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryMonitoring.xel',
max_file_size=(100),
max_rollover_files=(5)
)
WITH (
MAX_MEMORY=4096 KB,
EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY=30 SECONDS,
STARTUP_STATE=OFF
);
ALTER EVENT SESSION [QueryMonitoring] ON SERVER STATE = START;
8.1.2 Филтриране по база данни или приложение
Фокусирайте се върху специфични бази данни или приложения, използващи предикати:
CREATE EVENT SESSION [AppSpecificMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.client_app_name)
WHERE (
[sqlserver].[database_name] = N'YourDatabase'
AND [sqlserver].[client_app_name] LIKE N'YourApplication%'
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\AppMonitoring.xel'
);
8.2 Събиране на информация за безизходица
Анализът на безизходицата изисква събиране на подробна информация за конфликтни транзакции.
8.2.1 Събитие xml_deadlock_report
Създайте сесия за заснемане на пълни графики на безизходици:
CREATE EVENT SESSION [DeadlockMonitoring] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Deadlocks.xel'
)
WITH (STARTUP_STATE=ON);
ALTER EVENT SESSION [DeadlockMonitoring] ON SERVER STATE = START;
8.2.2 Анализиране на графики на безизходици
Извличане и анализ на информация за безизходица:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS DeadlockTime,
EventXML.query('.') AS DeadlockGraph
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\Deadlocks*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'xml_deadlock_report';
Графиката на безизходицата съдържа подробности за процеси, ресурси и избор на жертва.
8.3 Проблеми с производителността на заявките за проследяване
Идентифицирайте слабо представящите се заявки, използвайки показатели за продължителност и потребление на ресурси.
8.3.1 Откриване на дълго изпълняващи се заявки
Записване на заявки, надвишаващи определени прагове за продължителност:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.sql_statement_completed(
ACTION(
sqlserver.sql_text,
sqlserver.database_name,
sqlserver.plan_handle
)
WHERE ([duration] > 5000000) -- 5 seconds in microseconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\LongQueries.xel'
);
8.3.2 Анализ на плана за изпълнение
Заснемане на планове за заявки за анализ на производителността:
CREATE EVENT SESSION [QueryPlans] ON SERVER
ADD EVENT sqlserver.query_post_execution_showplan(
ACTION(
sqlserver.sql_text,
sqlserver.database_name
)
WHERE ([duration] > 10000000) -- 10 seconds
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\QueryPlans.xel',
max_file_size=(200)
);
8.4 Мониторинг на събития, свързани с влизане в системата и сигурността
Проследявайте дейностите по удостоверяване и оторизация за одит на сигурността.
8.4.1 Проследяване на успешно и неуспешно влизане
Следете както успешните, така и неуспешните опити за влизане:
CREATE EVENT SESSION [LoginMonitoring] ON SERVER
ADD EVENT sqlserver.login(
ACTION(
sqlserver.client_hostname,
sqlserver.client_app_name
)
),
ADD EVENT sqlserver.login_failed(
ACTION(
sqlserver.client_hostname
)
)
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Logins.xel'
)
WITH (STARTUP_STATE=ON);
8.4.2 Промени в разрешенията
Проследяване на промени в разрешенията за сигурност:
CREATE EVENT SESSION [SecurityChanges] ON SERVER
ADD EVENT sqlserver.server_principal_management_event,
ADD EVENT sqlserver.database_principal_management_event,
ADD EVENT sqlserver.database_permission_change_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SecurityAudit.xel'
);
8.5 Мониторинг на ниво база данни
Следете специфични за базата данни операции и промени в състоянието.
8.5.1 Събития за архивиране и възстановяване
Проследяване на операциите по архивиране и възстановяване:
CREATE EVENT SESSION [BackupMonitoring] ON SERVER
ADD EVENT sqlserver.backup_restore_progress_trace,
ADD EVENT sqlserver.databases_backup_restore_event
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\BackupRestore.xel'
);
8.5.2 Промени в състоянието на базата данни
Следене на преходите на състоянието на базата данни:
CREATE EVENT SESSION [DatabaseStateChanges] ON SERVER ADD EVENT sqlserver.database_started, ADD EVENT sqlserver.database_stopped ADD TARGET package0.ring_buffer;
8.6 Откриване на корупция в базата данни и проблеми с целостта
SQL Server Разширените събития предоставят възможности за ранно предупреждение за откриване на потенциална повреда в базата данни, което позволява проактивна намеса, преди проблемите да ескалират.
8.6.1 Ключови събития за разкриване на корупция
Няколко събития сигнализират за потенциална повреда или проблеми с входно/изходните операции.
8.6.1.1 error_reported Събитие за критични грешки
Събитието error_reported обхваща всички SQL Server грешки, включително номера на грешки, свързани с корупция:
ADD EVENT sqlserver.error_reported(
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825, 832, 855, 856)
)
)
Грешка 823 показва грешки при входно/изходни операции, 824 сигнализира за грешки в логическата съгласуваност, а 825 съобщава за успешни опити за четене и повторен опит, които може да показват хардуерни проблеми.
8.6.1.2 Събитие database_suspect_data_page
Това събитие се задейства, когато SQL Server среща подозрителна страница:
ADD EVENT sqlserver.database_suspect_data_page
Подозрителните страници показват потенциална повреда и се записват в таблицата msdb.dbo.suspect_pages.
8.6.1.3 errorlog_written събитие
Записване на записи, записани в SQL Server дневник на грешките:
ADD EVENT sqlserver.errorlog_written(
WHERE ([severity] >= (16))
)
8.6.2 Създаване на сесия за наблюдение на корупцията
Създайте всеобхватна сесия за откриване и наблюдение на корупцията.
8.6.2.1 Филтриране за номера на грешки, свързани с повреда (823, 824, 825)
Създайте целенасочена сесия, фокусирана върху индикаторите за корупция:
CREATE EVENT SESSION [CorruptionDetection] ON SERVER
ADD EVENT sqlserver.error_reported(
ACTION(
sqlserver.database_name,
sqlserver.sql_text
)
WHERE (
[error_number] IN (823, 824, 825, 832, 855, 856)
OR [severity] >= (20)
)
),
ADD EVENT sqlserver.database_suspect_data_page(
ACTION(
sqlserver.database_name
)
)
8.6.2.2 Задаване на подходящи нива на сериозност
Включете грешки с висока степен на сериозност, които могат да показват повреда:
WHERE (
[severity] >= (20)
OR [error_number] IN (823, 824, 825)
)
Степен на тежест 20 и по-висока показва проблеми на системно ниво, които често са свързани с корупция.
8.6.2.3 Конфигуриране на целта на файла със събития за предупреждения
Съхраняване на събития за корупция за анализ и предупреждение:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\CorruptionMonitoring.xel',
max_file_size=(50),
max_rollover_files=(10)
)
WITH (
STARTUP_STATE=ON,
MAX_DISPATCH_LATENCY=5 SECONDS
);
ALTER EVENT SESSION [CorruptionDetection] ON SERVER STATE = START;
8.6.3 Анализиране на данни за корупционни събития
Извличане и интерпретиране на събития, свързани с корупция, от събраните данни.
8.6.3.1 Идентифициране на подозрителни страници
Заявка за събития database_suspect_data_page:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS EventTime,
EventXML.value('(event/data[@name="database_id"]/value)[1]', 'INT') AS DatabaseID,
EventXML.value('(event/data[@name="file_id"]/value)[1]', 'INT') AS FileID,
EventXML.value('(event/data[@name="page_id"]/value)[1]', 'BIGINT') AS PageID,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'database_suspect_data_page';
8.6.3.2 Извличане на подробности за грешката и контекст
Анализирайте събития, докладвани за грешки, за модели на корупция:
SELECT
EventXML.value('(event/@timestamp)[1]', 'DATETIME2') AS ErrorTime,
EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') AS ErrorNumber,
EventXML.value('(event/data[@name="severity"]/value)[1]', 'INT') AS Severity,
EventXML.value('(event/data[@name="message"]/value)[1]', 'VARCHAR(MAX)') AS ErrorMessage,
EventXML.value('(event/action[@name="database_name"]/value)[1]', 'VARCHAR(128)') AS DatabaseName,
EventXML.value('(event/action[@name="sql_text"]/value)[1]', 'VARCHAR(MAX)') AS SQLText
FROM (
SELECT CAST(event_data AS XML) AS EventXML
FROM sys.fn_xe_file_target_read_file(
'C:\XEvents\CorruptionMonitoring*.xel',
NULL, NULL, NULL
)
) AS EventData
WHERE EventXML.value('(event/@name)[1]', 'VARCHAR(50)') = 'error_reported'
AND EventXML.value('(event/data[@name="error_number"]/value)[1]', 'INT') IN (823, 824, 825);
8.6.4 Интеграция с DBCC CHECKDB
Използвайте данни от разширени събития, за да се ориентирате DBCC CHECKDB екзекуция.
8.6.4.1 Задействане на DBCC CHECKDB въз основа на събития
Когато бъдат открити събития на повреда, изпълнете DBCC CHECKDB за пълна проверка:
-- After detecting corruption events, run DBCC CHECKDB
DBCC CHECKDB ('YourDatabaseName') WITH NO_INFOMSGS, ALL_ERRORMSGS;
Разширените събития осигуряват ранно предупреждение, докато DBCC CHECKDB извършва щателна проверка.
8.6.4.2 Автоматизирани работни процеси за реагиране при корупция
Внедрете автоматизирани отговори чрез наблюдение на файла със събития:
- Определен SQL Server Задача на агента периодично да отправя заявки към файла със събития за наблюдение на повреда.
- Когато бъдат открити събития на повреда, изпълнете DBCC CHECKDB върху засегнатата база данни.
- Изпращайте имейл известия до администратори на бази данни с подробности за събитията и резултати от DBCC CHECKDB.
- Записвайте резултатите в централизирана таблица за наблюдение за анализ на тенденциите.
8.6.4.3 Балансиране на проактивния мониторинг с производителността
Разширените събития предлагат откриване на корупция с ниски разходи в сравнение с честото изпълнение на DBCC CHECKDB:
- Изпълнявайте разширени събития непрекъснато за откриване на корупция в реално време
- Изпълнявайте DBCC CHECKDB само когато се появят индикатори за повреда
- Планирайте редовни DBCC CHECKDB по време на прозорците за поддръжка
- Използвайте разширени събития, за да идентифицирате кои бази данни изискват незабавно внимание
Този подход осигурява проактивно наблюдение без значителното потребление на ресурси от постоянни проверки за целостта.
8.6.4.4 Поправка на повредена база данни
Ако в базата данни бъдат открити повреди, можете да използвате DBCC CHECKDB за отстраняване на незначителни повреди. Ако не успее, можете да опитате инструмент от трета страна. Инструмент за възстановяване на SQL база данни, което обикновено предлага по-висок процент на възстановяване при силно повредени бази данни.
9. Разширени събития с обхват на сървъра спрямо такива с обхват на базата данни
9.1 Сесии на събития с обхват на сървъра
Сесиите с обхват на сървъра наблюдават активността в целия SQL Server екземпляр. Тези сесии се създават с клаузата ON SERVER и се съхраняват в главната база данни.
CREATE EVENT SESSION [ServerWideMonitoring] ON SERVER
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\ServerWide.xel'
);
Сесиите с обхват на сървъра улавят събития от всички бази данни и са подходящи за наблюдение на ниво инстанция.
9.2 Сесии на събития с обхват от база данни (база данни Azure SQL)
Сесиите с обхват на базата данни са ограничени до една база данни и се използват предимно в база данни Azure SQL, където достъпът на ниво сървър е ограничен:
CREATE EVENT SESSION [DatabaseSpecificMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed
ADD TARGET package0.event_file(
SET filename=N'DatabaseMonitoring.xel'
);
В базата данни на Azure SQL файловете със събития се съхраняват в хранилището за BLOB-ове на Azure, а не в локални файлови системи.
9.3 Разлики и случаи на употреба
Сесиите с обхват на сървъра осигуряват цялостно наблюдение във всички бази данни, но изискват повишени разрешения. Сесиите с обхват на базата данни предлагат изолация и са подходящи при наблюдение на конкретни приложения или клиенти.
Използвайте сесии с обхват на сървъра за централизирано наблюдение, отстраняване на проблеми с производителността в бази данни и одит на сигурността. Използвайте сесии с обхват на базата данни в база данни Azure SQL, среди с множество клиенти или когато делегирате отговорности за наблюдение на екипи на приложения.
10. Разширени събития в базата данни на Azure SQL
10.1 Съображения, специфични за Azure
Базата данни Azure SQL внедрява разширени събития с някои разлики от локалната версия SQL ServerСесиите са по подразбиране ограничени до базата данни, а съхранението на файлове със събития използва Azure Blob Storage, а не локални файлови системи.
Удостоверяването към Azure Blob Storage изисква SAS токен, конфигуриран в целевия файл със събития. Низовете за свързване препращат към акаунта за съхранение и контейнера, където се съхраняват файловете със събития.
10.2 Налични цели в Azure
Базата данни Azure SQL поддържа тези цели за разширени събития:
- event_file: Записва в хранилището за BLOB файлове в Azure
- ring_buffer: Съхранение, базирано на памет, със същото поведение като локалното
- event_counter: Брои събитията
Целта event_file изисква конфигурация с идентификационни данни за съхранение на BLOB данни в Azure:
ADD TARGET package0.event_file(
SET filename=N'https://yourstorageaccount.blob.core.windows.net/container/EventFile.xel'
)
10.3 Създаване на сесии с обхват на базата данни
Създайте сесия в базата данни на Azure SQL:
CREATE EVENT SESSION [AzureMonitoring] ON DATABASE
ADD EVENT sqlserver.sql_statement_completed(
ACTION(sqlserver.sql_text, sqlserver.database_name)
)
ADD TARGET package0.ring_buffer
WITH (MAX_MEMORY=4096 KB);
ALTER EVENT SESSION [AzureMonitoring] ON DATABASE STATE = START;
Сесиите с обхват на базата данни в Azure се държат подобно на локалните сесии с обхват на сървъра, но с обхват, ограничен до текущата база данни.
11. Най-добри практики и оптимизация на производителността
11.1 Минимизиране на въздействието върху производителността
Разширените събития са проектирани за минимални режийни разходи, но неправилната конфигурация може да повлияе на производителността. Следвайте тези указания:
- Използвайте специфични предикати за филтриране на събития, вместо да улавяте всичко
- Избягвайте събирането на ненужни действия, които добавят допълнителни разходи за обработка
- Изберете подходящи цели въз основа на нуждите от съхранение на данни
- Задайте разумни размери на буферите и латентности при изпращане
- Следене на потреблението на ресурси за сесията с помощта на DMVs
11.2 Избор на правилните събития и филтри
Изберете събития, които пряко отговарят на вашите цели за мониторинг. Избягвайте събития с висока честота, освен ако не е необходимо, и винаги прилагайте предикати, за да намалите обема на данните.
Например, вместо да записвате всички събития sql_statement_completed, филтрирайте за конкретни бази данни или прагове за продължителност:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Насоки за избор на цели
Изберете цели въз основа на вашите изисквания за анализ:
- Използвайте event_file за подробен исторически анализ и дългосрочно съхранение
- Използвайте ring_buffer за наблюдение в реално време с минимално въздействие върху входно/изходните операции
- Използвайте event_counter, когато има значение само честотата
- Използвайте хистограма за анализ на разпределението
- Използвайте pair_matching за анализ на корелирани събития
11.4 Препоръки за конфигуриране на сесия
Конфигурирайте сесии с подходящи ограничения на ресурсите:
- Задайте MAX_MEMORY въз основа на очаквания обем на събитията и ресурсите на сървъра
- Използвайте ALLOW_SINGLE_EVENT_LOSS за минимални режийни разходи в повечето сценарии.
- Задайте MAX_DISPATCH_LATENCY, за да балансирате нуждите в реално време с производителността
- Използвайте разделяне на паметта PER_CPU на многопроцесорни системи
- Избягвайте STARTUP_STATE=ON, освен ако не е необходимо непрекъснато наблюдение
11.5 Управление на размера и съхранението на файлове със събития
Конфигурирайте прехвърляне на файлове, за да предотвратите неограничено използване на диска:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\Session.xel',
max_file_size=(100),
max_rollover_files=(10)
)
Тази конфигурация поддържа приблизително 1 GB данни за събития (10 файла × 100 MB). Настройте според вашите изисквания за съхранение и наличното място за съхранение.
12. Отстраняване на неизправности при разширени събития
12.1 Често срещани проблеми и решения
Често срещани проблеми с разширените събития включват сесии, които не записват данни, влошаване на производителността, проблеми с целевите файлове и неочаквано поведение на сесията.
12.2 Сесията не записва данни
Ако дадена сесия не отчита очакваните събития:
- Проверете дали сесията е стартирана, като използвате sys.dm_xe_sessions.
- Проверете предикатите, за да се уверите, че не филтрират всички събития.
- Потвърдете, че събитията се задействат, като временно премахнете филтрите.
- Прегледайте разрешенията, за да се уверите, че имате достъп за преглед на данните от сесията.
- Проверете дали конфигурацията на целта е правилна и може да се записва.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Влошаване на производителността
Ако разширените събития причиняват проблеми с производителността:
- Добавете предикати, за да намалите обема на събитията.
- Премахнете ненужните действия, които събират допълнителни данни.
- Увеличете MAX_DISPATCH_LATENCY, за да намалите честотата на запис.
- Променете EVENT_RETENTION_MODE на ALLOW_SINGLE_EVENT_LOSS.
- Помислете за използването на ring_buffer вместо event_file за събития с висока честота.
12.4 Проблеми с целевите файлове
Проблемите с целевите файлове често са свързани с разрешения или дисково пространство:
- Проверете SQL Server Сервизният акаунт има права за запис в целевата директория.
- Уверете се, че има достатъчно дисково пространство.
- Проверете дали посоченият път съществува и е достъпен.
- Прегледайте конфигурацията за прехвърляне на файлове, ако файловете не се прехвърлят според очакванията.
12.5 Отстраняване на грешки със системни изгледи
Използвайте DMVs за диагностициране на проблеми с разширени събития:
-- Check session status
SELECT s.name, s.create_time, s.total_regular_buffers, s.total_large_buffers
FROM sys.dm_xe_sessions AS s;
-- View session targets and their status
SELECT
s.name AS SessionName,
t.target_name,
t.execution_count,
CAST(t.target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address;
-- Check for dropped events
SELECT s.name, s.dropped_event_count, s.dropped_buffer_count
FROM sys.dm_xe_sessions AS s;
13. Теми за напреднали
13.1 Създаване на персонализирани пакети за събития
Напредналите потребители могат да създават персонализирани пакети от събития, за да разширят SQL Server Разширена функционалност за събития. Това изисква разработка на C++ и интеграция с SQL Server рамка за разширяемост.
Персонализираните пакети позволяват наблюдение на специфични за приложението събития или интегриране на системи за наблюдение на трети страни с инфраструктурата на разширени събития.
13.2 Шаблони за сесии на събития
SSMS предоставя вградени шаблони за често срещани сценарии за наблюдение. Достъп до шаблони при създаване на нови сесии чрез съветника:
- В диалоговия прозорец „Нова сесия“ щракнете върху Шаблон меню.
- Изберете от наличните шаблони, като например „Проследяване на подробности за заявки“ или „Състояние на системата“.
- Променете шаблона, за да отговаря на вашите специфични изисквания.
13.3 Интегриране с решения за мониторинг
Разширените данни за събития могат да бъдат използвани за решения за корпоративно наблюдение:
- Експортиране на данни за събития към централизирани системи за регистриране
- Анализирайте файлове със събития и зареждайте данни в бази данни за мониторинг
- Създавайте персонализирани табла за управление с помощта на BI инструменти
- Задействане на предупреждения въз основа на специфични модели на събития
- Съпоставете SQL Server събития с показатели за приложения и инфраструктура
13.4 Автоматизация и планиране
Автоматизирайте управлението на разширени събития с помощта на SQL Server Агент:
- Създаване на задачи за стартиране/спиране на сесии по време на определени времеви прозорци
- Планиране на анализ и отчитане на файлове със събития
- Приложете политики за запазване на данни чрез архивиране или изтриване на стари файлове със събития
- Автоматизирайте реакцията при открити условия, като например проблеми с производителността или събития, свързани със сигурността
14. Миграция от SQL Server Profiler
14.1 SQL Server Съпоставяне на събития от профилера към разширени събития
Microsoft предоставя съпоставяне между SQL Server Profiler събития и разширени събития. Често срещаните съпоставяния включват:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:BatchStarting -> sql_batch_starting
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starting
- Графика на безизходицата -> xml_deadlock_report
- Вход за одит -> вход
- Изход от одита -> изход
14.2 Преобразуване на дефиниции на трасирания
Конвертиране на съществуващи SQL Server Профилърът проследява сесии с разширени събития, като идентифицира еквивалентни събития и конфигурира подходящи предикати. SSMS предоставя помощ за често срещани реализации.
Прегледайте филтрите за проследяване и ги преобразувайте в предикати за разширени събития. Действията в разширените събития заместват колоните за проследяване от SQL Server Профилатор.
14.3 Сравнение на производителността
Разширените събития осигуряват значително по-добра производителност от SQL Server Profiler. Сравнителни проучвания показват, че разширените събития консумират по-малко процесорни цикли и имат по-малко влияние върху пропускателната способност на транзакциите.
Разширените събития използват асинхронна обработка и оптимизирано управление на паметта, докато SQL Server Profiler разчита на синхронно заснемане на събития, което блокира, докато обработката на проследяването не завърши.
15. заключение
15.1 Обобщение на ключовите понятия
SQL Server Разширените събития предоставят мощна и лека рамка за наблюдение и отстраняване на проблеми SQL ServerАрхитектурата се състои от събития, действия, предикати, цели и сесии, които работят заедно, за да уловят съответната активност на сървъра.
Сесиите могат да бъдат създадени с помощта на SSMS или T-SQL, което предлага гъвкавост както за ad-hoc отстраняване на проблеми, така и за автоматизирано наблюдение. Множество типове цели поддържат различни подходи за анализ, от наблюдение в реално време с ring_buffer до исторически анализ с event_file.
Разширените събития осигуряват превъзходна производителност в сравнение с SQL Server Profiler, като същевременно предоставя по-цялостни възможности за мониторинг. Системата позволява на администраторите и разработчиците на бази данни да диагностицират проблеми, да оптимизират производителността, да подобрят сигурността и да поддържат съответствие.
15.2 Следващи стъпки и допълнителни ресурси
За да продължите да развивате своето SQL Server Експертиза на XEvents:
- Внедрете разширени събития в тестови среди, за да придобиете практически опит
- Прегледайте документацията на Microsoft за пълни каталози на събития и подробна справка за синтаксиса
- Регистрация SQL Server форуми на общността, за да се поучим от опита на другите
- Разгледайте разширени сценарии, като персонализирани пакети и интеграция с платформи за мониторинг
- Разработете библиотека от шаблони за сесии за често срещани сценарии за мониторинг
16 Раздел с често задавани въпроси
Въпрос: Какви са SQL Server Разширени събития?
A: SQL Server Extended Events е лека система за наблюдение на производителността, интегрирана в SQL Server Механизъм за бази данни, който събира подробна информация за сървърните операции с минимални режийни разходи.
В: По какво се различават разширените събития от SQL Server Профайлър?
A: Разширените събития осигуряват по-добра производителност, по-ниски разходи и по-гъвкава конфигурация от SQL Server Профилатор. SQL Server Profiler е остарял и Microsoft препоръчва използването на Extended Events за всички задачи за наблюдение.
В: Могат ли разширените събития да повлияят SQL Server производителност?
A: Когато са правилно конфигурирани с подходящи предикати и ограничения на ресурсите, разширените събития имат минимално влияние върху производителността. Лошата конфигурация без филтриране може да повлияе на производителността.
В: Какви разрешения са необходими за създаване на сесии с разширени събития?
A: Необходимо ви е разрешение ALTER ANY EVENT SESSION за сесии с обхват на сървъра или разрешение CONTROL за базата данни за сесии с обхват на базата данни.
В: Как да преглеждам данни за разширени събития?
О: Използвайте SQL Server Програмата за преглед на данни в реално време на Management Studio, заявки към файлове със събития със sys.fn_xe_file_target_read_file или заявки към данни от буфера за пръстени чрез DMV.
В: Могат ли разширените събития да открият повреда в базата данни?
A: Да, разширените събития могат да улавят грешки, свързани с корупция (823, 824, 825), и събития на подозрителни страници, осигурявайки ранно предупреждение за потенциални проблеми с корупция.
В: Каква е разликата между събития, действия и предикати?
A: Събитията са събития, които искате да наблюдавате. Действията добавят допълнителна информация към записаните събития. Предикатите филтрират събитията въз основа на условия, за да намалят обема на данните.
В: Как да наблюдавам заявки от конкретни приложения или бази данни?
A: Използвайте предикати в конфигурацията на събитието си, за да филтрирате по database_name, client_app_name или други подходящи полета.
В: Какви цели трябва да използвам за разширени събития?
A: Използвайте event_file за постоянно съхранение и исторически анализ, ring_buffer за наблюдение в реално време с ниски разходи, event_counter за просто проследяване на честотата и histogram за анализ на разпределението.
В: Налични ли са разширени събития в базата данни на Azure SQL?
A: Да, базата данни на Azure SQL поддържа разширени събития с обхват на базата данни, като файловете със събития се съхраняват в хранилището за BLOB-и в Azure.
В: Как да отстраня неизправности при сесия с разширени събития, която не записва данни?
A: Проверете дали сесията е стартирана, проверете дали предикатите не филтрират всички събития, потвърдете конфигурацията на целта и прегледайте разрешенията, използвайки системните DMVs.
В: Мога ли да автоматизирам управлението на разширени събития?
О: Да, използвайте SQL Server Агентски задачи за стартиране/спиране на сесии, анализ на файлове със събития, внедряване на политики за съхранение и реагиране на открити условия.
Източници
- Бърз старт: Разширени събития в SQL Server – Microsoft Learn
- Разширен преглед на събитията – Microsoft Learn
- SQL Server Разширени сесии за събития – Microsoft Learn
- Цели за разширени събития в SQL Server – Microsoft Learn
- SQL Server Разширен механизъм за събития – Microsoft Learn
- SQL Server Профилър: Пълно ръководство
- DBCC CHECKDB: Пълно ръководство
- DataNumen SQL Recovery
За автора
Юан Шенг е старши администратор на бази данни (DBA) с над 10 години опит в SQL Server среди и управление на корпоративни бази данни. Той е разрешил успешно стотици сценарии за възстановяване на бази данни във финансови услуги, здравеопазване и производствени организации.
Юан е специализиран в SQL Server възстановяване на база данни, решения с висока наличности оптимизация на производителността. Неговият богат практически опит включва управление на многотерабайтови бази данни, внедряване Винаги включени групи за наличности разработване на автоматизирани стратегии за архивиране и възстановяване за критично важни бизнес системи.
Чрез техническата си експертиза и практичен подход, Юан се фокусира върху създаването на изчерпателни ръководства, които помагат на администраторите на бази данни и ИТ специалистите да решават сложни задачи. SQL Server предизвикателствата ефикасно. Той е в крак с най-новото SQL Server издания и развиващите се технологии за бази данни на Microsoft, като редовно тества сценарии за възстановяване, за да гарантира, че препоръките му отразяват най-добрите практики в реалния свят.
Имате въпроси относно SQL Server възстановяване или имате нужда от допълнителни насоки за отстраняване на проблеми с базата данни? Юан приветства обратна връзка и предложения за подобряване на тези технически ресурси.

















