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
Tworzy sesję zdarzeń rozszerzonych, która identyfikuje zdarzenia do zbierania, obiektów docelowych sesji zdarzeń i opcji sesji zdarzeń.
Transact-SQL konwencje składni
Składnia
CREATE EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
<event_definition> [ , ...n ]
[ <event_target_definition> [ , ...n ] ]
[ WITH ( <event_session_options> [ , ...n ] ) ]
}
;
<event_definition>::=
{
ADD EVENT [event_module_guid].event_package_name.event_name
[ ( {
[ SET { event_customizable_attribute = <value> [ , ...n ] } ]
[ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
[ WHERE <predicate_expression> ]
} ) ]
}
<predicate_expression> ::=
{
[ NOT ] <predicate_factor> | { ( <predicate_expression> ) }
[ { AND | OR } [ NOT ] { <predicate_factor> | ( <predicate_expression> ) } ]
[ , ...n ]
}
<predicate_factor>::=
{
<predicate_leaf> | ( <predicate_expression> )
}
<predicate_leaf>::=
{
<predicate_source_declaration> { = | < > | != | > | >= | < | <= } <value>
| [event_module_guid].event_package_name.predicate_compare_name ( <predicate_source_declaration> , <value> )
}
<predicate_source_declaration>::=
{
event_field_name | ( [event_module_guid].event_package_name.predicate_source_name )
}
<value>::=
{
number | 'string'
}
<event_target_definition>::=
{
ADD TARGET [event_module_guid].event_package_name.target_name
[ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
}
<event_session_options>::=
{
[ MAX_MEMORY = size [ KB | MB ] ]
[ [ , ] EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } ]
[ [ , ] MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } ]
[ [ , ] MAX_EVENT_SIZE = size [ KB | MB ] ]
[ [ , ] MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } ]
[ [ , ] TRACK_CAUSALITY = { ON | OFF } ]
[ [ , ] STARTUP_STATE = { ON | OFF } ]
[ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}
Arguments
event_session_name
Zdefiniowana przez użytkownika nazwa sesji zdarzeń. event_session_name jest alfanumeryczna, może zawierać maksymalnie 128 znaków, musi być unikatowa w wystąpieniu programu SQL Server i musi być zgodna z regułami dotyczącymi identyfikatorów bazy danych.
NA SERWERZE { | BAZA DANYCH }
Określa, czy sesja zdarzeń znajduje się w kontekście serwera lub bazy danych.
Azure SQL Database oraz SQL Database w Microsoft Fabric wymagają DATABASE.
DODAJ ZDARZENIE [event_module_guid]. event_package_name. event_name
Zdarzenie, które ma być skojarzone z sesją zdarzeń, gdzie:
- event_module_guid jest identyfikatorEM GUID modułu, który zawiera zdarzenie.
- event_package_name to pakiet zawierający zdarzenie.
- event_name jest nazwą zdarzenia.
Dostępne zdarzenia można znaleźć, wykonując następujące zapytanie:
SELECT o.name AS event_name,
o.description AS event_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'event'
ORDER BY event_name ASC;
SET { event_customizable_attribute = <wartość> [ ,... n ] }
Atrybuty możliwe do dostosowania dla zdarzenia.
Atrybuty możliwe do dostosowania dla danego zdarzenia można znaleźć, wykonując następujące zapytanie:
SELECT object_name,
name AS column_name,
type_name,
column_value,
description
FROM sys.dm_xe_object_columns
WHERE object_name = 'event-name-placeholder'
AND column_type = 'customizable'
ORDER BY column_name ASC;
ACTION ( { [event_module_guid].event_package_name. action_name [ ,... n ] })
Akcja do skojarzenia ze zdarzeniem, gdzie:
- event_module_guid to identyfikator GUID modułu, który zawiera akcję.
- event_package_name to pakiet zawierający akcję.
- action_name jest nazwą akcji.
Dostępne akcje można znaleźć, wykonując następujące zapytanie:
SELECT o.name AS action_name,
o.description AS action_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'action'
ORDER BY action_name ASC;
GDZIE <predicate_expression>
Określa wyrażenie predykatu używane do określania, czy zdarzenie ma być przetwarzane. Jeśli <predicate_expression> ma wartość true, zdarzenie jest przetwarzane dalej przez akcje i cele dla sesji. Jeśli <predicate_expression> ma wartość false, zdarzenie zostanie porzucone, unikając dodatkowej akcji i przetwarzania docelowego. Każde wyrażenie predykatu jest ograniczone do 3000 znaków.
event_field_name
Nazwa pola zdarzenia identyfikującego źródło predykatu.
Pola zdarzenia można znaleźć, wykonując następujące zapytanie:
SELECT oc.name AS field_name,
oc.type_name AS field_type,
oc.description AS field_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns AS oc
ON o.name = oc.object_name
AND
o.package_guid = oc.object_package_guid
WHERE o.object_type = 'event'
AND
o.name = 'event-name-placeholder'
AND
oc.column_type = 'data'
ORDER BY field_name ASC;
[event_module_guid]. event_package_name. predicate_source_name
Nazwa globalnego źródła predykatu, w którym:
- event_module_guid jest identyfikatorEM GUID modułu, który zawiera zdarzenie.
- event_package_name to pakiet zawierający obiekt źródłowy predykatu.
- predicate_source_name jest nazwą źródła predykatu.
Źródła predykatu można znaleźć, wykonując następujące zapytanie:
SELECT o.name AS predicate_source_name,
o.description AS predicate_source_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
ORDER BY predicate_source ASC;
[event_module_guid]. event_package_name. predicate_compare_name
Nazwa obiektu predykatu komparatora, gdzie:
- event_module_guid jest identyfikatorEM GUID modułu, który zawiera zdarzenie.
- event_package_name to pakiet zawierający obiekt komparatora predykatu.
- predicate_compare_name jest nazwą predykatu komparatora.
Komplikatory predykatu można znaleźć, wykonując następujące zapytanie:
SELECT o.name AS predicate_comparator_name,
o.description AS predicate_comparator_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
ORDER BY predicate_comparator ASC;
number
Dowolny typ liczbowy, który może być reprezentowany jako 64-bitowa liczba całkowita.
"ciąg"
Ciąg ANSI lub Unicode zgodnie z wymaganiami komparatora predykatu. Dla funkcji porównywania predykatu nie jest wykonywana niejawna konwersja typu ciągu. Przekazanie wartości nieoczekiwanego typu powoduje wystąpienie błędu.
ADD TARGET [event_module_guid]. event_package_name. target_name
To element docelowy, który ma być skojarzony z sesją zdarzeń, gdzie:
- event_module_guid to identyfikator GUID modułu, który zawiera element docelowy.
- event_package_name to pakiet zawierający element docelowy.
- target_name jest nazwą docelową.
Dostępne elementy docelowe można znaleźć, wykonując następujące zapytanie:
SELECT o.name AS target_name,
o.description AS target_description,
o.capabilities_desc,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'target'
ORDER BY target_name ASC;
Sesja zdarzeń może mieć zero, jeden lub wiele obiektów docelowych. Wszystkie obiekty docelowe dodane do sesji zdarzeń muszą być różne. Na przykład nie można dodać drugiego event_file elementu docelowego do sesji, która ma już element docelowy event_file .
Aby uzyskać więcej informacji, w tym przykłady użycia dla często używanych obiektów docelowych, zobacz Obiekty docelowe zdarzeń rozszerzonych.
SET { target_parameter_name = <wartość> [ , ... n ] }
Ustawia parametr docelowy.
Aby wyświetlić wszystkie parametry docelowe i ich opisy, wykonaj następujące zapytanie, zastępując target-name-placeholder ciąg nazwą docelową, taką jak event_file, ring_buffer, histogramitp.:
SELECT name AS target_parameter_name,
column_value AS default_value,
description
FROM sys.dm_xe_object_columns
WHERE column_type = 'customizable'
AND object_name = 'target-name-placeholder';
Ważne
Jeśli używasz docelowego buforu pierścienia, zalecamy ustawienie MAX_MEMORY parametru docelowego (różni się od parametru MAX_MEMORYsesji) na 1024 kilobajty (KB) lub mniej, aby uniknąć ewentualnego obcięcia danych wyjściowych XML.
Aby uzyskać więcej informacji o typach docelowych, zobacz Obiekty docelowe zdarzeń rozszerzonych.
WITH ( <event_session_options> [ ,... n ] )
Określa opcje do użycia z sesją zdarzeń.
MAX_MEMORY = rozmiar [ KB | MB ]
Określa maksymalną ilość pamięci do przydzielenia do sesji na potrzeby buforowania zdarzeń. Wartość domyślna to 4 MB. rozmiar jest liczbą całkowitą i może być wartością kilobajtową (KB) lub megabajtową (MB). Maksymalna ilość nie może przekroczyć 2 GB (2048 MB). Jednak używanie wartości pamięci w zakresie GB nie jest zalecane.
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }
Określa tryb przechowywania zdarzeń, który ma być używany do obsługi utraty zdarzeń.
ALLOW_SINGLE_EVENT_LOSS
Zdarzenie można utracić z sesji. Pojedyncze zdarzenie jest porzucane tylko wtedy, gdy wszystkie zdarzeń są pełne. Utrata pojedynczego zdarzenia, gdy zdarzeń są pełne, minimalizuje wpływ na wydajność, jednocześnie minimalizując utratę danych w przetworzonym strumieniu zdarzeń.
ALLOW_MULTIPLE_EVENT_LOSS
Pełne zdarzeń zawierające wiele zdarzeń można utracić z sesji. Liczba utraconych zdarzeń zależy od rozmiaru pamięci przydzielonego do sesji, partycjonowania pamięci i rozmiaru zdarzeń w buforze. Ta opcja zwykle pozwala uniknąć wpływu na wydajność serwera, gdy zdarzeń są szybko wypełniane, ale duża liczba zdarzeń może zostać utracona z sesji.
NO_EVENT_LOSS
Żadna utrata zdarzeń nie jest dozwolona. Ta opcja gwarantuje, że wszystkie zgłoszone zdarzenia zostaną zachowane. Użycie tej opcji wymusza, aby wszystkie zadania uruchamiające zdarzenia czekały, aż miejsce będzie dostępne w buforze zdarzeń. Użycie NO_EVENT_LOSS może powodować wykrywalne problemy z wydajnością, gdy sesja zdarzeń jest aktywna. Sesje użytkowników i zapytania mogą zostać wstrzymane podczas oczekiwania na opróżnienie z buforu zdarzeń.
Uwaga / Notatka
Dla celów plików zdarzeń w Azure SQL Database, bazie SQL w Microsoft Fabric oraz Azure SQL Managed Instance (z SQL Server 2025 lub polityką aktualizacjiAlways-up-to-date), od czerwca 2024 roku,
NO_EVENT_LOSSzachowuje się tak samo jakALLOW_SINGLE_EVENT_LOSS. Jeśli określiszNO_EVENT_LOSSwartość , zostanie zwrócone ostrzeżenie o identyfikatorze komunikatu 25665, ważność 10 i zostanie zwrócony komunikatThis target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead., a sesja zostanie utworzona.Ta zmiana pozwala uniknąć przekroczenia limitu czasu połączenia, opóźnień trybu failover i innych problemów, które mogą zmniejszyć dostępność bazy danych, gdy
NO_EVENT_LOSSsą używane z miejscami docelowymi plików zdarzeń w usłudze Azure Blob Storage.NO_EVENT_LOSSjest planowane usunięcie jako argument wspieranyEVENT_RETENTION_MODEw przyszłych aktualizacjach Azure SQL Database, bazy SQL w Microsoft Fabric oraz Azure SQL Managed Instance. Unikaj używania tej funkcji w nowych pracach programistycznych i zaplanuj modyfikowanie aplikacji, które obecnie korzystają z tej funkcji.
MAX_DISPATCH_LATENCY = { sekundy | NIESKOŃCZONY }
Określa czas buforowania zdarzeń w pamięci przed wysłaniem do celów sesji zdarzeń. Domyślnie ta wartość jest ustawiona na 30 sekund.
Sekund
SECONDSCzas oczekiwania w sekundach przed rozpoczęciem opróżniania do obiektów docelowych. sekundy to liczba całkowita. Minimalna wartość opóźnienia to 1 sekunda. Można jednak użyć wartości 0 do określenia nieskończonego opóźnienia.
NIESKOŃCZONY
Opróżnij do obiektów docelowych tylko wtedy, gdy są pełne lub gdy sesja zdarzenia zostanie zamknięta.
MAX_EVENT_SIZE = rozmiar [ KB | MB ]
Określa maksymalny dozwolony rozmiar zdarzeń. MAX_EVENT_SIZE należy ustawić tylko tak, aby zezwalać na pojedyncze zdarzenia większe niż MAX_MEMORY; ustawienie go na wartość mniejszą niż MAX_MEMORY zgłasza błąd. rozmiar jest liczbą całkowitą i może być wartością kilobajtową (KB) lub megabajtową (MB). Jeśli rozmiar jest określony w kilobajtach, minimalny dozwolony rozmiar wynosi 64 KB. Po ustawieniu MAX_EVENT_SIZE dwa rozmiaru są tworzone oprócz MAX_MEMORY, a łączna ilość pamięci używanej do buforowania zdarzeń wynosi MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { NIKT | PER_NODE | PER_CPU }
Określa koligację zdarzeń. Opcje inne niż NONE powodują więcej i większe zużycie pamięci, ale mogą uniknąć rywalizacji i zwiększyć wydajność na większych maszynach.
ŻADEN
Pojedynczy zestaw jest tworzony w wystąpieniu aparatu bazy danych.
PER_NODE
Dla każdego węzła NUMA jest tworzony zestaw.
PER_CPU
Dla każdego procesora CPU jest tworzony zestaw.
TRACK_CAUSALITY = { ON | WYŁ. }
Określa, czy przyczynowość jest śledzona. Jeśli ta opcja jest włączona, przyczynowość umożliwia skorelowanie powiązanych zdarzeń na różnych połączeniach serwera.
STARTUP_STATE = { ON | WYŁ. }
Określa, czy uruchamiać tę sesję zdarzeń automatycznie po uruchomieniu programu SQL Server.
Uwaga / Notatka
Jeśli STARTUP_STATE = ON, sesja zdarzeń rozpoczyna się, gdy aparat bazy danych zostanie zatrzymany, a następnie ponownie uruchomiony. Aby natychmiast rozpocząć sesję zdarzeń, użyj polecenia ALTER EVENT SESSION ... ON SERVER STATE = START.
ON
Sesja zdarzeń jest uruchamiana podczas uruchamiania.
OFF
Sesja zdarzeń nie jest uruchamiana podczas uruchamiania.
MAX_DURATION = { czas trwania { SEKUNDY | MINUTY | GODZINY | DNI } | NIEOGRANICZONE }
Dotyczy do: SQL Server 2025 (17.x)
NIEOGRANICZONY
Tworzy sesję zdarzeń, która jest uruchamiana przez czas nieokreślony, dopóki nie zostanie zatrzymana przy użyciu instrukcji
ALTER EVENT SESSION ... STATE = STOP. Jest to wartość domyślna, jeśliMAX_DURATIONnie zostanie określona.czas trwania SEKUNDY | MINUTY | GODZINY | DNI
Tworzy sesję zdarzeń, która zatrzymuje się automatycznie po upływie określonego czasu po rozpoczęciu sesji. Maksymalny obsługiwany czas trwania to 2147 483 sekundy lub 35 792 minut lub 596 godzin lub 24 dni.
Aby uzyskać więcej informacji, zobacz Sesje zdarzeń związane z czasem.
Uwagi
Aby uzyskać więcej informacji na temat argumentów sesji zdarzeń, zobacz Sesje zdarzeń rozszerzonych.
Kolejność pierwszeństwa dla operatorów logicznych to NOT (najwyższa), a następnie AND, a następnie OR.
Permissions
Program SQL Server i usługa Azure SQL Managed Instance wymagają CREATE ANY EVENT SESSION (wprowadzonego w programie SQL Server 2022) lub ALTER ANY EVENT SESSION uprawnienia.
Azure SQL Database oraz baza SQL w Microsoft Fabric wymagają CREATE ANY DATABASE EVENT SESSION uprawnień do bazy danych.
Wskazówka
Program SQL Server 2022 wprowadził bardziej szczegółowe uprawnienia dla zdarzeń rozszerzonych. Aby uzyskać więcej informacji, zobacz Blog: Nowe szczegółowe uprawnienia dla programu SQL Server 2022 i usługi Azure SQL w celu poprawy zgodności z funkcją PoLP.
Przykłady
A. Przykład programu SQL Server i usługi Azure SQL Managed Instance
W poniższym przykładzie pokazano, jak utworzyć sesję zdarzeń o nazwie test_session. W tym przykładzie dodano dwa zdarzenia i użyto event_file obiektu docelowego, ograniczając rozmiar każdego pliku do 256 MB i ograniczając liczbę zachowanych plików do 10.
IF EXISTS (SELECT 1
FROM sys.server_event_sessions
WHERE name = 'test_session')
DROP EVENT SESSION test_session ON SERVER;
CREATE EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.rpc_starting,
ADD EVENT sqlserver.sql_batch_starting,
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file
(
SET filename = N'C:\xe\test_session.xel',
max_file_size = 256,
max_rollover_files = 10
)
WITH (MAX_MEMORY = 4 MB);
B. Przykłady usługi Azure SQL Database
Na przykład przewodniki zapoznaj się z artykułem Tworzenie sesji zdarzeń z obiektem docelowym event_file w usłudze Azure Storage i Tworzenie sesji zdarzeń z ring_buffer docelowym w pamięci.
Przykłady kodu mogą się różnić w przypadku usług Azure SQL Database i SQL Managed Instance
Niektóre przykłady kodu Transact-SQL napisane dla programu SQL Server wymagają niewielkich zmian do uruchomienia w usłudze Azure SQL Database lub bazie danych SQL Database w usłudze Fabric. Jedną z kategorii takich przykładów kodu są widoki wykazu, których prefiksy nazw różnią się w zależności od typu aparatu bazy danych:
-
server_- prefiks programu SQL Server i usługi Azure SQL Managed Instance -
database_- prefiks dla usługi Azure SQL Database, bazy danych SQL w sieci szkieletowej i wystąpienia zarządzanego SQL
Usługa Azure SQL Database i baza danych SQL w usłudze Fabric obsługują tylko sesje zdarzeń o zakresie bazy danych. Program SQL Server Management Studio (SSMS) obsługuje sesje zdarzeń o zakresie bazy danych dla usługi Azure SQL Database: węzeł Zdarzenia rozszerzone zawierające sesje o zakresie bazy danych jest wyświetlany w ramach każdej bazy danych w Eksploratorze obiektów.
Usługa Azure SQL Managed Instance obsługuje zarówno sesje w zakresie bazy danych, jak i sesje o zakresie serwera. Program SSMS w pełni obsługuje sesje o zakresie serwera dla usługi SQL Managed Instance: węzeł Zdarzenia rozszerzone zawierające wszystkie sesje o zakresie serwera jest wyświetlany w folderze Zarządzania dla każdego wystąpienia zarządzanego w Eksploratorze obiektów.
Uwaga / Notatka
Sesje zdarzeń o zakresie serwera są zalecane dla usługi Azure SQL Managed Instance.
Sesje zdarzeń o zakresie bazy danych nie są wyświetlane w Eksploratorze obiektów w programie SSMS dla usługi Azure SQL Managed Instance. W wystąpieniu zarządzanym SQL sesje zdarzeń o zakresie bazy danych mogą być odpytywane i zarządzane tylko przy użyciu języka Transact-SQL.
Na ilustracji poniższa tabela zawiera listę i porównuje dwa podzestawy widoków wykazu. Podzestawy mają różne prefiksy nazw, ponieważ obsługują różne typy aparatu bazy danych.
| Nazwa w programie SQL Server i usłudze Azure SQL Managed Instance | Nazwa w usłudze Azure SQL Database, bazie danych SQL w sieci szkieletowej i usłudze Azure SQL Managed Instance |
|---|---|
sys.server_event_session_actionssys.server_event_session_eventssys.server_event_session_fieldssys.server_event_session_targetssys.server_event_sessions |
sys.database_event_session_actionssys.database_event_session_eventssys.database_event_session_fieldssys.database_event_session_targetssys.database_event_sessions |
Treści powiązane
- Tworzenie sesji zdarzeń z obiektem docelowym event_file w usłudze Azure Storage
- Obiekty docelowe zdarzeń rozszerzonych
- sys.server_event_sessions (Transact-SQL)
- sys.dm_xe_objects (Transact-SQL)
- sys.dm_xe_object_columns (Transact-SQL)
- SESJA WYDARZENIA ALTER (Transact-SQL)
- SESJA EVENT DROP (Transact-SQL)