Создание сеанса событий с целевым объектом ring_buffer в памяти
Применимо к: База данных SQL Azure Управляемый экземпляр SQL Azure
Ниже приведены общие действия, описанные в этом пошаговом руководстве.
- Создание и запуск сеанса событий с целевым
ring_buffer
объектом - Просмотр захваченных данных событий как XML
- Просмотр захваченных данных событий в виде реляционного набора строк
ring_buffer
С целевым объектом шаги проще, чем с event_file
целевым объектом, так как не нужно хранить данные событий в служба хранилища Azure.
Создание и запуск сеанса событий с помощью целевого объекта ring_buffer
Чтобы создать новый сеанс событий в СРЕДЕ SQL Server Management Studio (SSMS), разверните узел расширенных событий . Этот узел находится в папке базы данных в База данных SQL Azure и в папке "Управление" в Управляемый экземпляр SQL Azure. Щелкните правой кнопкой мыши папку "Сеансы" и выберите "Создать сеанс...". На странице "Общие " введите имя сеанса, которое находится example-session
в этом примере. На странице "События" выберите одно или несколько событий, которые нужно добавить в сеанс. В этом примере мы выбрали sql_batch_starting
событие.
На странице хранилища данных выберите ring_buffer
целевой тип. Чтобы сохранить память, рекомендуется сохранить количество событий небольшим числом (1000 по умолчанию) и задать максимальный объем буферной памяти на 1 МБ или меньше. Дополнительные сведения см. в разделе ring_buffer целевой объект.
Теперь, когда сеанс настроен, можно при необходимости выбрать кнопку "Скрипт ", чтобы создать скрипт T-SQL сеанса, чтобы сохранить его позже. Ниже приведен сценарий для нашего примера сеанса:
CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.ring_buffer(SET max_memory=(1024))
GO
Нажмите кнопку "ОК ", чтобы создать сеанс.
Просмотр данных сеанса как XML
В обозреватель объектов разверните папку Session, чтобы увидеть созданный сеанс событий. По умолчанию сеанс не запускается при его создании. Чтобы запустить сеанс, щелкните правой кнопкой мыши имя сеанса и выберите "Пуск сеанса". Позже его можно остановить, нажав кнопку "Остановить сеанс", после запуска сеанса.
Так как пакеты T-SQL выполняются в этой базе данных или управляемом экземпляре, сеанс записывает события в буфер памяти. Так как размер буфера памяти является конечным, после того как все память будет использоваться старыми событиями, удаляются, чтобы освободить место для новых событий.
В обозреватель объектов разверните сеанс, чтобы просмотреть целевой package0.ring_buffer
объект и дважды щелкните целевой объект. Вы также можете щелкнуть правой кнопкой мыши и выбрать представление целевых данных.... Откроется сетка с показанным фрагментом XML. Выберите этот фрагмент XML, чтобы увидеть XML-документ, представляющий содержимое буфера памяти.
Первая строка XML-документа описывает сеанс и целевые метаданные:
<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="17" eventCount="17" droppedCount="0" memoryUsed="32070">
В этом примере мы видим, что 17 событий были обработаны целевым ring_buffer
объектом. События не были удалены, так как буферная память не была исчерпана, а максимальное количество событий, настроенных (1000) не достигнуто.
Совет
Обратите внимание на truncated
атрибут. Если задано значение 1
, это означает, что XML-представление буфера памяти не отображает весь содержимое буфера. Дополнительные сведения см. в разделе ring_buffer целевой объект.
Остальная часть XML-документа содержит события. Представление одного события в XML может выглядеть следующим образом:
<event name="sql_batch_starting" package="sqlserver" timestamp="2023-10-18T17:43:34.079Z">
<data name="batch_text">
<type name="unicode_string" package="package0"></type>
<value><![CDATA[SELECT
'DatabaseXEStore[@Name=' + quotename(CAST(db_name() AS sysname),'''') +' and @ServerName=' + quotename(CAST(SERVERPROPERTY('servername') AS sysname),'''') + ']' AS [Urn],
CAST(db_name() AS sysname) AS [Name],
CAST(SERVERPROPERTY('servername') AS sysname) AS [ServerName],
(SELECT count(*) FROM sys.dm_xe_database_sessions) AS [RunningSessionCount]]]></value>
</data>
</event>
value
Здесь атрибут содержит пакет T-SQL (один запрос в этом примере).
Просмотр данных сеанса в виде реляционного набора строк
Чтобы просмотреть данные событий из целевого ring_buffer
объекта в реляционном наборе строк, необходимо написать запрос T-SQL, использующий выражения XQuery для преобразования XML в реляционные данные.
Ниже приведен пример созданного сеанса, в котором отображаются последние события:
WITH
/* An XML document representing memory buffer contents */
RingBuffer AS
(
SELECT CAST(xst.target_data AS xml) AS TargetData
FROM sys.dm_xe_database_session_targets AS xst
INNER JOIN sys.dm_xe_database_sessions AS xs
ON xst.event_session_address = xs.address
WHERE xs.name = N'example-session'
),
/* A row for each event in the buffer, represented as an XML fragment */
EventNode AS
(
SELECT CAST(NodeData.query('.') AS xml) AS EventInfo
FROM RingBuffer AS rb
CROSS APPLY rb.TargetData.nodes('/RingBufferTarget/event') AS n(NodeData)
)
/* A relational rowset formed by using the XQuery value method */
SELECT EventInfo.value('(event/@timestamp)[1]','datetimeoffset') AS timestamp,
EventInfo.value('(event/@name)[1]','sysname') AS event_name,
EventInfo.value('(event/data/value)[1]','nvarchar(max)') AS sql_batch_text
FROM EventNode
ORDER BY timestamp DESC;