Цели расширенных событий SQL Server

Целями расширенных событий SQL Server являются объекты-получатели событий. Цели могут записывать события в файл, обрабатывать их данные статистически и запускать задачу, связанную с событием. Цели могут обрабатывать данные в синхронном или асинхронном режиме.

Структура расширенных событий гарантирует, что цели получают события единственный раз за сеанс.

Расширенные события предоставляют следующие цели, которые можно использовать в сеансах расширенных событий.

  • Event bucketing

    Используется для подсчета указанных событий на основании указанного действия или столбца события.

  • Event pairing

    Многие типы событий случаются парами, например получение и снятие блокировки. Эта цель определяет, что указанное парное событие не случилось в нужной последовательности.

  • Event Tracing for Windows (ETW)

    Предназначена для корреляции событий SQL Server с данными событий ОС Windows или данными событий приложений.

  • Event file

    Используется для записи выходных данных сеанса событий из полных буферов памяти на диск.

  • Synchronous event counter

    Подсчитывает все события, происходящие в ходе сеанса расширенных событий. Эта цель используется для получения сведений о характеристиках рабочей нагрузки без затрат на сбор всех событий.

  • Ring buffer

    Используется для хранения данных о событиях в памяти по принципу очереди (FIFO) или по принципу FIFO для каждого события.

Цели можно разделить на файловые цели и цели в памяти.

  • Цель «Файл событий» и цель трассировки событий Windows считаются файловыми целями.

  • Цели «Сегментирование событий», «Попарное разбиение событий», счетчик синхронных событий и «Кольцевой буфер» считаются целями в памяти. Данные хранятся в буфере сеанса (столбец target_data динамического административного представления sys.dm_xe_session_targets).

Учтите, что когда останавливается сеанс, который использует цель в памяти, то все данные, хранящиеся в буфере сеанса, будут потеряны. Если после остановки сеанса требуется доступ к данным событиям, нужно настроить использование в сеансе файловой цели (рекомендуется) или сохранить данные перед остановкой сеанса.

Следующие рекомендации помогут определить, какую цель использовать.

Назначение

Рекомендуемое использование

Цель «Файл событий» или цель трассировки событий Windows

Используйте файловую цель, если выполняется одно или несколько из следующих условий.

  • Нужно выполнить долгосрочный сбор данных.

  • Нужно собирать данные о событиях исключительно большого объема.

  • Нужно сохранить данные о событиях в архивных целях.

Цель «Кольцевой буфер»

Используйте цель «Кольцевой буфер», если выполняются следующие условия.

  • Нужно выполнять циклическую трассировку, где данные собираются непрерывно, но важны только последние события (примерно 2 МБ данных), или нужно выполнить краткосрочный сбор данных и просмотреть последние события.

  • Нужно просмотреть все данные о событиях, собранные в буфере сеанса. Иными словами, нужно просмотреть необработанные данные, а не сводные.

  • Данные о событиях не нужно сохранять в архивных целях.

Цель «Сегментирование событий», цель «Попарное разбиение событий» или цель счетчика синхронных событий

Используйте одну из этих целей в памяти, если выполняются следующие условия.

  • Требуется устранить определенную проблему с помощью цели, которая может выполнять некоторый вид анализа и статистической обработки данных о событиях. Например, может понадобиться выяснить, почему транзакции остались открытыми (цель «Попарное разбиение событий»), или определить, какие запросы сильнее всего нагружают процессор за заданный интервал времени (цель «Сегментирование событий»).

  • Нужно выполнить краткосрочный сбор данных.

  • Данные о событиях не нужно сохранять в архивных целях.

Цель «Сегментирование событий»

Цель «Сегментирование событий» группирует экземпляры определенного типа событий на основе данных событий. «Сегмент» — это группирование событий, подсчитанных на основе указанного столбца события или действия. Цель «Группирование событий» можно использовать для разрешения проблем с производительностью. Найдя наиболее часто происходящие события, можно найти «горячие точки», показывающие потенциальную причину возникновения проблемы производительности.

В следующей таблице описываются параметры, которые могут быть использованы для настройки цели «Группирование событий».

Параметр

Допустимые значения

Описание

slots

Любое целочисленное значение. Это значение является необязательным.

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

filtering_event_name

Любое событие, участвующее в сеансе расширенных событий. Это значение является необязательным.

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

Если указывается это значение, то следует использовать формат имя_пакета.имя_события, например 'sqlserver.checkpoint_end'. Определить имя пакета можно с помощью следующего запроса:

SELECT p.name, se.event_name
FROM sys.dm_xe_session_events se
JOIN sys.dm_xe_packages p
ON se_event_package_guid = p.guid
ORDER BY p.name, se.event_name

Если не указывается значение параметра filtering_event_name, то для параметра source_type следует установить значение 1 (значение по умолчанию).

source_type

Тип объекта, на котором основан сегмент. Это значение необязательно. Когда оно не задано, по умолчанию равно 1.

Может иметь одно из следующих значений:

  • 0 для события

  • 1 для действия

источник

Имя столбца событий или действия.

Имя столбца событий или действия, которое используется в качестве источника данных.

При указании столбца событий для источника необходимо указать столбец из события, которое указывается в качестве значения для параметра filtering_event_name. Определить потенциальные столбцы можно с помощью следующего запроса:

SELECT name FROM sys.dm_xe_object_columns
WHERE object_name = '<eventname>'
AND column_type != 'readonly'

При указании столбца события для источника нет необходимости включать имя пакета в значение источника.

При указании имени действия для источника необходимо использовать одно из действий, которые были настроены для коллекции в сеансе события, для которого используется данная цель. Чтобы найти потенциальные значения для имени действия, можно выполнить запрос к столбцу 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

Одно из следующих значений.

  • 0 = не отвечать;

  • 1 = прекратить добавлять новые несвязанные события к списку при нехватке памяти.

Реакция цели на события памяти. Если значение равно 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 не поддерживает асинхронную публикацию событий.

Цель ETW не может управляться внешними контроллерами ETW, такими как logman.exe. Для трассировки ETW нужно создать сеанс события с помощью цели ETW. Дополнительные сведения см. в разделе 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

Одно из следующих значений:

  • 0 (по умолчанию) — если вся выделенная цели память использована, то самое старое событие удаляется.

  • Любое 32-разрядное целое число — количество событий каждого типа, которое следует хранить до удаления в режиме FIFO для каждого события.

Это значение является необязательным.

Режим 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>

Журнал изменений

Обновления

В раздел «Средство отслеживания событий для Windows» добавлено примечание о сеансе XE_DEFAULT_ETW_SESSION.

Во вводную часть добавлены краткие описания для каждого типа целей и рекомендации по использованию.