Vytvoření relace události s cílem ring_buffer v paměti

Platí pro:Azure SQL DatabaseAzure SQL Managed Instance

Základní kroky v tomto názorném postupu jsou:

  1. Vytvoření a zahájení relace událostí s ring_buffer cílem
  2. Zobrazení zachycených dat událostí jako XML
  3. Zobrazení zachycených dat událostí jako sady relačních řádků

ring_buffer S cílem jsou kroky jednodušší než event_file u cíle, protože nemusíte ukládat data událostí ve službě Azure Storage.

Vytvoření a zahájení relace událostí s cílem ring_buffer

Chcete-li vytvořit novou relaci událostí v aplikaci SQL Server Management Studio (SSMS), rozbalte uzel Rozšířené události . Tento uzel je ve složce databáze ve službě Azure SQL Database a ve složce Správa ve službě Azure SQL Managed Instance. Klikněte pravým tlačítkem myši na složku Relace a vyberte Možnost Nová relace.... Na stránce Obecné zadejte název relace, která je example-session v tomto příkladu. Na stránce Události vyberte jednu nebo více událostí, které chcete přidat do relace. V tomto příkladu sql_batch_starting jsme vybrali událost.

Screenshot of the New Session SSMS dialog showing the event selection page with the sql_batch_starting event selected.

Na stránce Úložiště dat vyberte ring_buffer jako cílový typ. Pokud chcete šetřit paměť, doporučujeme ponechat počet událostí na malé číslo (ve výchozím nastavení 1 000) a nastavit maximální paměť vyrovnávací paměti na 1 MB nebo méně. Podrobnosti najdete v ring_buffer cíli.

Screenshot of the New Session SSMS dialog showing the data storage selection page with a ring_buffer target selected.

Teď, když je relace nakonfigurovaná, můžete volitelně vybrat tlačítko Skript a vytvořit skript T-SQL relace, který ji uloží pro pozdější použití. Tady je skript pro naši ukázkovou relaci:

CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.ring_buffer(SET max_memory=(1024))
GO

Vyberte OK a vytvořte relaci.

Zobrazení dat relace jako XML

V Průzkumník objektů rozbalte složku Relace a zobrazte relaci události, kterou jste vytvořili. Ve výchozím nastavení se relace při vytváření nespusťe. Relaci spustíte tak, že kliknete pravým tlačítkem myši na název relace a vyberete Spustit relaci. Později ji můžete zastavit tak, že po spuštění relace vyberete možnost Zastavit relaci.

Při spouštění dávek T-SQL v této databázi nebo spravované instanci relace zapisuje události do vyrovnávací paměti. Vzhledem k tomu, že velikost vyrovnávací paměti je omezená, po použití veškeré paměti se starší události zahodí, aby se uvolnilo místo pro novější události.

V Průzkumník objektů rozbalte relaci, aby se zobrazil package0.ring_buffer cíl, a poklikejte na cíl. Můžete také kliknout pravým tlačítkem myši a vybrat Zobrazit cílová data.... Otevře se mřížka se zobrazeným fragmentem XML. Výběrem tohoto fragmentu XML zobrazíte dokument XML představující obsah vyrovnávací paměti.

První řádek dokumentu XML popisuje relace a cílová metadata:

<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="17" eventCount="17" droppedCount="0" memoryUsed="32070">

V tomto příkladu vidíme, že cíl zpracoval ring_buffer 17 událostí. Nebyly vynechány žádné události, protože paměť vyrovnávací paměti nebyla vyčerpána a nebyl dosažen maximální počet událostí, které jsme nakonfigurovali (1 000).

Tip

Věnujte pozornost atributu truncated . Pokud je nastavená na 1, znamená to, že reprezentace XML vyrovnávací paměti nezobrazuje celý obsah vyrovnávací paměti. Další informace najdete v tématu ring_buffer cíl.

Zbytek dokumentu XML obsahuje události. Reprezentace jedné události v JAZYCE XML může vypadat takto:

  <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>

V tomto příkladu value obsahuje atribut dávku T-SQL (jeden dotaz v tomto příkladu).

Zobrazení dat relace jako relační sady řádků

Pokud chcete zobrazit data událostí z ring_buffer cíle v sadě relačních řádků, musíte napsat dotaz T-SQL, který používá výrazy XQuery k převodu XML na relační data.

Tady je příklad relace, kterou jsme vytvořili, a zobrazuje se jako první poslední události:

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;