Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-adatbázis a Microsoft Fabricben
Ha rendelkezik egy meglévő SQL Trace-szkripttel, amelyet bővített események munkamenetté szeretne konvertálni, a jelen témakörben ismertetett eljárásokkal létrehozhat egy egyenértékű Kiterjesztett események munkamenetet. A trace_xe_action_map és trace_xe_event_map rendszertáblákban található információk használatával összegyűjtheti azokat az információkat, amelyeket az átalakításhoz el kell végeznie.
A lépések a következők:
Futtassa a meglévő szkriptet egy SQL Trace-munkamenet létrehozásához, majd szerezze be a nyomkövetés azonosítóját.
Futtasson egy lekérdezést, amely a fn_trace_geteventinfo függvénnyel megkeresi az egyes SQL Trace-eseményosztályok és a hozzá tartozó oszlopok megfelelő Kiterjesztett események eseményeit és műveleteit.
A fn_trace_getfilterinfo függvénnyel listázhatja a szűrőket és az ezzel egyenértékű kiterjesztett esemény műveleteket.
Hozzon létre manuálisan egy Kiterjesztett események munkamenetet az egyenértékű Kiterjesztett események események, műveletek és predikátumok (szűrők) használatával.
A nyomkövetési azonosító beszerzése
Nyissa meg az SQL Trace szkriptet a Lekérdezésszerkesztőben, majd hajtsa végre a szkriptet a nyomkövetési munkamenet létrehozásához. Vegye figyelembe, hogy a nyomkövetési munkamenetnek nem kell futnia az eljárás elvégzéséhez.
Szerezze be a nyomkövetési azonosítót. Ehhez használja a következő lekérdezést:
SELECT * FROM sys.traces; GOMegjegyzés:
Az 1. nyomkövetési azonosító általában az alapértelmezett nyomkövetést jelzi.
A kiterjesztett események megfelelőinek meghatározása
A kiterjesztett események egyenértékű eseményeinek és műveleteinek meghatározásához futtassa a következő lekérdezést, amelyben a trace_id az előző eljárásban beszerzett nyomkövetési azonosító értékére van állítva.
Megjegyzés:
Ebben a példában a rendszer az alapértelmezett nyomkövetés (1) nyomkövetési azonosítóját használja.
USE MASTER; GO DECLARE @trace_id int; SET @trace_id = 1; SELECT DISTINCT el.eventid, em.package_name, em.xe_event_name AS 'event' , el.columnid, ec.xe_action_name AS 'action' FROM (sys.fn_trace_geteventinfo(@trace_id) AS el LEFT OUTER JOIN sys.trace_xe_event_map AS em ON el.eventid = em.trace_event_id) LEFT OUTER JOIN sys.trace_xe_action_map AS ec ON el.columnid = ec.trace_column_id WHERE em.xe_event_name IS NOT NULL AND ec.xe_action_name IS NOT NULL;A rendszer visszaadja a kiterjesztett események megfelelő eseményazonosítóját, csomagnevét, eseménynevét, oszlopazonosítóját és műveletnevét. Ezt a kimenetet a jelen témakör későbbi, "A kiterjesztett események munkamenetének létrehozása" című eljárásában fogja használni.
Bizonyos esetekben a szűrt oszlop egy esemény adatmezőjére van leképezve, amely alapértelmezés szerint szerepel a Kiterjesztett események eseményben. Ezért a "Extended_Events_action_name" oszlop NULL értékű lesz. Ha ez történik, az alábbiakat kell tennie annak meghatározásához, hogy melyik adatmező felel meg a szűrt oszlopnak:
A NULL értéket visszaadó műveleteknél határozza meg, hogy a szkript mely SQL Trace-eseményosztályai tartalmazzák a szűrt oszlopot.
Előfordulhat például, hogy az SP:StmtCompleted eseményosztályt használta, és adott meg egy szűrőt az Időtartam nyomkövetési oszlop nevére (SQL Trace eseményosztály azonosítója 45, és az SQL Trace oszlopazonosítója 13). Ebben az esetben a művelet neve NULL értékként jelenik meg a lekérdezés eredményei között.
Az előző lépésben azonosított SQL Trace-eseményosztályok esetében keresse meg a kiterjesztett események megfelelő eseménynevét. (Ha nem biztos az ezzel egyenértékű eseménynévben, használja a témakör lekérdezését Az SQL Trace eseményosztályokkal egyenértékű kiterjesztett események megtekintése című témakörben.)
Az alábbi lekérdezés segítségével azonosíthatja az előző lépésben azonosított eseményekhez használandó megfelelő adatmezőket. A lekérdezés a Kiterjesztett események adatmezőket jeleníti meg a "event_field" oszlopban. A lekérdezésben cserélje le <a event_name> az előző lépésben megadott esemény nevére.
SELECT xp.name package_name, xe.name event_name ,xc.name event_field, xc.description FROM sys.trace_xe_event_map AS em INNER JOIN sys.dm_xe_objects AS xe ON em.xe_event_name = xe.name INNER JOIN sys.dm_xe_packages AS xp ON xe.package_guid = xp.guid AND em.package_name = xp.name INNER JOIN sys.dm_xe_object_columns AS xc ON xe.name = xc.object_name WHERE xe.object_type = 'event' AND xc.column_type <> 'readonly' AND em.xe_event_name = '<event_name>';Az SP:StmtCompleted eseményosztály például leképezi a sp_statement_completed Bővített események eseményt. Ha a lekérdezésben sp_statement_completed ad meg eseménynévként, a "event_field" oszlop az eseményhez alapértelmezés szerint belefoglalt mezőket jeleníti meg. A mezőket tekintve láthatja, hogy van egy "duration" mező. Ha a szűrőt a kiterjesztett események megfelelő munkamenetében szeretné létrehozni, egy predikátumot adna hozzá, például "WHERE duration > 0". Példaként tekintse meg a jelen témakör "A bővített események munkamenetének létrehozása" című szakaszát.
A Bővített események munkamenetének létrehozása
A Lekérdezésszerkesztővel hozza létre a Bővített események munkamenetet, és írja a kimenetet egy fájl céljára. Az alábbi lépések egyetlen lekérdezést írnak le, és magyarázatokkal mutatják be, hogyan hozhatja létre a lekérdezést. A teljes lekérdezési példáért tekintse meg a témakör "Példa" szakaszát.
Adjon hozzá utasításokat az esemény-munkamenet létrehozásához, és cserélje le a session_name a Kiterjesztett események munkamenethez használni kívánt névre.
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name') DROP EVENT SESSION [Session_Name] ON SERVER; CREATE EVENT SESSION [Session_Name] ON SERVER;Adja hozzá a "Kiterjesztett események megfelelőinek meghatározása" eljárás kimeneteként visszaadott kiterjesztett események eseményeit és műveleteit, majd adja hozzá a "Szkriptben használt szűrők meghatározása" eljárásban azonosított predikátumokat (szűrőket).
Az alábbi példa egy SQL Trace-szkriptet használ, amely tartalmazza az SQL:StmtStarting és az SP:StmtCompleted eseményosztályokat, valamint a munkamenet-azonosítóra és az időtartamra vonatkozó szűrőket. A "Kiterjesztett események megfelelőinek meghatározása" eljárás lekérdezésének mintakimenete a következő eredményhalmazt adja vissza:
Eventid package_name event columnid action 44 sqlserver sp_statement_starting 6 nt_username 44 sqlserver sp_statement_starting 9 client_pid 44 sqlserver sp_statement_starting 10 client_app_name 44 sqlserver sp_statement_starting 11 server_principal_name 44 sqlserver sp_statement_starting 12 session_id 45 sqlserver sp_statement_completed 6 nt_username 45 sqlserver sp_statement_completed 9 client_pid 45 sqlserver sp_statement_completed 10 client_app_name 45 sqlserver sp_statement_completed 11 server_principal_name 45 sqlserver sp_statement_completed 12 session_idHa ezt kiterjesztett eseményeknek megfelelővé szeretné alakítani, a sqlserver.sp_statement_starting és a sqlserver.sp_statement_completed események hozzáadódnak a műveletek listájával. A predikátum-utasítások WHERE záradékként szerepelnek.
ADD EVENT sqlserver.sp_statement_starting (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 ), ADD EVENT sqlserver.sp_statement_completed (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 AND duration > 0 )Adja hozzá az aszinkron fájlcélt, és cserélje le a fájl elérési útját arra a helyre, ahová menteni szeretné a kimenetet. A fájl céljának megadásakor tartalmaznia kell egy naplófájlt és egy metaadatfájl elérési útját.
ADD TARGET package0.asynchronous_file_target( SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
Az eredmények megtekintése
A kimenetet a sys.fn_xe_file_target_read_file függvénnyel tekintheti meg. Ehhez futtassa a következő lekérdezést, és cserélje le a fájl elérési útját a megadott elérési utakra:
SELECT *, CAST(event_data as XML) AS 'event_data_XML' FROM sys.fn_xe_file_target_read_file('c:\temp\ExtendedEventsStoredProcs*.xel', 'c:\temp\ExtendedEventsStoredProcs*.xem', NULL, NULL);Megjegyzés:
Az eseményadatok XML-fájlként való megadása nem kötelező.
A sys.fn_xe_file_target_read_file függvényről további információt a sys.fn_xe_file_target_read_file (Transact-SQL) című témakörben talál.
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name') DROP EVENT SESSION [session_name] ON SERVER; CREATE EVENT SESSION [session_name] ON SERVER ADD EVENT sqlserver.sp_statement_starting (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 ), ADD EVENT sqlserver.sp_statement_completed (ACTION ( sqlserver.nt_username, sqlserver.client_pid, sqlserver.client_app_name, sqlserver.server_principal_name, sqlserver.session_id ) WHERE sqlserver.session_id = 59 AND duration > 0 ); ADD TARGET package0.asynchronous_file_target (SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
Example
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='session_name')
DROP EVENT SESSION [session_name] ON SERVER;
CREATE EVENT SESSION [session_name]
ON SERVER
ADD EVENT sqlserver.sp_statement_starting
(ACTION
(
sqlserver.nt_username,
sqlserver.client_pid,
sqlserver.client_app_name,
sqlserver.server_principal_name,
sqlserver.session_id
)
WHERE sqlserver.session_id = 59
),
ADD EVENT sqlserver.sp_statement_completed
(ACTION
(
sqlserver.nt_username,
sqlserver.client_pid,
sqlserver.client_app_name,
sqlserver.server_principal_name,
sqlserver.session_id
)
WHERE sqlserver.session_id = 59 AND duration > 0
)
ADD TARGET package0.asynchronous_file_target
(SET filename='c:\temp\ExtendedEventsStoredProcs.xel', metadatafile='c:\temp\ExtendedEventsStoredProcs.xem');
Lásd még:
Az SQL Trace-eseményosztályokkal egyenértékű kiterjesztett események megtekintése