Vytvoření relace události s cílem ring_buffer v paměti
Platí pro: Azure SQL Database Azure SQL Managed Instance SQL Database v prostředcích infrastruktury
Základní kroky v tomto názorném postupu jsou:
- Vytvoření a zahájení relace událostí s
ring_buffer
cílem - Zobrazení zachycených dat událostí jako XML
- 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.
Tento článek je relevantní pro databázi SQL Fabric, kde je zmíněna služba Azure SQL Database.
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.
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.
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;