Esemény-munkamenet létrehozása egy ring_buffer-tárolóval a memóriában
A következőre vonatkozik: Azure SQL Database
Felügyelt Azure SQL-példány
Az útmutató magas szintű lépései a következők:
- Esemény-munkamenet létrehozása és indítása egy
ring_buffer
cél használatával - Rögzített eseményadatok megtekintése XML-fájlként
- Rögzített eseményadatok megtekintése relációs sorkészletként
ring_buffer
A cél esetében a lépések egyszerűbbek, mint a event_file
cél esetében, mivel nem kell eseményadatokat tárolnia az Azure Storage-ban.
Esemény-munkamenet létrehozása és indítása egy ring_buffer-cél használatával
Ha új esemény munkamenetet szeretne létrehozni az SQL Server Management Studióban (SSMS), bontsa ki a Kiterjesztett események csomópontot . Ez a csomópont az Azure SQL Database adatbázismappájában, a felügyelt Azure SQL-példány Felügyeleti mappájában található. Kattintson a jobb gombbal a Munkamenetek mappára, és válassza az Új munkamenet...lehetőséget. Az Általános lapon adja meg a munkamenet nevét, amely ebben a példában szerepel example-session
. Az Események lapon válasszon ki egy vagy több eseményt, amely hozzáadható a munkamenethez. Ebben a példában az eseményt sql_batch_starting
választottuk ki.
Az Adattárolás lapon válassza ki ring_buffer
a céltípust. A memória megőrzése érdekében javasoljuk, hogy az események számát kis számra (alapértelmezés szerint 1000) tartsa, és állítsa a puffermemória maximális számát 1 MB-ra vagy annál kisebbre. További részletekért lásd ring_buffer célt.
Most, hogy a munkamenet konfigurálva lett, a Szkript gombra kattintva létrehozhat egy T-SQL-szkriptet a munkamenetből, hogy később menthesse. A példamunkamenet szkriptje a következő:
CREATE EVENT SESSION [example-session] ON DATABASE
ADD EVENT sqlserver.sql_batch_starting
ADD TARGET package0.ring_buffer(SET max_memory=(1024))
GO
A munkamenet létrehozásához kattintson az OK gombra .
Munkamenet-adatok megtekintése XML-fájlként
Az Object Explorerben bontsa ki a Munkamenetek mappát a létrehozott esemény-munkamenet megtekintéséhez. Alapértelmezés szerint a munkamenet létrehozásakor nem indul el. A munkamenet elindításához kattintson a jobb gombbal a munkamenet nevére, és válassza a Munkamenet indítása parancsot. Később a munkamenet futtatása után a Munkamenet leállítása lehetőséget választva is leállíthatja.
Mivel a T-SQL-kötegek végrehajtása ebben az adatbázisban vagy felügyelt példányban történik, a munkamenet eseményeket ír egy memóriapufferbe. Mivel a memóriapuffer mérete véges, az összes memória használata után a rendszer elveti a régebbi eseményeket, hogy helyet biztosítsunk az újabb eseményeknek.
Az Object Explorerben bontsa ki a munkamenetet a package0.ring_buffer
cél megjelenítéséhez, és kattintson duplán a célra. A céladatok megtekintésére is kattinthat a jobb gombbal, és kiválaszthatja a lehetőséget. Ekkor megnyílik egy rács, amelyen megjelenik egy XML-töredék. Jelölje ki ezt az XML-töredéket a memóriapuffer tartalmát képviselő XML-dokumentum megtekintéséhez.
Az XML-dokumentum első sora a munkamenet és a cél metaadatait írja le:
<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="17" eventCount="17" droppedCount="0" memoryUsed="32070">
Ebben a példában azt látjuk, hogy a cél 17 eseményt ring_buffer
feldolgozott. A rendszer nem törölt eseményeket, mert a puffermemória nem merült ki, és a konfigurált események maximális száma (1000) nem lett elérve.
Tipp.
Ügyeljen az attribútumra truncated
. Ha be van állítva 1
, az azt jelenti, hogy a memóriapuffer XML-reprezentációja nem jeleníti meg a teljes puffertartalmat. További információ: ring_buffer cél.
Az XML-dokumentum többi része eseményeket tartalmaz. Egyetlen esemény xml-fájlban való megjelenítése a következőképpen nézhet ki:
<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>
Itt az value
attribútum tartalmazza a T-SQL köteget (ebben a példában egyetlen lekérdezést).
Munkamenet-adatok megtekintése relációs sorkészletként
Ha egy cél eseményadatait ring_buffer
szeretné megtekinteni egy relációs sorhalmazban, meg kell írnia egy T-SQL-lekérdezést, amely XQuery-kifejezésekkel konvertálja az XML-t relációs adatokká.
Íme egy példa a létrehozott munkamenetre, amely először a legutóbbi eseményeket jeleníti meg:
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;