Цели расширенных событий SQL Server
Целями расширенных событий SQL Server являются объекты-получатели событий. Цели могут записывать события в файл, обрабатывать их данные статистически и запускать задачу, связанную с событием. Цели могут обрабатывать данные в синхронном или асинхронном режиме.
Структура расширенных событий гарантирует, что цели получают события единственный раз за сеанс.
Расширенные события предоставляют следующие цели, которые можно использовать в сеансах расширенных событий.
Сегментация событий
Используется для подсчета количества указанных событий на основании указанного действия или столбца события.
Попарное разбиение событий
Многие типы событий происходят попарно, например получение и снятие блокировки. Эта цель позволяет определить, что указанное парное событие не произошло в правильной последовательности.
Трассировка событий Windows (ETW)
Предназначена для корреляции событий SQL Server с данными событий Windows или данными событий приложений.
Файл событий
Используется для записи выходных данных сеанса событий из полных буферов памяти на диск.
Счетчик синхронных событий
Подсчитывает все события, происходящие в ходе сеанса расширенных событий. Эта цель используется для получения сведений о характеристиках рабочей нагрузки без затрат на сбор всех событий.
Кольцевой буфер
Используется для хранения данных о событиях в памяти по принципу очереди (FIFO) или по принципу FIFO для каждого события.
Цели можно разделить на файловые цели и цели в памяти.
Цель «Файл событий» и цель «Трассировка событий Windows» считаются файловыми целями.
Цели «Сегментация событий», «Попарное разбиение событий», «Счетчик синхронных событий» и «Кольцевой буфер» считаются целями в памяти. Данные для них хранятся в буфере сеанса (столбец target_data динамического административного представления sys.dm_xe_session_targets).
Учтите, что при остановке сеанса, использующего цель в памяти, все данные, хранящиеся в буфере сеанса, будут потеряны. Если необходим доступ к данным событий и после остановки сеанса, следует либо настроить использование в сеансе файловой цели (рекомендуется), либо сохранить данные перед остановкой сеанса.
Следующие рекомендации помогут определить, какую цель использовать.
Цель |
Рекомендуемый вариант использования |
---|---|
Цель «Файл событий» или цель «Трассировка событий Windows» |
Используйте файловую цель, если выполняется одно или несколько из следующих условий.
|
Цель «Кольцевой буфер» |
Используйте цель «Кольцевой буфер», если выполняются следующие условия.
|
Цель «Сегментация событий», цель «Попарное разбиение событий» или цель «Счетчик синхронных событий» |
Используйте одну из этих целей в памяти, если выполняются следующие условия.
|
Цель «Сегментация событий»
Цель «Сегментация событий» группирует экземпляры определенного типа событий на основе данных событий. «Сегмент» — это группирование событий, подсчитанных на основе указанного столбца события или действия. Цель «Группирование событий» можно использовать для разрешения проблем с производительностью. Найдя наиболее часто происходящие события, можно найти «горячие точки», показывающие потенциальную причину возникновения проблемы производительности.
В следующей таблице описываются параметры, которые могут быть использованы для настройки цели «Группирование событий».
Способ |
Допустимые значения |
Описание |
---|---|---|
slots |
Любое целочисленное значение. Это значение является необязательным. |
Пользовательское значение, указывающее максимальное число сохраняемых сегментов. При достижении этого значения новые события, не принадлежащие к существующему сегменту, пропускаются. |
filtering_event_name |
Любое событие, участвующее в сеансе расширенных событий. Это значение является необязательным. |
Пользовательское значение, которое используется для идентификации класса событий. Группируются только экземпляры указанного события. Все остальные события не учитываются. Если указывается это значение, то следует использовать формат имя_пакета.имя_события, например 'sqlserver.checkpoint_end'. Определить имя пакета можно с помощью следующего запроса:
Если не указывается значение параметра filtering_event_name, то для параметра source_type следует установить значение 1 (значение по умолчанию). |
source_type |
Тип объекта, на котором основан сегмент. Это значение необязательно. Когда оно не задано, по умолчанию равно 1. |
Может иметь одно из следующих значений:
|
source |
Имя столбца событий или действия. |
Имя столбца событий или действия, которое используется в качестве источника данных. При указании столбца событий для источника необходимо указать столбец из события, которое указывается в качестве значения для параметра filtering_event_name. Определить потенциальные столбцы можно с помощью следующего запроса:
При указании столбца события для источника нет необходимости включать имя пакета в значение источника. При указании имени действия для источника необходимо использовать одно из действий, которые были настроены для коллекции в сеансе события, для которого используется данная цель. Чтобы найти потенциальные значения для имени действия, можно выполнить запрос к столбцу action_name представления sys.dm_xe_sesssion_event_actions. Если имя действия используется в качестве источника данных, необходимо указать значение источника в следующем формате: имя_пакета.имя_действия. |
В следующем примере на высоком уровне показывается, как цель «Группирование событий» собирает данные. В данном примере цель «Группирование событий» будет использоваться для подсчета количества возникших случаев ожидания для каждого типа ожидания. Чтобы сделать это, пользователь должен указать следующие параметры при определении цели «Группирование событий»:
filtering_event_name = 'wait_info'
source = 'wait_type'
source_type = 0 (поскольку wait_type — это столбец события)
В сценарии примера для источника wait_type записаны следующие данные.
Фильтрация имени события |
Значение столбца источника |
---|---|
wait_info |
file_io |
wait_info |
file_io |
wait_info |
network |
wait_info |
network |
wait_info |
sleep |
Значения типа случая ожидания будут разделены на три сегмента со следующими значениями и числом слотов.
Значение |
Число слотов |
---|---|
file_io |
2 |
network |
2 |
sleep |
1 |
Дополнительные сведения о синтаксисе цели «Группирование событий» см. в разделе Как отслеживать активность системы с помощью расширенных событий.
Цель группирования сохраняет только события для заданного источника. Иногда данные событий могут оказаться слишком большими, чтобы их можно было сохранить полностью, в этих случаях данные усекаются. Если данные событий усекаются, число байт записывается и отображается в виде XML-выхода.
Цель «Группирование событий» сериализует данные для вызывающей программы или процедуры в формате XML.
Примечание |
---|
Вывод группирования не соответствует ни одной схеме. |
В следующем примере показан формат вывода цели группирования.
<Slots truncated = "0" buckets=[count]>
<Slot count=[count] trunc=[truncated bytes]>
<value>
</value>
</Slot>
</Slots>
Цель «Попарное разбиение событий»
Цель «Попарное разбиение событий» устанавливает соответствие между двумя событиями с помощью одного или нескольких столбцов данных, присутствующих в каждом событии. Многие события возникают попарно, например получение и снятие блокировки. После выделения пары событий оба эти события отбрасываются. Исключение парных наборов позволяет легко обнаруживать наличие не снятых блокировок.
С помощью фильтрации на уровне события цель «Попарное разбиение событий» может использоваться только для сбора событий, не соответствующих заранее установленным условиям.
При использовании цели «Попарное разбиение событий» разрешается выбирать два сопоставляемых события и последовательность столбцов, предназначенных для установки соответствия. Все столбцы такой последовательности должны иметь одинаковый тип.
В следующей таблице описаны доступные параметры настройки попарного разбиения событий.
Параметр |
Допустимые значения |
Описание |
---|---|---|
begin_event |
Имя любого события, присутствующего в текущем сеансе. |
Имя события, определяющее начальное событие в парной последовательности. |
end_event |
Имя любого события, присутствующего в текущем сеансе. |
Имя события, определяющее завершающее событие в парной последовательности. |
begin_matching_columns |
Упорядоченный список имен столбцов с разделителями-запятыми. |
Столбцы, по которым выполняется установка соответствия. |
end_matching_columns |
Упорядоченный список имен столбцов с разделителями-запятыми. |
Столбцы, по которым выполняется установка соответствия. |
begin_matching_actions |
Упорядоченный список действий с разделителями-запятыми. |
Действия, по которым выполняется установка соответствия. |
end_matching_actions |
Упорядоченный список действий с разделителями-запятыми. |
Действия, по которым выполняется установка соответствия. |
respond_to_memory_pressure |
Одно из следующих значений.
|
Реакция цели на события памяти. Если значение равно 1, а сервер испытывает недостаток памяти, сохраненные данные о непарных событиях удаляются. |
Все данные, связанные с событием, собираются и хранятся для будущей установки соответствия. Кроме того, также собираются данные, добавленные действиями. Собранные данные хранятся в памяти, а следовательно, их объем ограничен. Это ограничение зависит от объема памяти и активности системы. В качестве параметра указывается не максимальный объем памяти, а объем доступных системных ресурсов. При их недостатке сохраненные непарные события удаляются. Если непарное событие удаляется, соответствующее ему событие появится как непарное.
Цель «Попарное разбиение событий» сериализует непарные события в формате XML. Этот формат не соответствует ни одной схеме. Он содержит только два типа элементов. Элемент <unpaired>, являющийся корневым, за которым следуют элементы <event>, соответствующие каждому обнаруженному непарному событию. Элемент <event> имеет один атрибут, содержащий имя непарного события.
В следующем примере показан выходной формат цели «Попарное разбиение событий».
<unpaired truncated = "0" matchedCount = "[matched count]" memoryPressureDroppedCount = " [lost count]">
<event name = "[event name]" package = "[package]" id= "[event ID value]" version = "[event version]">
<data name = "[column name]">
<type name = "[column type]" package = "[type package]" />
<value>[column value]</value>
<text value>[text value]</text>>
</data>
</event>
</unpaired>
Цель «Трассировка событий для Windows»
Перед использованием средства отслеживания событий для Windows (трассировка событий Windows) в качестве цели рекомендуется получить практические знания по работе с данным средством. Трассировка событий Windows используется совместно с расширенными событиями или в качестве объекта-получателя расширенных событий. Следующие внешние ссылки помогут получить начальные сведения о трассировке событий Windows.
Расширенные события поддерживают версию трассировки событий Windows для Windows XP и Windows Server 2003. Цель «Трассировка событий Windows» является одноэлементным целевым объектом, хотя она может быть добавлена во множество сеансов. Если событие происходит в нескольких сеансах, то данное событие будет передано цели трассировки событий Windows по одному разу для каждого произошедшего события. Каждый процесс может иметь только одну подсистему расширенных событий.
Важно! |
---|
Чтобы цель ETW работала, стартовая учетная запись служб SQL Server должна входить в группу «Пользователи журналов производительности». |
Конфигурация событий в сеансе ETW управляется процессом, в котором присутствует подсистема расширенных событий. Эта подсистема управляет последовательностью и условиями запуска событий.
После привязки к сеансу расширенных событий, который присоединяет цель средства отслеживания событий для Windows в первый раз в процессе, средство ETW открывает один сеанс ETW в поставщике SQL Server. Если сеанс ETW уже существует, цель ETW получает ссылку на существующий сеанс. Этот сеанс ETW используется всеми экземплярами SQL Server на компьютере. Сеанс ETW получает все события от сеансов, имеющих цель ETW.
Поскольку приложению ETW требуются поставщики, способные потреблять события и направлять их в ETW, в сеансе включаются все пакеты расширенных событий. При запуске события цель ETW отправляет его в сеанс, в котором включен поставщик события.
Цель ETW поддерживает синхронную публикацию событий в потоке, запускающем это событие. Однако цель ETW не поддерживает асинхронную публикацию событий.
Цель трассировки событий Windows не может управляться внешними контроллерами трассировки событий Windows, такими как logman.exe. Для трассировки событий Windows нужно создать сеанс события с целью трассировки событий Windows. Дополнительные сведения см. в разделе CREATE EVENT SESSION (Transact-SQL).
Примечание |
---|
При включении назначения ETW создается сеанс ETW с именем XE_DEFAULT_ETW_SESSION. Если сеанс с именем XE_DEFAULT_ETW_SESSION уже существует, то он используется как есть, без изменения свойств. Сеанс XE_DEFAULT_ETW_SESSION используется совместно всеми экземплярами SQL Server. После запуска сеанса XE_DEFAULT_ETW_SESSION необходимо остановить его с помощью контроллера ETW, например инструмента Logman. Например, можно выполнить в командной строке следующую команду: logman stop XE_DEFAULT_ETW_SESSION -ets. |
В следующей таблице описаны доступные параметры для настройки цели ETW.
Параметр |
Допустимые значения |
Описание |
---|---|---|
default_xe_session_name |
Любая строка длиной до 256 символов. Это значение является необязательным. |
Имя сеанса расширенных событий. По умолчанию XESESSION0_4B7A5EC6-37EF-4d4c-81EC-13C547B9AC46. |
default_etw_session_logfile_path |
Любая строка длиной до 256 символов. Это значение является необязательным. |
Путь к файлу журнала сеанса расширенных событий. По умолчанию %TEMP%\ XEEtw.etl. |
default_etw_session_logfile_size_mb |
Любое целое число без знака. Это значение является необязательным. |
Размер файла журнала для сеанса расширенных событий (в мегабайтах, МБ). По умолчанию установлено значение 20 МБ. |
default_etw_session_buffer_size_kb |
Любое целое число без знака. Это значение является необязательным. |
Размер буфера в памяти (в килобайтах) для сеанса расширенных событий. Значение по умолчанию — 128 КБ. |
retries |
Любое целое число без знака. |
Число попыток публикации события в подсистеме ETW до удаления события. Значение по умолчанию 0. |
Конфигурация указанных выше настроек не обязательна. Цель ETW использует для них значения по умолчанию.
Цель ETW отвечает за следующие действия.
Создание сеанса ETW по умолчанию.
Регистрация всех пакетов расширенных событий в приложении ETW. Тем самым обеспечивается сохранность событий в приложении ETW.
Управление потоком событий, направляемых приложению ETW. Цель ETW создает событие ETW с данными, полученными от расширенных событий, и отправляет это событие в соответствующий сеанс ETW. Если событие превышает размер буфера или данные не вмещаются в одно событие ETW, приложение ETW разбивает это событие на фрагменты.
Хранение пакетов расширенных событий включено постоянно.
Приложение ETW по умолчанию использует следующие расположения.
Выходной файл ETW: %TEMP%\XEEtw.etl.
Важно! После начала первого сеанса путь к файлу изменить нельзя.
MOF-файлы: <путь_установки>\Microsoft SQL Server\Shared. Дополнительные сведения см. в разделе Формат управляющих объектов библиотеки MSDN.
Цель «Файл событий»
Цель «Файл событий» — это асинхронная цель, осуществляющая запись всех буферов на диск. Эта цель создает два типа файлов — журналов и метаданных. Файл метаданных описывает события, присутствующие в выходном файле журнала цели. Это позволяет производить правильный анализ всех событий в файле журнала, а также анализ данных о действиях, связанных с событием.
Для использования этой цели необходимо указать расположение и имя файла журнала и файла метаданных. Другие параметры конфигурации, например размер файла или характеристики роста, являются необязательными.
В следующей таблице описаны доступные параметры для настройки цели «Файл событий».
Значение |
Допустимые значения |
Описание |
---|---|---|
filename |
Любая строка длиной до 260 символов. Это значение является обязательным. |
Расположение и имя файла. Можно использовать любое расширение имени файла. |
max_file_size |
Любое 64-разрядное целое число. Это значение является необязательным. |
Верхний предел размера файла в мегабайтах (МБ). Если аргумент max_file_size не указан, файл будет увеличиваться до исчерпания пространства на диске. Размер файла по умолчанию составляет 1 ГБ. Аргумент max_file_size должен быть больше по сравнению с текущим размером буфера сеанса. Иначе целевой файл нельзя будет инициализировать и появится сообщение о недопустимости значения параметра max_file_size. Текущий размер буферов можно получить запросом к столбцу buffer_size в динамическом административном представлении sys.dm_xe_sessions. Если размер файла по умолчанию меньше размера буфера сеанса, рекомендуется задать для max_file_size значение, указанное в столбце max_memory представления каталога sys.server_event_sessions. Если значение параметра max_file_size больше размера буферов сеанса, его можно округлить до ближайшей меньшей величины, кратной размеру буфера сеанса. Созданный в результате целевой файл по размеру может быть меньше заданной величины max_file_size. Например, если размер буфера составляет 100 МБ, а max_file_size равен 150 МБ, размер результирующего файла округляется до меньшего значения 100 МБ, поскольку второй буфер не уместится в оставшихся 50 МБ. Если размер файла по умолчанию меньше размера буфера сеанса, рекомендуется задать для max_file_size значение, указанное в столбце max_memory представления каталога sys.server_event_sessions. |
max_rollover_files |
Любое 32-разрядное целое число. Это значение является необязательным. |
Максимальное число файлов, хранимых в файловой системе. |
increment |
Любое 32-разрядное целое число. Это значение является необязательным. |
Шаг увеличения размера файла в мегабайтах (МБ). Если не указан, то значением по умолчанию будет двойной размер буфера сеанса. |
metadatafile |
Любая строка длиной до 260 символов. Это значение является обязательным. |
Расположение и имя файла метаданных. |
Когда целевой файл создается впервые, к заданному имени файла присоединяется 0 и длинное целое число. Это длинное целое число вычисляется как количество миллисекунд, прошедших с 1 января 1600 года до момента создания файла. Последующие файлы продолжения используют тот же формат. Сравнив значения длинных целых, можно определить самый последний файл. В следующем примере показано, как происходит именование файлов в случае, если в качестве имени файла указано «C:\OutputFiles\MyOutput.xel»:
первый созданный файл — C:\OutputFiles\MyOutput_0_128500310259380000.xel
первый файл продолжения — C:\OutputFiles\MyOutput_0_128505831770890000.xel
второй файл продолжения — C:\OutputFiles\MyOutput_0_132410772966237000.xel
Цель счетчика синхронных событий
Цель счетчика синхронных событий ведет подсчет всех событий, возникающих в ходе сеанса расширенных событий. С помощью цели счетчика синхронных событий можно получать сведения о характеристиках рабочей нагрузки без затрат на сбор всех событий. У этой цели нет настраиваемых параметров.
В следующем примере показаны выходные данные цели счетчика синхронных событий.
<CounterTarget truncated = "0">
<Packages>
<Package name = "[package name]">
<Event name = "[event name]" count = "[number]" />
</Package>
</Packages>
</CounterTarget>
Цель «Буфер размещения»
Цель «Буфер размещения» кратковременно хранит данные о событиях в памяти. Данная цель может управлять событиями в одном из двух режимов.
Первый режим — это режим, «первым поступил — первым обслужен» (FIFO), когда при заполнении всей памяти, выделенной цели, теряется запись, которая была добавлена первой. В данном режиме (режим по умолчанию) для параметра occurrence_number задается значение 0.
Второй режим — это режим FIFO по видам событий, в котором хранится только определенное число событий каждого типа. В этом режиме при заполнении всей памяти, выделенной цели, удаляются самые старые события каждого типа. Параметр occurrence_number можно изменить, чтобы указать количество событий каждого типа, которые следует сохранять.
В следующей таблице описаны доступные параметры для настройки цели «Буфер размещения».
Значение |
Допустимые значения |
Описание |
---|---|---|
default_memory |
Любое 32-разрядное целое число. Это значение является необязательным. |
Максимальный объем памяти в килобайтах (КБ), который будет использован. При достижении этого значения существующие события будут удалены. |
occurrence_number |
Одно из следующих значений:
Это значение является необязательным. |
Режим FIFO, который будет применяться, а также (в случае если установлено значение больше 0) предпочитаемое число событий каждого типа, которые следует сохранять в буфере. |
В следующем примере показывается выход цели кольцевого буфера.
<RingBufferTarget eventsPerSec="" processingTime="" totalEventsProcessed="" eventCount="" droppedCount="" memoryUsed="">
<event name="" package="" id="" version="" timestamp="">
<data name="">
<type name="" package="" />
<value></value>
<text></text>
</data>
<action name="" package="">
<type name="" package="" />
<value></value>
<text></text>
</action>
</event>
</RingBufferTarget>