Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Förhandsversion av Microsoft Fabric
Skapar en extended events-session som identifierar de händelser som ska samlas in, målen för händelsesessionen och alternativen för händelsesessionen.
Transact-SQL syntaxkonventioner
Syntax
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
Det användardefinierade namnet på händelsesessionen. event_session_name är alfanumeriskt, kan vara upp till 128 tecken, måste vara unikt i en instans av SQL Server och måste följa reglerna för databasidentifierare.
PÅ { SERVER | DATABAS }
Avgör om händelsesessionen finns i kontexten för servern eller databasen.
Azure SQL Database och SQL Database i Microsoft Fabric Preview kräver DATABASE.
LÄGG TILL HÄNDELSE [event_module_guid]. event_package_name. event_name
Händelsen som ska associeras med händelsesessionen, där:
- event_module_guid är GUID för modulen som innehåller händelsen.
- event_package_name är paketet som innehåller händelsen.
- event_name är händelsenamnet.
Tillgängliga händelser kan hittas genom att köra följande fråga:
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 = <value> [ ,... n ] }
Anpassningsbara attribut för händelsen.
Anpassningsbara attribut för en viss händelse kan hittas genom att köra följande fråga:
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 ] })
Åtgärden som ska associeras med händelsen, där:
- event_module_guid är GUID för modulen som innehåller åtgärden.
- event_package_name är paketet som innehåller åtgärden.
- action_name är namnet på åtgärden.
Tillgängliga åtgärder kan hittas genom att köra följande fråga:
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;
WHERE <predicate_expression>
Anger predikatuttrycket som används för att avgöra om en händelse ska bearbetas. Om <predicate_expression> är sant bearbetas händelsen ytterligare av åtgärderna och målen för sessionen. Om <predicate_expression> är falskt tas händelsen bort och ytterligare åtgärd och målbearbetning undviks. Varje predikatuttryck är begränsat till 3 000 tecken.
event_field_name
Namnet på det händelsefält som identifierar predikatkällan.
Fälten för en händelse kan hittas genom att köra följande fråga:
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
Namnet på den globala predikatkällan där:
- event_module_guid är GUID för modulen som innehåller händelsen.
- event_package_name är paketet som innehåller predikatkällans objekt.
- predicate_source_name är namnet på predikatkällan.
Predikatkällor kan hittas genom att köra följande fråga:
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
Namnet på predikatets jämförelseobjekt, där:
- event_module_guid är GUID för modulen som innehåller händelsen.
- event_package_name är paketet som innehåller jämförelseobjektet för predikat.
- predicate_compare_name är predikatjäxets jämförelsenamn.
Predikatjänare kan hittas genom att köra följande fråga:
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
Alla numeriska typer som kan representeras som ett 64-bitars heltal.
"sträng"
Antingen en ANSI- eller Unicode-sträng som krävs av predikatjäxatorn. Ingen implicit strängtypkonvertering utförs för jämförelsefunktionerna för predikat. Om värdet för en oväntad typ skickas resulterar det i ett fel.
LÄGG TILL MÅL [event_module_guid]. event_package_name. target_name
Är målet att associera med händelsesessionen, där:
- event_module_guid är GUID för modulen som innehåller målet.
- event_package_name är paketet som innehåller målet.
- target_name är målnamnet.
Tillgängliga mål kan hittas genom att köra följande fråga:
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;
En händelsesession kan ha noll, ett eller flera mål. Alla mål som läggs till i en händelsesession måste vara olika. Du kan till exempel inte lägga till ett andra event_file mål i en session som redan har ett event_file mål.
Mer information, inklusive användningsexempel för vanliga mål, finns i Extended Events-mål.
SET { target_parameter_name = <value> [ , ... n ] }
Anger en målparameter.
Om du vill se alla målparametrar och deras beskrivningar kör du följande fråga och ersätter target-name-placeholder med målnamnet, till exempel event_file, ring_buffer, histogramosv.:
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';
Viktigt!
Om du använder ringbuffertmålet rekommenderar vi att du anger MAX_MEMORY målparametern (skiljer sig från MAX_MEMORY sessionsparametern) till 1 024 kilobyte (KB) eller mindre för att undvika eventuell datatrunkering av XML-utdata.
Mer information om måltyper finns i Extended Events-mål.
MED ( <event_session_options> [ ,... n ] )
Anger vilka alternativ som ska användas med händelsesessionen.
MAX_MEMORY = storlek [ KB | MB ]
Anger den maximala mängden minne som ska allokeras till sessionen för händelsebuffertning. Standardvärdet är 4 MB. storleken är ett heltal och kan vara ett kilobyte (KB) eller ett MB-värde. Det maximala beloppet får inte överstiga 2 GB (2 048 MB). Det rekommenderas dock inte att du använder minnesvärden i GB-intervallet.
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }
Anger det händelsekvarhållningsläge som ska användas för hantering av händelseförlust.
ALLOW_SINGLE_EVENT_LOSS
En händelse kan gå förlorad från sessionen. En enskild händelse tas bara bort när alla händelsebuffertar är fulla. Om du förlorar en enskild händelse när händelsebuffertar är fulla minimeras prestandapåverkan samtidigt som dataförlusten i den bearbetade händelseströmmen minimeras.
ALLOW_MULTIPLE_EVENT_LOSS
Fullständiga händelsebuffertar som innehåller flera händelser kan gå förlorade från sessionen. Antalet förlorade händelser beror på den minnesstorlek som allokerats till sessionen, partitioneringen av minnet och storleken på händelserna i bufferten. Det här alternativet undviker vanligtvis prestandapåverkan på servern när händelsebuffertar fylls snabbt, men ett stort antal händelser kan gå förlorade från sessionen.
NO_EVENT_LOSS
Ingen händelseförlust tillåts. Det här alternativet säkerställer att alla händelser som genereras behålls. Med det här alternativet tvingar du alla uppgifter som utlöser händelser att vänta tills utrymme är tillgängligt i en händelsebuffert. Om du använder NO_EVENT_LOSS kan det orsaka identifieringsbara prestandaproblem när händelsesessionen är aktiv. Användarsessioner och frågor kan stoppas i väntan på att händelser ska rensas från bufferten.
Anmärkning
För händelsefilens mål i Azure SQL Database, SQL Database i Microsoft Fabric Preview och Azure SQL Managed Instance (med SQL Server 2025 eller Always-up-to-dateupdate policy) fungerar från och med juni 2024
NO_EVENT_LOSSsamma somALLOW_SINGLE_EVENT_LOSS. Om du angerNO_EVENT_LOSSreturneras en varning med meddelande-ID 25665, allvarlighetsgrad 10 och meddelandetThis target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead.och sessionen skapas.Den här ändringen undviker tidsgränser för anslutningar, redundansfördröjningar och andra problem som kan minska databastillgängligheten när
NO_EVENT_LOSSden används med händelsefilmål i Azure Blob Storage.NO_EVENT_LOSSplaneras att tas bort som ett argument som stödsEVENT_RETENTION_MODEi framtida uppdateringar av Azure SQL Database, SQL Database i Microsoft Fabric Preview och Azure SQL Managed Instance. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.
MAX_DISPATCH_LATENCY = { sekunder | INFINITE }
Anger hur lång tid händelser buffrar i minnet innan de skickas till händelsesessionsmål. Som standard är det här värdet inställt på 30 sekunder.
Sekunder
SECONDSTiden, i sekunder, att vänta innan du börjar spola buffertar till mål. sekunder är ett heltal. Minsta svarstidsvärde är 1 sekund. 0 kan dock användas för att ange OÄNDLIG svarstid.
OÄNDLIG
Töm buffertar till mål endast när buffertarna är fulla eller när händelsesessionen stängs.
MAX_EVENT_SIZE = storlek [ KB | MB ]
Anger den maximala tillåtna storleken för händelser. MAX_EVENT_SIZE bör endast anges för att tillåta enskilda händelser som är större än MAX_MEMORY. om du ställer in den på mindre än MAX_MEMORY uppstår ett fel. storleken är ett heltal och kan vara ett kilobyte (KB) eller ett MB-värde. Om storleken anges i kilobyte är den minsta tillåtna storleken 64 kB. När MAX_EVENT_SIZE har angetts skapas två buffertar av storlek utöver MAX_MEMORY, och det totala minnet som används för händelsebuffertning är MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU }
Anger tillhörigheten för händelsebuffertar. Andra alternativ än NONE resulterar i fler buffertar och högre minnesförbrukning, men kan undvika konkurrens och förbättra prestanda på större datorer.
INGEN
En enda uppsättning buffertar skapas i database engine-instansen.
PER_NODE
En uppsättning buffertar skapas för varje NUMA-nod.
PER_CPU
En uppsättning buffertar skapas för varje PROCESSOR.
TRACK_CAUSALITY = { ON | AV }
Anger om orsakssamband spåras eller inte. Om detta är aktiverat kan relaterade händelser på olika serveranslutningar korreleras tillsammans.
STARTUP_STATE = { ON | AV }
Anger om den här händelsesessionen ska startas automatiskt när SQL Server startas eller inte.
Anmärkning
Om STARTUP_STATE = ONstartar händelsesessionen när databasmotorn stoppas och sedan startas om. Om du vill starta händelsesessionen omedelbart använder du ALTER EVENT SESSION ... ON SERVER STATE = START.
ON
Händelsesessionen startas vid start.
OFF
Händelsesessionen startas inte vid start.
MAX_DURATION = { tidsvaraktighet { SEKUNDER | MINUTER | TIMMAR | DAYS } | OBEGRÄNSAT }
Gäller för: FÖRHANDSVERSION AV SQL Server 2025 (17.x)
OBEGRÄNSAD
Skapar en händelsesession som körs på obestämd tid när den har startats tills den har stoppats med instruktionen
ALTER EVENT SESSION ... STATE = STOP. Detta är standardvärdet omMAX_DURATIONinte har angetts.tidsvaraktighet SEKUNDER | MINUTER | TIMMAR | DAGAR
Skapar en händelsesession som stoppas automatiskt efter den angivna tiden som förflutit efter sessionens start. Den maximala varaktigheten som stöds är 2 147 483 sekunder eller 35 792 minuter, 596 timmar eller 24 dagar.
Mer information finns i Tidsbundna händelsesessioner.
Anmärkningar
Mer information om argument för händelsesessioner finns i Sessioner för utökade händelser.
Prioritetsordningen för de logiska operatorerna är NOT (högsta), följt av AND, följt av OR.
Permissions
SQL Server och Azure SQL Managed Instance kräver CREATE ANY EVENT SESSION (introducerades i SQL Server 2022) eller ALTER ANY EVENT SESSION behörighet.
Azure SQL Database och SQL Database i Microsoft Fabric Preview kräver behörigheten CREATE ANY DATABASE EVENT SESSION i databasen.
Tips/Råd
SQL Server 2022 introducerade mer detaljerade behörigheter för utökade händelser. Mer information finns i Blogg: Nya detaljerade behörigheter för SQL Server 2022 och Azure SQL för att förbättra efterlevnaden med PoLP.
Examples
A. Exempel på SQL Server och Azure SQL Managed Instance
I följande exempel visas hur du skapar en händelsesession med namnet test_session. Det här exemplet lägger till två händelser och använder event_file målet, vilket begränsar storleken på varje fil till 256 MB och begränsar det behållna antalet filer till 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. Azure SQL Database-exempel
Exempel på genomgångar finns i Skapa en händelsesession med ett event_file mål i Azure Storage och Skapa en händelsesession med ett ring_buffer mål i minnet.
Kodexemplen kan skilja sig åt för Azure SQL Database och SQL Managed Instance
Vissa Transact-SQL kodexempel som skrivits för SQL Server behöver små ändringar för att köras i Azure SQL Database eller SQL Database i Fabric. En kategori av sådana kodexempel omfattar katalogvyer vars namnprefix skiljer sig beroende på databasmotortypen:
-
server_- prefix för SQL Server och Azure SQL Managed Instance -
database_- prefix för Azure SQL Database, SQL Database i Fabric och SQL Managed Instance
Azure SQL Database och SQL Database i Fabric stöder endast databasomfattande händelsesessioner. SQL Server Management Studio (SSMS) stöder databasomfattande händelsesessioner för Azure SQL Database: en nod för utökade händelser som innehåller databasomfattande sessioner visas under varje databas i Object Explorer.
Azure SQL Managed Instance stöder både databasomfattande sessioner och sessioner med serveromfattning. SSMS stöder fullständigt serveromfattande sessioner för SQL Managed Instance: en nod för utökade händelser som innehåller alla serveromfattande sessioner visas under mappen Hantering för varje hanterad instans i Object Explorer.
Anmärkning
Händelsesessioner på servernivå rekommenderas för Azure SQL Managed Instance.
Databasomfattande händelsesessioner visas inte i Object Explorer i SSMS för Azure SQL Managed Instance. På en SQL-hanterad instans kan databasomfattande händelsesessioner bara frågas och hanteras med Transact-SQL.
Som illustration listar och jämför följande tabell två delmängder av katalogvyer. Underuppsättningarna har olika namnprefix eftersom de stöder olika databasmotortyper.
| Namn i SQL Server och Azure SQL Managed Instance | Namn i Azure SQL Database, SQL Database i Fabric och 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 |