1. Введення
1.1 Що таке SQL Server Розширені події?
SQL Server Розширені події — це легка система моніторингу продуктивності, яка дозволяє адміністраторам і розробникам збирати та аналізувати детальні дані про активність сервера. Ця система інтегрована в SQL Server Механізм баз даних та надає вичерпне уявлення як про звичайні операції, так і про сценарії усунення несправностей.
1.2 Навіщо використовувати розширені події для моніторингу?
SQL Server Розширені події пропонують кілька переконливих переваг для моніторингу бази даних та усунення несправностей:
- Мінімальний вплив на продуктивність завдяки легкій архітектурі
- Детальний контроль над збором даних та фільтрацією подій
- Налаштовуваний збір даних, адаптований до конкретних потреб моніторингу
- Можливість одночасного захоплення подій з кількох пакетів
- Гнучкі можливості фільтрації для зосередження на відповідних операціях
- Підтримка моніторингу виробничої системи без погіршення взаємодії з користувачем
- Комплексне відстеження показників ефективності
- Розширена діагностикаostможливості інтелектуальної обробки даних для усунення несправностей
- Ведення журналу аудиту для дотримання вимог
- Варіанти аналізу даних у реальному часі та історичних даних
1.3 Розширені події проти SQL Server Профіль
У той час як SQL Server Профіль Розширені події MS SQL були традиційним інструментом моніторингу, але вони пропонують ефективнішу альтернативу. Розширені події споживають менше системних ресурсів і пропонують кращу масштабованість для виробничих середовищ.
SQL Server Profiler зараз застарів, і Microsoft рекомендує перейти на розширені події для всіх дій моніторингу.
2. Розуміння архітектури розширених подій
2.1 Компоненти механізму розширених подій
Механізм розширених подій складається з кількох основних компонентів, які працюють разом для збору, обробки та зберігання даних про події. Розуміння цих компонентів допомагає вам розробляти ефективні рішення для моніторингу.
- Диспетчер: Компонент диспетчера координує потік подій від джерел подій до механізму розширених подій. Коли подія спрацьовує, диспетчер отримує сповіщення та направляє його до активних сеансів, які підписалися на цей конкретний тип події.
- буфер: Буфери темпуrarзберігати дані подій у пам'яті перед записом tarотримує. Цей механізм буферизації покращує продуктивність, зменшуючи кількість операцій вводу-виводу. Розмір буфера та параметри керування можна налаштувати для балансування використання пам'яті з вимогами до збору даних.
- Сесія: Сеанс визначає область моніторингу подій. Він вказує, які події фіксувати, які дії виконувати, які предикати застосовувати та де зберігати результати. Сеанси можна створювати, змінювати,tarТед, і зупинився самостійно.
- Tarотримати екземпляр: TarЕкземпляри get представляють місця зберігання записаних даних подій. Кожен сеанс може записувати в один або кілька tarотримує, такі як файли, кільцеві буфери або лічильники. Tarотримує обробку та зберігає інформацію про подію для подальшого аналізу.
2.2 Пакети заходів
SQL Server Розширені події організовують функціональність у пакети. Кожен пакет містить пов'язані події, дії, типи, предикати та tarотримує. До поширених пакетів належать sqlserver, sqlos та package0.
- Пакет sqlserver забезпечує події, специфічні для бази даних, такі як запити та транзакції.
- Пакет sqlos містить події операційної системи.
- Package0 пропонує універсальну функціональність, яка використовується в усіх пакетах.
2.3 Типи подій та поля
Події представляють собою події в межах SQL Server які ви хочете відстежувати. Кожен тип події має попередньо визначені поля, які фіксують відповідну інформацію. Наприклад, подія sql_statement_completed містить поля для тривалості, часу процесора, читання та запису.
Події можуть бути синхронними або асинхронними. Синхронні події спрацьовують під час самої операції, тоді як асинхронні події спрацьовують після її завершення. Розуміння характеристик подій допомагає вам вибрати відповідні події для ваших потреб моніторингу.
2.4 Дії
Дії додають доповненняtarінформацію до захоплених подій. Коли подія спрацьовує, виконуються пов'язані дії для збору додаткового контексту, такого як текст SQL, ідентифікатор сеансу або інформація про стек викликів.
Звичайні дії включають sql_text для захоплення запитів, database_name для ідентифікації бази даних та client_hostім'я для відстеження вихідного сервера. Дії забезпечують важливий контекст для усунення несправностей та аналізу.
2.5 Tarотримує
Tarвизначає, як і де зберігаються дані подій. SQL Server Розширені події підтримують кілька tarотримати типи, включаючи:
- event_file для дискового сховища, що забезпечує постійне сховище для детального аналізу
- ring_buffer для збереження даних на основі пам'яті, що забезпечує швидкий доступ до останніх подій з мінімальними накладними витратами
- event_counter для простого підрахунку
- гістограма для групування
- парне зіставлення для кореляції пов'язаних подій
2.6 Предикати (фільтри)
Предикати фільтрують події на основі заданих умов, зменшуючи обсяг зібраних даних. Ви можете фільтрувати за назвою бази даних, назвою програми, ідентифікатором сеансу, пороговими значеннями тривалості або будь-яким значенням поля події.
Ефективне використання предикатів мінімізує вплив на продуктивність, фіксуючи лише відповідні події. Складні предикати поєднують кілька умов за допомогою логічних операторів для створення точних критеріїв фільтрації.
3. Розширені стани та життєвий цикл сеансу події
3.1 Стан сеансу: СТВОРЕННЯ, ЗМІНА та ВИДАЛЕННЯ
Розширені сесії подій проходять через різні стани:
- Оператор CREATE EVENT SESSION визначає новий сеанс, але неtarСеанс існує в зупиненому стані, доки його явно не активують.
- Оператор ALTER EVENT SESSION змінює конфігурацію сеансу або змінює його стан між зупиненим та s.tarТед.
- Оператор DROP EVENT SESSION повністю видаляє визначення сеансу з сервера.
3.2 Зміст та характеристики сесії
Кожен сеанс містить набір подій, дій, tarотримує та предикати. Сесії мають неявні межі, які визначають їхню область дії та поведінку. Параметри конфігурації контролюють розподіл пам'яті, збереження подій та затримку відправлення.
Характеристики сеансу включають, чи зберігаються вони між серверними резолюціями.tarts, максимальний розподіл пам'яті та те, як вони обробляють навантаження на пам'ять. Ці налаштування суттєво впливають на поведінку сеансу та споживання ресурсів.
3.3 Межі сеансів та пакети
Межі сесії визначають зв'язки між подіями, targets та пакети. Події з одного пакета можуть запускати дії з іншого пакета, забезпечуючи гнучкість у стратегіях збору даних.
Зв'язки пакетів дозволяють поєднувати події з кількох джерел в межах одного сеансу. Ця можливість забезпечує комплексні сценарії моніторингу, що охоплюють різні SQL Server підсистеми.
4. Створення розширених сеансів подій за допомогою SSMS
4.1 Необхідні умови та налаштування
Перед створенням SQL Server Розширені сеанси подій. Переконайтеся, що у вас є відповідні дозволи. Вам потрібен дозвіл ALTER ANY EVENT SESSION для сеансів, що діють на рівні сервера, або дозвіл CONTROL для бази даних для сеансів, що діють на рівні бази даних.
Перевірте це SQL Server Management Studio встановлено та підключено до вашого tarотримати екземпляр. Ознайомтеся з вимогами до моніторингу та визначте, які події та tarнайкраще відповідає вашим потребам.
4.2 Доступ до розширених подій у Провіднику об'єктів
Щоб отримати доступ до інтерфейсу розширених подій у SSMS, виконайте такі дії:
- відкритий SQL Server Студія управління та підключіться до свого SQL Server екземпляр
- У Провіднику об'єктів розгорніть управління -> Розширені події.
- Вузол розширених подій містить Сеанси та Пакети папки для керування конфігураціями моніторингу.
4.3 Створення нового сеансу
Щоб створити новий сеанс:
-
- Клацніть правою кнопкою миші на Сеанси папка під Розширені події.
- Виберіть Нова сесія щоб відкрити діалогове вікно конфігурації. У наступному контенті цей метод буде використано для створення нового сеансу.
Примітка: Майстер нових сеансів також доступний для більш керованого досвіду.
4.3.1 Загальна конфігурація сторінки
на Загальне сторінку, налаштуйте основні властивості сеансу:
- Введіть назву сеансу в Назва сеансу поле. Використовуйте описові назви, що вказують на мету моніторингу.
- За бажанням виберіть Starсеанс події на сервері starтрубка щоб увімкнути автоматичну активацію сеансу.
- Шаблон сеансу за замовчуванням – ПустийВи можете використовувати інші шаблони, якщо використовуєте попередньо визначену конфігурацію.
4.3.2 Налаштування сторінки подій
Команда Події сторінка дозволяє вибрати, які події відстежувати:
- Оберіть Події сторінка зліва Виберіть сторінку .
- Перейдіть на вкладку Бібліотека подійrary, перегляньте доступні події або скористайтеся функцією пошуку.
- Фільтруйте події, вводячи ключові слова, такі як «sql_statement_completed», щоб знайти відповідні події.
- Виберіть потрібну подію, наприклад, sql_statement_completed.
- Натисніть кнопку зі стрілкою праворуч, щоб перемістити подію до Вибрані події список
4.3.3 Конфігурація сховища даних
Команда зберігання даних сторінка визначає, де зберігаються дані подій:
- Оберіть зберігання даних сторінка зліва Виберіть сторінку .
- Перейдіть на вкладку Tarотримує область, виберіть tarотримати тип зі спадного списку.
(1) файл_події Tarотримати
Файл_події tarотримати збереження даних на дискові файли з розширенням .xel:
- Виберіть файл_події від tarотримати випадаючий список типів.
- Вкажіть шлях до файлу, наприклад C:\temp\ВашСеанс_Target.xel.
- Налаштуйте параметри переміщення для керування дисковим простором, встановивши максимальний розмір файлу та кількість файлів.
- Команда tarФункція get записує події безперервно, доки сеанс не завершиться або не буде досягнуто лімітів сховища.
(2) кільцевий_буфер Tarотримати
Кільцевий буфер target зберігає події в пам'яті для швидкого доступу без використання дискового вводу/виводу:
- Виберіть кільцевий_буфер в якості tarотримати тип.
- Налаштуйте максимальний обсяг пам'яті для буфера.
- Зрозумійте, що старіші події відкидаються, коли буфер заповнюється, що робить це зручним для моніторингу нещодавньої активності.
(3) лічильник_подій Tarотримати
Лічильник подій tarФункція get просто підраховує кількість подій, не зберігаючи детальних даних. Це забезпечує мінімальні накладні витрати, коли вам потрібна лише інформація про частоту.
(4) гістограма Tarотримати
Гістограма tarФункція get групує події за заданим значенням поля, створюючи статистику розподілу. Це корисно для виявлення поширених закономірностей або значень з високою частотою.
(5) парне зіставлення Tarотримати
Зіставлення пар tarотримати кореляції пов'язаних подій, таких як отримання та звільнення блокування. Це дозволяє аналізувати парні операції та їх часові зв'язки.
НІКОЛИ розширені налаштування
Команда Розширені налаштування сторінка містить параметри конфігурації на рівні сеансу:
- Оберіть Розширені налаштування сторінка зліва Виберіть сторінку .
- Конфігурувати Режим збереження подій контролювати, як події обробляються під тиском пам'яті.
- Установка Максимальна затримка відправлення збалансувати обробку в режимі реального часу з продуктивністю системи.
- Конфігурувати Максимальний розмір пам'яті та Максимальний розмір події на основі ваших вимог до моніторингу.
- Виберіть Режим розділення пам'яті для оптимізації для середовищ з одним або кількома процесорами.
4.4 Налаштування фільтрів подій (предикатів)
Предикати зменшують обсяг даних, фільтруючи події на основі певних критеріїв. Щоб налаштувати фільтри:
- на Події сторінку виберіть подію, яку потрібно відфільтрувати, наприклад, «sql_statement_completed».
- Натисніть Конфігурувати щоб відкрити діалогове вікно налаштування події.
- Оберіть Фільтр (предикат) .
- Перейдіть на вкладку Поле У розкривному списку виберіть поле для фільтрації, наприклад, тривалість.
- Виберіть Оператор, наприклад, «>».
- Введіть фільтр значення, наприклад, 1000000 (1 секунда).
- Додайте більше умов, якщо потрібно.
4.5 Вибір дій та полів подій
Для кожної події ви можете вибрати дані, які потрібно зібрати:
- на Події виберіть подію, для якої потрібно вибрати дані, наприклад, «sql_statement_completed».
- Натисніть Конфігурувати щоб відкрити діалогове вікно налаштування події.
- Оберіть Глобальні поля (дії) .
- Виберіть дії для додавання доповненняtarінформація про y, така як database_name або client_app_name.
- Перегляньте Поля подій розділ, щоб побачити, які поля автоматично фіксуються.
- Очистіть усі непотрібні поля, щоб зменшити обсяг даних.
4.6 StarВедення та управління сесіями
Після налаштування сеансу ви можетеtarта контролюйте його роботу:
- Натисніть OK щоб створити сеанс.
- У Провіднику об'єктів розгорніть Сеанси папку, щоб побачити ваш новий сеанс.
- Клацніть правою кнопкою миші назву сеансу та виберіть StarСесія щоб почати фіксувати події.
- Щоб переглянути дані в реальному часі, клацніть сеанс правою кнопкою миші та виберіть Дивитися дані в реальному часі.
- Зупиніть сеанс, клацнувши правою кнопкою миші та вибравши Зупинити сеанс.
5. Створення розширених сеансів подій за допомогою T-SQL
5.1 Синтаксис СТВОРЕННЯ СЕСІЇ ПОДІЇ
Створення розширених сеансів подій за допомогою T-SQL забезпечує точний контроль і дозволяє створювати сценарії для автоматичного розгортання. Оператор CREATE EVENT SESSION дотримується певної синтаксичної структури.
Базовий синтаксис включає назву сеансу, речення ADD EVENT для кожної події, ADD TARРечення GET для місць призначення сховища та додаткові речення WITH для конфігурації сеансу.
5.2 Створення базового сеансу події
Базовий сеанс відстежує певні події та записує результати в tarотримати. Ось як побудувати основні компоненти.
5.2.1 Визначення назви та параметрів сеансу
Start, створивши сеанс з описовою назвою:
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 Додавання події Tarотримує
Tarвизначає, де зберігаються дані подій та як вони обробляються.
5.3.1 ДОД TARСинтаксис GET
додавати tarотримує за допомогою ADD TARРечення GET після визначення всіх подій:
ADD TARGET package0.event_file(
SET filename=N'C:\XEvents\SampleSession.xel'
)
Префікс package0 вказує на target походить з базового пакету.
5.3.2 Налаштування Tarотримати параметри
Кожен tarТип get приймає певні параметри. Для 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 МБ кожен, зберігаючи до 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 для повного збереження даних на момент обробки.ost потенційного впливу на продуктивність.
5.4.2 MAX_DISPATCH_LATENCY
Встановіть максимальний час, протягом якого події можуть залишатися в буферах перед записом. tarотримує:
WITH (
MAX_DISPATCH_LATENCY=30 SECONDS
)
Нижчі значення забезпечують більше даних у режимі реального часу на моментost збільшення кількості операцій вводу/виводу.
5.4.3 РЕЖИМ_РОЗДІЛУ_ПАМ'ЯТІ
Оптимізуйте розподіл пам'яті відповідно до конфігурації вашого обладнання:
WITH (
MEMORY_PARTITION_MODE=PER_CPU
)
Варіанти включають NONE для одного розділу, PER_NODE для систем NUMA та PER_CPU для максимальної паралельності на системах з кількома процесорами.
5.5 StarЗапуск, зупинка та зміна сеансів
Керуйте станом та конфігурацією сеансу за допомогою операторів ALTER EVENT SESSION.
5.5.1 ЗМІНА СЕСІЇ ПОДІЇ для Starт/Стоп
Starсеанс після створення:
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. Робота з подією Tarпотрапляє в деталі
6.1 файл_події Tarотримати конфігурацію
Файл_події target забезпечує постійне сховище для даних подій з гнучкими параметрами налаштування.
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 МБ, SQL Server Розширені події створюють новий файл зі збільшеним суфіксом. Після досягнення 10 файлів найстаріший файл перезаписується.
6.1.3 Зчитування даних файлу подій
Запит даних файлу подій за допомогою sys.fn_xe_file_tarФункція get_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 кільцевий буфер Tarотримати Використання
Кільцевий буфер tarзберігає події в пам'яті для швидкого доступу до нещодавньої активності.
6.2.1 Зберігання подій на основі пам'яті
Налаштуйте ring_buffer для сховища на основі пам'яті:
ADD TARGET package0.ring_buffer
Події залишаються доступними лише під час активного сеансу та SQL Server працює. Дані lost коли сеанс зупиняється або сервер перезавантажуєтьсяtarц.
6.2.2 Розмір та конфігурація буфера
Контроль розподілу пам'яті для кільцевого буфера:
ADD TARGET package0.ring_buffer(
SET max_memory=(4096)
)
Вкажіть пам'ять у КБ. Коли буфер заповнюється, старіші події відкидаються за методом FIFO.
6.2.3 Запит даних кільцевого буфера
Доступ до даних кільцевого буфера через DMV:
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 лічильник_подій Tarотримати
Лічильник подій target забезпечує простий підрахунок без детального зберігання даних:
ADD TARGET package0.event_counter
Цей tarвідстежує частоту подій з мінімальними накладними витратами, що корисно для моніторингу великих обсягів, де важливі лише підрахунки.
6.4 гістограма Tarотримати
Гістограма tarотримати групи подій за значеннями полів:
ADD TARGET package0.histogram(
SET filtering_event_name=N'sqlserver.sql_statement_completed',
source_type=0,
source=N'database_name'
)
Ця конфігурація створює гістограму, що показує розподіл подій по базах даних.
6.5 парне зіставлення Tarотримати
Зіставлення пар tarотримати співвідношення пов'язаних подій, таких як отримання блокувань з релізами:
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 надає графічний інтерфейс для перегляду даних розширених подій у режимі реального часу:
- У Провіднику об'єктів розгорніть управління -> Розширені події -> Сеанси.
- Клацніть правою кнопкою миші на активному сеансі.
- Виберіть Дивитися дані в реальному часі щоб відкрити засіб перегляду даних у реальному часі.
- Події відображаються в сітці в міру їх виникнення.
- Клацніть окремі події, щоб переглянути детальні значення полів в області відомостей.
- Використовуйте фільтри панелі інструментів, щоб зосередитися на певних типах подій або значеннях полів.
7.2 Запит даних файлу подій за допомогою T-SQL
T-SQL-запити забезпечують гнучкий аналіз отриманих даних подій.
7.2.1 sys.fn_xe_file_tarФункція get_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 tarотримує:
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_tarотримує
вид tarпов'язується з активними сеансами:
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 Інші корисні DMV (Департаменти транспортних засобів)
Додаткові подання надають вичерпну інформацію про сеанс:
- sys.dm_xe_session_events: Виводить список подій в активних сеансах
- sys.dm_xe_session_event_actions: Показує дії, налаштовані для подій сеансу.
- sys.dm_xe_objects: Каталогізує всі доступні події, дії та tarотримує
- 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)
Створити tarзаохочена сесія, присвячена показникам корупції:
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 Налаштування файлу подій Tarотримувати сповіщення
Зберігайте події пошкодження для аналізу та оповіщення:
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 Вилучення деталей помилки та контексту
Проаналізуйте події error_reported на наявність шаблонів пошкодження:
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Сеанси за замовчуванням обмежені базою даних, а для зберігання файлів подій використовується сховище BLOB-об'єктів Azure, а не локальні файлові системи.
Для автентифікації в сховищі BLOB-об'єктів Azure потрібен токен SAS, налаштований у файлі подій. tarотримати. Рядки підключення посилаються на обліковий запис сховища та контейнер, де зберігаються файли подій.
10.2 Доступні Tarпотрапляє в Azure
База даних Azure SQL підтримує ці розширені події tarотримує:
- event_file: Записує до сховища BLOB-об'єктів Azure
- ring_buffer: сховище на основі пам'яті з такою ж поведінкою, як і локальне сховище
- event_counter: Рахує кількість подій
Файл_події tarотримати, потрібна конфігурація з обліковими даними сховища 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 Мінімізація впливу на продуктивність
Розширені події розроблені для мінімальних накладних витрат, але неправильне налаштування може вплинути на продуктивність. Дотримуйтесь цих інструкцій:
- Використовуйте певні предикати для фільтрації подій, а не для фіксації всіх
- Уникайте збору непотрібних дій, які додають накладних витрат на обробку
- Виберіть відповідне tarотримує на основі потреб у зберіганні даних
- Встановіть розумні розміри буферів та затримки відправки
- Моніторинг споживання ресурсів сеансу за допомогою DMV
11.2 Вибір правильних подій та фільтрів
Виберіть події, які безпосередньо відповідають вашим цілям моніторингу. Уникайте високочастотних подій, якщо в цьому немає потреби, та завжди застосовуйте предикати для зменшення обсягу даних.
Наприклад, замість того, щоб фіксувати всі події sql_statement_completed, фільтруйте за певними базами даних або порогами тривалості:
WHERE (
[sqlserver].[database_name] = N'ProductionDB'
AND [duration] > 1000000
)
11.3 Tarотримати рекомендації щодо вибору
Оберіть tarотримує на основі ваших вимог до аналізу:
- Використовуйте event_file для детального аналізу історії та довгострокового зберігання
- Використовуйте ring_buffer для моніторингу в режимі реального часу з мінімальним впливом на ввод-вивод
- Використовуйте event_counter, коли важлива лише частота
- Використовуйте гістограму для аналізу розподілу
- Використовуйте pair_matching для аналізу корельованих подій
11.4 Рекомендації щодо конфігурації сеансу
Налаштуйте сеанси з відповідними обмеженнями ресурсів:
- Встановіть MAX_MEMORY на основі очікуваного обсягу подій та ресурсів сервера
- Використовуйте ALLOW_SINGLE_EVENT_LOSS для мінімальних накладних витрат у мost сценарії
- Встановіть 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 ГБ даних подій (10 файлів × 100 МБ). Налаштуйте розмір відповідно до ваших вимог до зберігання та доступного сховища.
12. Виправлення неполадок розширених подій
12.1 Поширені проблеми та рішення
Серед поширених проблем із розширеними подіями – сеанси, які не записують дані, зниження продуктивності, проблеми з файлами tarвиникають проблеми та неочікувана поведінка сеансу.
12.2 Сеанс не фіксує дані
Якщо сеанс не фіксує очікувані події:
- Перевірте, чи сеанс завершеноtarвиконано за допомогою sys.dm_xe_sessions.
- Перевірте предикати, щоб переконатися, що вони не фільтрують усі події.
- Підтвердити, що події спрацьовують за темпомrarбезперервне видалення фільтрів.
- Перегляньте дозволи, щоб переконатися, що у вас є доступ до перегляду даних сеансу.
- Перевірте це tarконфігурація get правильна та доступна для запису.
SELECT name, create_time FROM sys.dm_xe_sessions WHERE name = 'YourSessionName';
12.3 Погіршення продуктивності
Якщо розширені події спричиняють проблеми з продуктивністю:
- Додайте предикати, щоб зменшити кількість подій.
- Видаліть непотрібні дії, що призводять до збору добавокtary дані.
- Збільште MAX_DISPATCH_LATENCY, щоб зменшити частоту запису.
- Змініть EVENT_RETENTION_MODE на ALLOW_SINGLE_SOFTWARE_LOSS.
- Розгляньте можливість використання ring_buffer замість event_file для подій високої частоти.
12.4 Файл Tarотримати проблеми
Файл tarпроблеми часто пов'язані з дозволами або дисковим простором:
- Перевірте SQL Server обліковий запис служби має права на запис до tarотримати каталог.
- Переконайтеся, що на диску достатньо місця.
- Перевірте, чи вказаний шлях існує та чи є він доступним.
- Перегляньте конфігурацію перенесення файлів, якщо файли не переносяться належним чином.
12.5 Налагодження за допомогою системних представлень
Використовуйте DMV для діагностики проблем із розширеними подіями:
-- 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 Інтеграція з рішеннями для моніторингу
Дані розширених подій можуть бути корисними для рішень корпоративного моніторингу:
- Експорт даних подій до централізованих систем реєстрації
- Розбирати файли подій та завантажувати дані в бази даних моніторингу
- Створення власних інформаційних панелей за допомогою інструментів бізнес-аналітики
- Активувати сповіщення на основі певних шаблонів подій
- Співвіднесіть SQL Server події з метриками застосунків та інфраструктури
13.4 Автоматизація та планування
Автоматизуйте керування розширеними подіями за допомогою SQL Server Агент:
- Створити завдання дляtarзупиняти/припиняти сеанси протягом певних часових проміжків
- Планування аналізу та звітності файлів подій
- Впроваджуйте політики збереження даних, архівуючи або видаляючи старі файли подій
- Автоматизуйте реагування на виявлені умови, такі як проблеми з продуктивністю або події безпеки
14. Міграція з SQL Server Профіль
14.1 SQL Server Зіставлення подій профайлера з розширеними подіями
Microsoft надає зіставлення між SQL Server Профіль події та розширені події. Загальні зіставлення включають:
- SQL:BatchCompleted -> sql_batch_completed
- SQL:Пакетні операціїtarting -> sql_batch_starдзвін
- SQL:StmtCompleted -> sql_statement_completed
- SQL:StmtStarting -> sql_statement_starдзвін
- Графік блокувань -> xml_deadlock_report
- Вхід для аудиту -> вхід
- Вихід з аудиту -> вихід
14.2 Перетворення визначень трас
Конвертувати існуючі SQL Server Профайлер відстежує сеанси розширених подій, виявляючи еквівалентні події та налаштовуючи відповідні предикати. SSMS надає допомогу для поширених перетворень.
Перегляньте фільтри трасування та перетворіть їх на предикати розширених подій. Дії в розширених подіях замінюють стовпці трасування з SQL Server Профайлер.
14.3 Порівняння продуктивності
Розширені події забезпечують значно кращу продуктивність, ніж SQL Server Profiler. Дослідження бенчмарків показують, що розширені події споживають менше циклів процесора та мають менший вплив на пропускну здатність транзакцій.
Розширені події використовують асинхронну обробку та оптимізоване управління пам'яттю, тоді як SQL Server Профайлер покладається на синхронне захоплення подій, яке блокується до завершення обробки трасування.
15. Висновок
15.1 Короткий виклад ключових понять
SQL Server Розширені події забезпечують потужну та легку платформу для моніторингу та усунення несправностей. SQL ServerАрхітектура складається з подій, дій, предикатів, tarотримання даних та сесії, які працюють разом для фіксації відповідної активності сервера.
Сеанси можна створювати за допомогою SSMS або T-SQL, що забезпечує гнучкість як для спеціального усунення несправностей, так і для автоматизованого моніторингу. tarТипи get підтримують різні підходи до аналізу, від моніторингу в реальному часі за допомогою ring_buffer до історичного аналізу за допомогою event_file.
Розширені події забезпечують кращу продуктивність порівняно з SQL Server Profiler, забезпечуючи при цьому більш комплексні можливості моніторингу. Система дозволяє адміністраторам баз даних та розробникам діагностувати проблеми, оптимізувати продуктивність, підвищувати безпеку та підтримувати відповідність вимогам.
15.2 Наступні кроки та додаткові ресурси
Щоб продовжувати розвивати свою SQL Server Експертиза XEvents:
- Впроваджуйте розширені події в тестових середовищах, щоб отримати практичний досвід
- Перегляньте документацію Microsoft, щоб отримати повні каталоги подій та детальний довідник із синтаксису
- Приєднатися SQL Server форуми спільноти, щоб навчатися на досвіді інших
- Ознайомтеся з розширеними сценаріями, такими як користувацькі пакети та інтеграція з платформами моніторингу
- Розробити бібліотекуrary шаблонів сеансів для поширених сценаріїв моніторингу
16 Розділ поширених запитань
Q: Що є SQL Server Розширені події?
A: SQL Server Розширені події — це легка система моніторингу продуктивності, інтегрована в SQL Server Механізм баз даних, який збирає детальну інформацію про роботу сервера з мінімальними накладними витратами.
З: Чим відрізняються розширені події від SQL Server Профайлер?
A: Розширені події забезпечують кращу продуктивність, менші накладні витрати та гнучкішу конфігурацію, ніж SQL Server Профайлер. SQL Server Profiler застарів, і Microsoft рекомендує використовувати розширені події для всіх завдань моніторингу.
З: Чи можуть розширені події вплинути SQL Server продуктивність?
A: За умови правильного налаштування з відповідними предикатами та обмеженнями ресурсів, розширені події мають мінімальний вплив на продуктивність. Неправильне налаштування без фільтрації може вплинути на продуктивність.
З: Які дозволи потрібні для створення сеансів розширених подій?
A: Вам потрібен дозвіл ALTER ANY EVENT SESSION для сеансів, обмежених сервером, або дозвіл CONTROL для бази даних для сеансів, обмежених базою даних.
З: Як переглянути дані розширених подій?
A: Використовуйте SQL Server Переглядач даних у реальному часі в Management Studio, запит файлів подій за допомогою sys.fn_xe_file_target_read_file або запитувати дані кільцевого буфера через DMV.
З: Чи можуть розширені події виявляти пошкодження бази даних?
В: Так, розширені події можуть фіксувати помилки, пов’язані з пошкодженням (823, 824, 825), та події підозрілих сторінок, забезпечуючи раннє попередження про потенційні проблеми з пошкодженням.
З: Яка різниця між подіями, діями та предикатами?
A: Події – це випадки, які ви хочете відстежувати. Дії додають додаткову інформацію.tarінформацію про y до записаних подій. Предикати фільтрують події на основі умов для зменшення обсягу даних.
З: Як мені відстежувати запити з певних програм або баз даних?
A: Використовуйте предикати в конфігурації подій для фільтрації за назвою_бази_даних, назвою_клієнтської_програми або іншими відповідними полями.
З: Що tarЧи варто використовувати для розширених подій?
A: Використовуйте event_file для постійного зберігання та аналізу історичних даних, ring_buffer для моніторингу в режимі реального часу з низькими накладними витратами, event_counter для простого відстеження частоти та histogram для аналізу розподілу.
З: Чи доступні розширені події в базі даних Azure SQL?
В: Так, база даних Azure SQL підтримує розширені події на рівні бази даних із файлами подій, що зберігаються в сховищі BLOB-об'єктів Azure.
З: Як вирішити проблеми із сеансом розширених подій, який не збирає дані?
A: Перевірте, чи сеанс завершеноtarТед, перевір, чи предикати не фільтрують усі події, підтвердь tarотримати конфігурацію та переглянути дозволи за допомогою системних DMV.
З: Чи можна автоматизувати керування розширеними подіями?
A: Так, використовуйте SQL Server Робота агента для starзупиняти/закривати сеанси, аналізувати файли подій, впроваджувати політики зберігання та реагувати на виявлені умови.
Посилання
- Швидкий Start: Розширені події в SQL Server – Microsoft Learn
- Розширений огляд подій – Microsoft Learn
- SQL Server Розширені сесії подій – Microsoft Learn
- Tarотримує для розширених подій у 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 відновлення чи потрібні додаткові інструкції з усунення несправностей бази даних? Юань вітає відгуки та пропозиції для покращення цих технічних ресурсів.

















