Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza danych SQL w usłudze Microsoft Fabric
W tym artykule opisano dwa zestawy widoków systemowych odnoszących się do zdarzeń rozszerzonych. W tym artykule przedstawiono następujące elementy:
- Jak korzystać z
JOINróżnych widoków systemowych. - Jak uzyskać określone informacje z widoków systemowych.
Istnieją dwa zestawy widoków systemowych dla zdarzeń rozszerzonych:
Widoki wykazu
- Te widoki przechowują informacje o definicji każdej sesji zdarzeń utworzonej przez operację CREATE EVENT SESSION (Transact-SQL). Ale te widoki nie wiedzą nic o tym, czy żadne sesje kiedykolwiek uruchomiono.
- Jeśli na przykład w Eksploratorze obiektów programu SSMS nie zdefiniowano żadnych sesji zdarzeń, funkcja SELECTing z widoku
sys.server_event_session_targetszwróci zero wierszy.
- Jeśli na przykład w Eksploratorze obiektów programu SSMS nie zdefiniowano żadnych sesji zdarzeń, funkcja SELECTing z widoku
- Większość przykładów jest napisana dla programów SQL Server i Azure SQL Managed Instance. Jednak po drobnych edycjach będą uruchamiane na platformie Azure SQL Database oraz SQL Database w Fabric, przez zmianę
serverw nazwie DMV nadatabase:-
sys.server_event_session*to prefiks nazwy w programie SQL Server i usłudze Azure SQL Managed Instance. -
sys.database_event_session*to prefiks nazwy w usłudze Azure SQL Database oraz SQL Database w Fabric. - Aby uzyskać więcej informacji na temat każdego z nich, zobacz Rozszerzone widoki wykazu zdarzeń.
-
Dynamiczne widoki zarządzania (DMV)
Przechowuj informacje o bieżącej aktywności uruchomionych sesji zdarzeń. Dynamiczne widoki zarządzania (DMVs) niewiele wiedzą o definicji sesji.
- Nawet jeśli wszystkie sesje zdarzeń są obecnie zatrzymane, widok
SELECTnadal zwraca wiersze, ponieważsys.dm_xe_packagesróżne pakiety są ładowane do aktywnej pamięci na początku serwera. - Z tego samego powodu
sys.dm_xe_objectsisys.dm_xe_object_columnsnadal zwracają wiersze.
- Nawet jeśli wszystkie sesje zdarzeń są obecnie zatrzymane, widok
Prefiks nazwy dla DMV Zdarzeń Rozszerzonych to:
-
sys.dm_xe_*to prefiks nazwy w programie SQL Server i usłudze Azure SQL Managed Instance. -
sys.dm_xe_database_*to zazwyczaj prefiks nazwy w usłudze Azure SQL Database i SQL Database w Fabric.
-
Permissions
Do SELECT widoków systemowych niezbędne jest następujące uprawnienie:
- Program SQL Server 2019 (15.x) i poprzednie wersje wymagają
VIEW SERVER STATEuprawnień na serwerze. - Program SQL Server 2022 (16.x) i nowsze wersje wymagają
VIEW SERVER PERFORMANCE STATEuprawnień na serwerze. - Usługa Azure SQL Database i baza danych SQL w usłudze Fabric wymagają
VIEW DATABASE PERFORMANCE STATEuprawnień do bazy danych.
Widoki wykazu
Na potrzeby tej strony utwórz sesję zdarzeń rozszerzonych za pomocą programu SSMS lub języka T-SQL. Zainstaluj najnowszą wersję programu SQL Server Management Studio (SSMS).
Tworzenie sesji w programie SQL Server Management Studio (SSMS)
W programie SSMS w eksploratorze obiektów można otworzyć okno dialogowe Nowa sesja, rozwijając zarządzanie>rozszerzone zdarzenia, a następnie klikając prawym przyciskiem myszy Sesje>Nowa sesja.
W dużym oknie dialogowym Nowa sesja w pierwszej sekcji z etykietą Ogólne zobaczymy, że opcja została wybrana do uruchomienia sesji zdarzeń podczas uruchamiania serwera.
Następnie w sekcji Zdarzenia zobaczymy, że lock_deadlock zdarzenie zostało wybrane. W przypadku tego zdarzenia widzimy, że wybrano trzy działania. Oznacza to, że przycisk Konfiguruj został wybrany, który po wybraniu staje się szary.
Zrzut ekranu z programu SSMS przedstawiający zdarzenia nowej sesji, pola globalne (akcje).
Następnie, w sekcji Zdarzenia>Konfigurowanie, widzimy, że resource_type został ustawiony na PAGE. Oznacza to, że dane zdarzenia nie zostaną wysłane z silnika zdarzeń do obiektu docelowego, jeśli wartość resource_type jest inna niż PAGE.
Widzimy dodatkowe filtry predykatu dla nazwy bazy danych i licznika.
Następnie w sekcji Magazyn danych zobaczymy, że event_file został wybrany jako element docelowy. Ponadto widzimy, że wybrano opcję Włącz przełączanie plików.
Na koniec w sekcji Zaawansowane widzimy, że wartość maksymalnego opóźnienia wysyłania została zmniejszona do 4 sekund.
Tworzenie sesji zdarzeń w języku T-SQL
Niezależnie od sposobu tworzenia definicji sesji zdarzeń, w SSMS można odtworzyć ją jako skrypt Transact-SQL, który dokładnie odpowiada oryginałowi. Można sprawdzić wcześniejsze zrzuty ekranu New Session i porównać ich widoczne specyfikacje z klauzulami w poniższym wygenerowanym skrypcie języka T-SQL CREATE EVENT SESSION.
Aby odtworzyć sesję zdarzeń, w Eksploratorze obiektów możesz kliknąć prawym przyciskiem myszy węzeł sesji, a następnie wybrać opcję Skryptuj sesję jako>CREATE do >Schowka.
CREATE EVENT SESSION [event_session_test3]
ON SERVER -- Or, if on Azure SQL Database, ON DATABASE.
ADD EVENT sqlserver.lock_deadlock
(
SET
collect_database_name = (1)
ACTION
(
package0.collect_system_time,
package0.event_sequence,
sqlserver.client_hostname
)
WHERE
(
[database_name] = N'InMemTest2'
AND [package0].[counter] <= (16)
AND [resource_type] = (6)
)
)
ADD TARGET package0.event_file
(
SET
filename = N'c:\temp\\event_session_test3_EF.xel',
max_file_size = (20),
max_rollover_files = (2)
)
WITH
(
MAX_MEMORY = 4096 KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 4 SECONDS,
MAX_EVENT_SIZE = 0 KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = ON
);
Widok katalogu SELECT JOIN UNION
Następująca instrukcja języka T-SQL SELECT jest długa tylko dlatego, że łączy kilka małych zapytań SELECT za pomocą UNION. Każdy z małych SELEKtów można uruchomić samodzielnie. Małe zapytania SELECT pokazują, jak różne widoki katalogowe systemu powinny być połączone za pomocą JOIN.
SELECT
s.name AS [Session-Name],
'1_EVENT' AS [Clause-Type],
'Event-Name' AS [Parameter-Name],
e.name AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'2_EVENT_SET' AS [Clause-Type],
f.name AS [Parameter-Name],
f.value AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
JOIN sys.server_event_session_fields As f
ON f.event_session_id = s.event_session_id
AND f.object_id = e.event_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'3_EVENT_ACTION' AS [Clause-Type],
a.package + '.' + a.name
AS [Parameter-Name],
'(Not_Applicable)' AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
JOIN sys.server_event_session_actions As a
ON a.event_session_id = s.event_session_id
AND a.event_id = e.event_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'4_EVENT_PREDICATES' AS [Clause-Type],
e.predicate AS [Parameter-Name],
'(Not_Applicable)' AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_events AS e
ON e.event_session_id = s.event_session_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'5_TARGET' AS [Clause-Type],
t.name AS [Parameter-Name],
'(Not_Applicable)' AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_targets AS t
ON t.event_session_id = s.event_session_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'6_TARGET_SET' AS [Clause-Type],
f.name AS [Parameter-Name],
f.value AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
JOIN sys.server_event_session_targets AS t
ON t.event_session_id = s.event_session_id
JOIN sys.server_event_session_fields As f
ON f.event_session_id = s.event_session_id
AND f.object_id = t.target_id
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'7_WITH_MAX_MEMORY' AS [Clause-Type],
'max_memory' AS [Parameter-Name],
s.max_memory AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
WHERE
s.name = 'event_session_test3'
UNION ALL
SELECT
s.name AS [Session-Name],
'7_WITH_STARTUP_STATE' AS [Clause-Type],
'startup_state' AS [Parameter-Name],
s.startup_state AS [Parameter-Value]
FROM
sys.server_event_sessions AS s
WHERE
s.name = 'event_session_test3'
ORDER BY
[Session-Name],
[Clause-Type],
[Parameter-Name]
;
Wynik
W poniższej tabeli przedstawiono dane wyjściowe z uruchamiania poprzedniego SELECT JOIN UNION. Nazwy parametrów wyjściowych i wartości są mapowane na to, co jest wyraźnie widoczne we wcześniejszej komendzie CREATE EVENT SESSION.
| Nazwa sesji | Typ Klauzuli | Nazwa Parametru | Parametr-Wartość |
|---|---|---|---|
event_session_test3 |
1_EVENT | Event-Name | blokada_zakleszczenie |
event_session_test3 |
2_EVENT_SET | collect_database_name | 1 |
event_session_test3 |
3_AKCJA_ZDARZENIE | sqlserver.client_hostname | (Not_Applicable) |
event_session_test3 |
3_AKCJA_ZDARZENIE | sqlserver.collect_system_time | (Not_Applicable) |
event_session_test3 |
3_AKCJA_ZDARZENIE | sqlserver.event_sequence | (Not_Applicable) |
event_session_test3 |
4_EVENT_PREDICATES | ([sqlserver].[equal_i_sql_unicode_string]([database_name],N'InMemTest2')AND[package0].[licznik]<=(16)) |
(Not_Applicable) |
event_session_test3 |
5_TARGET | plik_zdarzeń | (Not_Applicable) |
event_session_test3 |
6_TARGET_SET | filename | c:\temp\event_session_test3_EF.xel |
event_session_test3 |
6_TARGET_SET | maksymalny_rozmiar_pliku | 20 |
event_session_test3 |
6_TARGET_SET | max_rollover_files | 2 |
event_session_test3 |
7_WITH_MAX_MEMORY | maksymalna_pamięć | 4096 |
event_session_test3 |
7_WITH_STARTUP_STATE | stan początkowy | 1 |
To kończy sekcję o widokach katalogu.
Dynamiczne widoki zarządzania (DMV)
Ta sekcja zawiera kilka instrukcji SELECT Transact-SQL, które służą konkretnemu przydatnemu celowi biznesowemu. Ponadto zestawy SELECT pokazują, jak można JOIN połączyć DMVs dla dowolnych nowych zastosowań.
Dokumentacja referencyjna dynamicznych widoków zarządzania jest dostępna w temacie Dynamiczne widoki zarządzania zdarzeniami rozszerzonymi
Wszystkie obiekty, których można używać w obszarze zdarzeń rozszerzonych, pochodzą z pakietów, które są ładowane do systemu. W tej sekcji wymieniono wszystkie pakiety i ich opisy.
SELECT --C.1
p.name AS [Package],
p.description AS [Package-Description]
FROM
sys.dm_xe_packages AS p
ORDER BY
p.name;
Wynik
Oto lista pakietów.
| Package | Opis Pakietu |
|---|---|
filestream |
Zdarzenia rozszerzone dla programu SQL Server FILESTREAM i FileTable |
package0 |
Pakiet domyślny. Zawiera wszystkie: typy standardowe, mapy, operatory porównawcze, akcje i cele |
qds |
Zdarzenia rozszerzone dla Query Store |
SecAudit |
Zdarzenia inspekcji zabezpieczeń |
sqlclr |
Zdarzenia rozszerzone dla SQL CLR |
sqlos |
Zdarzenia rozszerzone dla systemu operacyjnego SQL |
SQLSatellite |
Zdarzenia rozszerzone dla usług SQL Server Machine Learning Services |
sqlserver |
Zdarzenia rozszerzone dla programu Microsoft SQL Server |
sqlsni |
Zdarzenia rozszerzone dla programu Microsoft SQL Server |
ucs |
Zdarzenia rozszerzone dla usługi Unified Communications Stack |
XtpCompile |
Zdarzenia rozszerzone dla kompilacji XTP |
XtpEngine |
Zdarzenia rozszerzone dla silnika XTP |
XtpRuntime |
Zdarzenia rozszerzone dla środowiska uruchomieniowego XTP |
Definicje poprzednich inicjalizacji:
-
clr= Wspólne środowisko uruchomieniowe platformy .NET -
qds= Sklep zapytań danych -
sni= Interfejs sieciowy serwera -
ucs= Ujednolicony stos komunikacji -
xtp= Ekstremalne przetwarzanie transakcji
WYBIERZ wszystkie dostępne elementy posortowane według typu
Poniższe SELECT polecenie zwraca jeden wiersz dla każdego obiektu.
SELECT --C.3
o.object_type AS [Type-of-Item],
p.name AS [Package],
o.name AS [Item],
o.description AS [Item-Description]
FROM
sys.dm_xe_objects AS o
JOIN sys.dm_xe_packages AS p ON o.package_guid = p.guid
WHERE
o.object_type IN ('action' , 'target' , 'pred_source')
AND
(
(o.capabilities & 1) = 0
OR
o.capabilities IS NULL
)
ORDER BY
[Type-of-Item],
[Package],
[Item];
Pola danych dostępne dla zdarzenia
Poniższe SELECT polecenie zwraca wszystkie pola danych, które są określone dla typu zdarzenia.
- Zanotuj element klauzuli
WHERE:column_type = 'data'. - Ponadto należy edytować wartość klauzuli
WHEREdlao.name =.
SELECT -- C.4
p.name AS [Package],
c.object_name AS [Event],
c.name AS [Column-for-Predicate-Data],
c.description AS [Column-Description]
FROM
sys.dm_xe_object_columns AS c
JOIN sys.dm_xe_objects AS o
ON o.name = c.object_name
JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE
c.column_type = 'data'
AND
o.object_type = 'event'
AND
o.name = '\<EVENT-NAME-HERE!>' --'lock_deadlock'
ORDER BY
[Package],
[Event],
[Column-for-Predicate-Data];
Wynik
Następujące wiersze zostały zwrócone przez poprzednie SELECT: WHERE o.name = 'lock_deadlock'
- Każdy wiersz reprezentuje opcjonalny filtr zdarzenia
sqlserver.lock_deadlock. - Kolumna
Column-Descriptionzostanie pominięta z poniższego ekranu. Jego wartość to częstoNULL. - To rzeczywiste dane wyjściowe, z wyjątkiem pominiętej kolumny Opis, która jest często
NULL. - Te wiersze to
WHERE object_type = 'lock_deadlock'.
| Package | Event | Kolumna dla danych predykatów |
|---|---|---|
sqlserver |
lock_deadlock |
associated_object_id |
sqlserver |
lock_deadlock |
database_id |
sqlserver |
lock_deadlock |
database_name |
sqlserver |
lock_deadlock |
deadlock_id |
sqlserver |
lock_deadlock |
duration |
sqlserver |
lock_deadlock |
lockspace_nest_id |
sqlserver |
lock_deadlock |
lockspace_sub_id |
sqlserver |
lock_deadlock |
lockspace_workspace_id |
sqlserver |
lock_deadlock |
mode |
sqlserver |
lock_deadlock |
object_id |
sqlserver |
lock_deadlock |
owner_type |
sqlserver |
lock_deadlock |
resource_0 |
sqlserver |
lock_deadlock |
resource_1 |
sqlserver |
lock_deadlock |
resource_2 |
sqlserver |
lock_deadlock |
resource_description |
sqlserver |
lock_deadlock |
resource_type |
sqlserver |
lock_deadlock |
transaction_id |
sys.dm_xe_map_values i pola zdarzeń
Poniższy SELECT zawiera JOIN do widoku sys.dm_xe_map_values.
Celem wyświetlania SELECT jest pokazanie licznych pól, które można wybrać dla sesji zdarzeń. Pola zdarzeń można używać na dwa sposoby:
- Aby wybrać, które wartości pól zostaną zapisane w obiekcie docelowym dla każdego wystąpienia zdarzenia.
- Aby odfiltrować, które wystąpienia zdarzenia będą wysyłane lub zatrzymane przed dotarciem do miejsca docelowego.
SELECT --C.5
dp.name AS [Package],
do.name AS [Object],
do.object_type AS [Object-Type],
'o--c' AS [O--C],
dc.name AS [Column],
dc.type_name AS [Column-Type-Name],
dc.column_type AS [Column-Type],
dc.column_value AS [Column-Value],
'c--m' AS [C--M],
dm.map_value AS [Map-Value],
dm.map_key AS [Map-Key]
FROM sys.dm_xe_objects AS do
JOIN sys.dm_xe_object_columns AS dc
ON dc.object_name = do.name
JOIN sys.dm_xe_map_values AS dm
ON dm.name = dc.type_name
JOIN sys.dm_xe_packages AS dp
ON dp.guid = do.package_guid
WHERE
do.object_type = 'event'
AND
do.name = '\<YOUR-EVENT-NAME-HERE!>' --'lock_deadlock'
ORDER BY
[Package],
[Object],
[Column],
[Map-Value];
Wynik
Następnie znajduje się przykład ponad 100 rzeczywistych wierszy danych wyjściowych z poprzedniego zapytania T-SQL SELECT. Wiersz dla resource_type jest odpowiedni dla filtrowania predykatu używanego w przykładzie event_session_test3 w innym miejscu tego artykułu.
/*** 5 sampled rows from the actual rows returned.
NOTE: 'resource_type' under 'Column'.
Package Object Object-Type O--C Column Column-Type-Name Column-Type Column-Value C--M Map-Value Map-Key
------- ------ ----------- ---- ------ ---------------- ----------- ------------ ---- --------- -------
sqlserver lock_deadlock event o--c CHANNEL etw_channel readonly 2 c--m Operational 4
sqlserver lock_deadlock event o--c KEYWORD keyword_map readonly 16 c--m access_methods 1024
sqlserver lock_deadlock event o--c mode lock_mode data NULL c--m IX 8
sqlserver lock_deadlock event o--c owner_type lock_owner_type data NULL c--m Cursor 2
sqlserver lock_deadlock event o--c resource_type lock_resource_type data NULL c--m PAGE 6
Therefore, on your CREATE EVENT SESSION statement, in its ADD EVENT WHERE clause,
you could put:
WHERE( ... resource_type = 6 ...) -- Meaning: 6 = PAGE.
***/
Parametry dla obiektów docelowych
Poniższe SELECT polecenie zwraca każdy parametr dla elementu docelowego. Każdy parametr jest oznakowany, aby wskazać, czy jest obowiązkowy. Wartości przypisywane do parametrów mają wpływ na zachowanie obiektu docelowego.
- Zanotuj element klauzuli
WHERE:object_type = 'customizable'. - Ponadto należy edytować wartość klauzuli
WHEREdlao.name =.
SELECT --C.6
p.name AS [Package],
o.name AS [Target],
c.name AS [Parameter],
c.type_name AS [Parameter-Type],
CASE c.capabilities_desc
WHEN 'mandatory' THEN 'YES_Mandatory'
ELSE 'Not_mandatory'
END AS [IsMandatoryYN],
c.description AS [Parameter-Description]
FROM
sys.dm_xe_objects AS o
JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
LEFT OUTER JOIN sys.dm_xe_object_columns AS c
ON o.name = c.object_name
AND c.column_type = 'customizable' -- !
WHERE
o.object_type = 'target'
AND
o.name LIKE '%' -- Or '\<YOUR-TARGET-NAME-HERE!>'.
ORDER BY
[Package],
[Target],
[IsMandatoryYN] DESC,
[Parameter];
Wynik
Następujące wiersze parametrów stanowią mały podzbiór tych zwróconych przez poprzedzający SELECT.
/*** Actual output, all rows, where target name = 'event_file'.
Package Target Parameter Parameter-Type IsMandatoryYN Parameter-Description
------- ------ --------- -------------- ------------- ---------------------
package0 event_file filename unicode_string_ptr YES_Mandatory Specifies the location and file name of the log
package0 event_file increment uint64 Not_mandatory Size in MB to grow the file
package0 event_file lazy_create_blob boolean Not_mandatory Create blob upon publishing of first event buffer, not before.
package0 event_file max_file_size uint64 Not_mandatory Maximum file size in MB
package0 event_file max_rollover_files uint32 Not_mandatory Maximum number of files to retain
package0 event_file metadatafile unicode_string_ptr Not_mandatory Not used
***/
DmV SELECT rzutowanie kolumny target_data do XML
To DMV SELECT zwraca wiersze danych z obiektu docelowego twojej aktywnej sesji zdarzeń. Dane są rzutowane do kodu XML, co sprawia, że zwracana komórka jest wybierana w celu łatwego wyświetlania w programie SSMS.
- Jeśli sesja wydarzenia zostanie zatrzymana, zwróci to zero wierszy
SELECT. - Należy edytować wartość klauzuli
WHEREdlas.name =.
SELECT --C.7
s.name,
t.target_name,
CAST(t.target_data AS XML) AS [XML-Cast]
FROM
sys.dm_xe_session_targets AS t
JOIN sys.dm_xe_sessions AS s
ON s.address = t.event_session_address
WHERE
s.name = '\<Your-Session-Name-Here!>';
Dane wyjściowe, jedyny wiersz, który zawiera komórkę XML
Oto jedyny wiersz, który jest wynikiem działania poprzedniego SELECT. Kolumna XML-Cast zawiera ciąg XML, który program SSMS interpretuje jako XML. W związku z tym program SSMS rozumie, że powinien umożliwić wybór komórki XML-Cast.
W tym przebiegu:
- Wartość
s.name =została ustawiona na sesję zdarzeń dlacheckpoint_beginzdarzenia. - Celem był obiekt typu ring_buffer.
name target_name XML-Cast
---- ----------- --------
checkpoint_session_ring_buffer2 ring_buffer <RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104"><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event><event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z"><data name="database_id"><type name="uint32" package="package0" /><value>5</value></data></event></RingBufferTarget>
Rezultat, xml ładnie sformatowane po wybraniu komórki
Po wybraniu komórki XML-Cast zostanie wyświetlona następująca ładna ilustracja.
<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="2" eventCount="2" droppedCount="0" memoryUsed="104">
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:23.508Z">
<data name="database_id">
<type name="uint32" package="package0" />
<value>5</value>
</data>
</event>
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T01:28:26.975Z">
<data name="database_id">
<type name="uint32" package="package0" />
<value>5</value>
</data>
</event>
</RingBufferTarget>
WYBIERANIE z funkcji w celu pobrania event_file danych z dysku
Załóżmy, że sesja zdarzeń zebrała pewne dane, a później została zatrzymana. Jeśli sesja została zdefiniowana w celu użycia obiektu docelowego event_file, nadal można pobrać dane, wywołując funkcję sys.fn_xe_target_read_file.
- Przed uruchomieniem tego
SELECTnależy edytować ścieżkę i nazwę pliku w parametrze funkcji.- Nie należy zwracać uwagi na dodatkowe cyfry, które system SQL osadza w rzeczywistych nazwach plików .XEL przy każdym ponownym uruchomieniu sesji. Wystarczy podać normalną nazwę katalogu głównego i rozszerzenie.
SELECT --C.8
f.module_guid,
f.package_guid,
f.object_name,
f.file_name,
f.file_offset,
CAST(f.event_data AS XML) AS [Event-Data-As-XML]
FROM
sys.fn_xe_file_target_read_file(
'\<YOUR-PATH-FILE-NAME-ROOT-HERE!>*.xel',
--'c:\temp\\Checkpoint_Begins_ES*.xel', -- Example.
NULL, NULL, NULL
) AS f;
Dane wyjściowe, wiersze zwracane przez funkcję SELECT z funkcji
Poniżej przedstawiono wiersze zwracane przez poprzednią SELECT FROM funkcję. Kolumna Event-Data-As-XML XML zawiera dane dotyczące wystąpienia zdarzenia.
module_guid package_guid object_name file_name file_offset Event-Data-As-XML
----------- ------------ ----------- --------- ----------- -----------------
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_begin c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5120 <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_end c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5120 <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:14.025Z"><data name="database_id"><value>5</value></data></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_begin c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5632 <event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:17.704Z"><data name="database_id"><value>5</value></data><action name="session_id" package="sqlserver"><value>60</value></action><action name="database_id" package="sqlserver"><value>5</value></action></event>
D5149520-6282-11DE-8A39-0800200C9A66 03FDA7D0-91BA-45F8-9875-8B6DD0B8E9F2 checkpoint_end c:\temp\\Checkpoint_Begins_ES_20160615bb-_0_131125086091700000.xel 5632 <event name="checkpoint_end" package="sqlserver" timestamp="2016-07-09T03:30:17.709Z"><data name="database_id"><value>5</value></data></event>
Dane wyjściowe, jedna komórka XML
Oto zawartość pierwszej komórki XML z poprzedniego zwróconego zestawu wierszy.
<event name="checkpoint_begin" package="sqlserver" timestamp="2016-07-09T03:30:14.023Z">
<data name="database_id">
<value>5</value>
</data>
<action name="session_id" package="sqlserver">
<value>60</value>
</action>
<action name="database_id" package="sqlserver">
<value>5</value>
</action>
</event>