Megosztás a következőn keresztül:


LÉTREHOZZ ESEMÉNYÜLÉST (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Létrehoz egy Bővített események munkamenetet, amely azonosítja a gyűjtendő eseményeket, az esemény-munkamenet céljait és az esemény-munkamenet beállításait.

Transact-SQL szintaxis konvenciók

Szemantika

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

Az esemény munkamenetének felhasználó által definiált neve. event_session_name alfanumerikus, legfeljebb 128 karakter hosszúságú lehet, egyedinek kell lennie az SQL Server egy példányán belül, és meg kell felelnie az adatbázis-azonosítókra vonatkozó szabályoknak.

ON { SZERVER | ADATBÁZIS }

Meghatározza, hogy az esemény munkamenete a kiszolgáló vagy az adatbázis környezetében van-e.

Azure SQL Database és SQL adatbázis a Microsoft Fabric-ben igényelnek DATABASE.

ESEMÉNY HOZZÁADÁSA [event_module_guid]. event_package_name. event_name

Az esemény munkamenethez társítandó esemény, ahol:

  • event_module_guid az eseményt tartalmazó modul GUID azonosítója.
  • event_package_name az eseményt tartalmazó csomag.
  • event_name az esemény neve.

Az elérhető események a következő lekérdezés végrehajtásával érhetők el:

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 = <érték> [ ,... n ] }

Testre szabható attribútumok az eseményhez.

Egy adott esemény testre szabható attribútumai az alábbi lekérdezés végrehajtásával találhatók:

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 ] })

Az eseményhez társítandó művelet, ahol:

  • event_module_guid a műveletet tartalmazó modul GUID azonosítója.
  • event_package_name a műveletet tartalmazó csomag.
  • action_name a művelet neve.

Az elérhető műveletek a következő lekérdezés végrehajtásával érhetők el:

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;

HOL <predicate_expression>

Megadja az esemény feldolgozásának meghatározásához használt predikátumkifejezést. Ha <predicate_expression> igaz, az eseményt a munkamenet műveletei és céljai tovább dolgozzák fel. Ha <predicate_expression> hamis, az esemény el lesz dobva, elkerülve a további műveleteket és a célfeldolgozást. Minden predikátumkifejezés legfeljebb 3000 karakter hosszúságú lehet.

event_field_name

A predikátum forrását azonosító eseménymező neve.

Az esemény mezői a következő lekérdezés végrehajtásával találhatók:

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

A globális predikátum forrásának neve, ahol:

  • event_module_guid az eseményt tartalmazó modul GUID azonosítója.
  • event_package_name a predikátum forrásobjektumát tartalmazó csomag.
  • predicate_source_name a predikátum forrásának neve.

A predikátumforrások a következő lekérdezés végrehajtásával találhatók:

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

A predikátum-összehasonlító objektum neve, ahol:

  • event_module_guid az eseményt tartalmazó modul GUID azonosítója.
  • event_package_name a predikátum-összehasonlító objektumot tartalmazó csomag.
  • predicate_compare_name a predikátum-összehasonlító neve.

A predikátum-összehasonlítók a következő lekérdezés végrehajtásával találhatók:

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;

szám

Bármely numerikus típus, amely 64 bites egész számként jeleníthető meg.

"sztring"

A predikátum-összehasonlító által megkövetelt ANSI- vagy Unicode-sztring. A predikátum-összehasonlító függvényekhez nem történik implicit sztringtípus-átalakítás. Egy váratlan típus értékének átadása hibát eredményez.

TARGET HOZZÁADÁSA [event_module_guid]. event_package_name. target_name

Az esemény munkamenethez társítandó cél, ahol:

  • event_module_guid a célmodul GUID azonosítója.
  • event_package_name a célcsomag.
  • target_name a célnév.

Az elérhető célok a következő lekérdezés végrehajtásával találhatók:

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;

Az esemény-munkamenetek nulla, egy vagy több célt tartalmazhatnak. Az esemény-munkamenethez hozzáadott összes célnak eltérőnek kell lennie. Nem adhat hozzá például egy második event_file célértéket egy olyan munkamenethez, amely már rendelkezik célként event_file .

További információkért, beleértve a gyakran használt célokra vonatkozó használati példákat, tekintse meg a Bővített események célokat.

SET { target_parameter_name = <value> [ , ... n ] }

Beállít egy célparamétert.

Az összes célparaméter és leírás megtekintéséhez hajtsa végre a következő lekérdezést, és cserélje le target-name-placeholder a célnévre, például event_file: , ring_buffer, histogramstb.:

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';

Fontos

Ha a gyűrűpuffer-célértéket használja, javasoljuk, hogy a MAX_MEMORYcélparamétert (amely eltér a MAX_MEMORYmunkamenet paraméterétől) 1024 kilobájtra (KB) vagy annál kisebbre állítsa, hogy elkerülje az XML-kimenet esetleges adatcsongását.

A céltípusokról további információt a Bővített események céljai című témakörben talál.

WITH ( <event_session_options> [ ,... n ] )

Megadja az esemény munkamenethez használni kívánt beállításokat.

MAX_MEMORY = méret [ KB | MB ]

Megadja a munkamenethez lefoglalandó memória maximális mennyiségét az eseménypuffereléshez. Az alapértelmezett érték 4 MB. a méret egy egész szám, amely lehet kilobájt (KB) vagy megabájt (MB) érték. A maximális mennyiség nem haladhatja meg a 2 GB-ot (2048 MB). A memóriaértékek GB-tartományban való használata azonban nem ajánlott.

EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }

Megadja az eseményvesztés kezeléséhez használandó eseménymegőrzési módot.

  • ALLOW_SINGLE_EVENT_LOSS

    Egy esemény elveszhet a munkamenetből. Egyetlen esemény csak akkor lesz elvetve, ha az összes eseménypuffer megtelt. Egyetlen esemény elvesztése, ha az eseménypufferek teljesek, minimalizálja a teljesítményre gyakorolt hatást, ugyanakkor minimalizálja a feldolgozott eseménystreamben lévő adatvesztést.

  • ALLOW_MULTIPLE_EVENT_LOSS

    A munkamenetből elveszhetnek a több eseményt tartalmazó teljes eseménypufferek. Az elveszett események száma a munkamenethez lefoglalt memóriamérettől, a memória particionálásától és a pufferben lévő események méretétől függ. Ez a beállítás általában elkerüli a kiszolgáló teljesítményre gyakorolt hatását, ha az eseménypufferek gyorsan megtelnek, de sok esemény elveszhet a munkamenetből.

  • NO_EVENT_LOSS

    Nem engedélyezett eseményvesztés. Ez a beállítás biztosítja, hogy az összes létrehozott esemény megmarad. Ennek a beállításnak a használata arra kényszeríti az eseményeket aktiváló összes tevékenységet, hogy várjon, amíg a hely rendelkezésre áll egy eseménypufferben. A NO_EVENT_LOSS használata észlelhető teljesítményproblémákat okozhat, amíg az esemény munkamenete aktív. Előfordulhat, hogy a felhasználói munkamenetek és a lekérdezések elakadnak, miközben arra várnak, hogy az eseményeket kiürítse a pufferből.

    Megjegyzés:

    Az eseményfájl célpontjai az Azure SQL Database-ben, SQL adatbázisban a Microsoft Fabric-ben és Azure SQL Managed Instance-ban (az SQL Server 2025 vagy az Always-up-to-dateupdate policy -val) 2024 NO_EVENT_LOSS júniusától ugyanúgy viselkednek, mint ALLOW_SINGLE_EVENT_LOSS. Ha megadja NO_EVENT_LOSS, a rendszer egy 25665-ös, 10-ös súlyosságú és üzenetet This target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead. tartalmazó figyelmeztetést ad vissza, és létrejön a munkamenet.

    Ez a módosítás elkerüli a kapcsolat időtúllépését, a feladatátvételi késéseket és egyéb problémákat, amelyek csökkenthetik az adatbázisok rendelkezésre állását, ha NO_EVENT_LOSS az Azure Blob Storage eseményfájl-céljaival használják.

    NO_EVENT_LOSS tervezik, hogy a jövőbeli Azure SQL Database, SQL Database a Microsoft Fabric-ben és Azure SQL Managed Instance frissítésekben támogatott EVENT_RETENTION_MODE argumentumként eltávolítják. Ne használja ezt a funkciót az új fejlesztési munkában, és tervezze meg a funkciót jelenleg használó alkalmazások módosítását.

MAX_DISPATCH_LATENCY = { másodperc | VÉGTELEN }

Azt az időtartamot adja meg, amellyel az események pufferelhetők a memóriában, mielőtt elküldené őket az esemény munkamenet-célokra. Alapértelmezés szerint ez az érték 30 másodpercre van állítva.

  • repetaSECONDS

    Másodpercek alatt meg kell várni, mielőtt elkezdené kiüríteni a puffereket a célokra. másodperc egész szám. A minimális késési érték 1 másodperc. A 0 azonban a VÉGTELEN késleltetés megadására használható.

  • VÉGTELEN

    A puffereket csak akkor ürítse ki a célokra, ha a pufferek megtelnek, vagy amikor az esemény munkamenete bezárul.

MAX_EVENT_SIZE = méret [ KB | MB ]

Meghatározza az események maximális megengedett méretét. MAX_EVENT_SIZE csak a MAX_MEMORY-nál nagyobb események engedélyezésére kell beállítani; ha MAX_MEMORY értéknél kisebbre állítja, hibát jelez. a méret egy egész szám, amely lehet kilobájt (KB) vagy megabájt (MB) érték. Ha a méret kilobájtban van megadva, a minimális megengedett méret 64 KB. Ha MAX_EVENT_SIZE van beállítva, a MAX_MEMORY mellett két méretpuffer jön létre, és az eseménypuffereléshez használt teljes memória MAX_MEMORY + 2 * MAX_EVENT_SIZE.

MEMORY_PARTITION_MODE = { NINCS | PER_NODE | PER_CPU }

Az eseménypufferek affinitását adja meg. Az egyéb NONE lehetőségek több puffert és nagyobb memóriahasználatot eredményeznek, de elkerülhetik a versengést és javíthatják a nagyobb gépek teljesítményét.

  • Egyik sem

    A rendszer egyetlen pufferkészletet hoz létre az adatbázismotor-példányon belül.

  • PER_NODE

    Minden NUMA-csomóponthoz létrejön egy pufferkészlet.

  • PER_CPU

    Minden processzorhoz létrejön egy pufferkészlet.

TRACK_CAUSALITY = { ON | KI }

Meghatározza, hogy az okozati összefüggés nyomon legyen-e követve. Ha engedélyezve van, az okozati összefüggés lehetővé teszi a különböző kiszolgálókapcsolatok kapcsolódó eseményeinek korrelációját.

STARTUP_STATE = { ON | KI }

Megadja, hogy az ESEMÉNY-munkamenet automatikusan elindul-e az SQL Server indításakor.

Megjegyzés:

Ha STARTUP_STATE = ON, akkor az esemény munkamenete az adatbázismotor leállásakor kezdődik, majd újraindul. Az esemény munkamenetének azonnali elindításához használja a következőt ALTER EVENT SESSION ... ON SERVER STATE = START: .

  • ON

    Az esemény munkamenete indításkor kezdődik.

  • OFF

    Az esemény munkamenete nem indul el indításkor.

MAX_DURATION = { időtartam { MÁSODPERC | PERC | ÓRA | DAYS } | KORLÁTLAN }

Vonatkozik: SQL Server 2025 (17.x)

  • KORLÁTLAN

    Létrehoz egy olyan esemény-munkamenetet, amely a kezdés után határozatlan ideig fut, amíg le nem állítja az ALTER EVENT SESSION ... STATE = STOP utasítás használatát. Ez az alapértelmezett érték, ha MAX_DURATION nincs megadva.

  • időtartam MÁSODPERC | PERC | ÓRA | NAPOK

    Olyan esemény-munkamenetet hoz létre, amely a munkamenet kezdete után automatikusan leáll. A maximális támogatott időtartam 2 147 483 másodperc, vagy 35 792 perc, 596 óra vagy 24 nap.

További információ: Időhöz kötött esemény munkamenetek.

Megjegyzések

Az esemény-munkamenet argumentumairól további információt a Bővített események munkamenetek című témakörben talál.

A logikai operátorok prioritási sorrendje (a NOT legmagasabb), majd a ANDkövetkező OR: .

Permissions

Az SQL Server és az Azure SQL Managed Instance használatához (az CREATE ANY EVENT SESSION SQL Server 2022-ben bevezetve) vagy ALTER ANY EVENT SESSION engedélyre van szükség.

Az Azure SQL Database és SQL adatbázis a Microsoft Fabric-ben megköveteli az adatbázisban található CREATE ANY DATABASE EVENT SESSION engedélyt.

Jótanács

Az SQL Server 2022 részletesebb engedélyeket vezetett be a kiterjesztett eseményekhez. További információ : Blog: Az SQL Server 2022 és az Azure SQL új részletes engedélyei a PoLP betartásának javítása érdekében.

Példák

A. SQL Server- és Azure SQL Managed Instance-példa

Az alábbi példa bemutatja, hogyan hozhat létre esemény-munkamenetet.test_session Ez a példa két eseményt ad hozzá, és a célértéket event_file használja, az egyes fájlok méretét 256 MB-ra korlátozza, a megőrzött fájlok számát pedig 10-re korlátozza.

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-példák

Útmutatók például: Esemény munkamenet létrehozása event_file-tárolóval az Azure Storage-ban , és esemény-munkamenet létrehozása ring_buffer tárolóval a memóriában.

A példakódok eltérhetnek az Azure SQL Database és a felügyelt SQL-példányok esetében

Az SQL Serverhez írt néhány Transact-SQL kód példájának kis módosításokat kell végrehajtania az Azure SQL Database-ben vagy az SQL Database-ben a Fabricben. Az ilyen példakódok egyik kategóriája olyan katalógusnézeteket tartalmaz, amelyek névelőtagjai az adatbázismotor típusától függően eltérnek:

  • server_ - előtag az SQL Serverhez és a felügyelt Azure SQL-példányhoz
  • database_ - előtag az Azure SQL Database-hez, az SQL Database-hez a Fabricben és a felügyelt SQL-példányhoz

Az Azure SQL Database és az SQL Database in Fabric csak az adatbázis-hatókörű esemény munkameneteket támogatja. Az SQL Server Management Studio (SSMS) támogatja az Azure SQL Database adatbázis-hatókörű esemény-munkameneteit: az Object Explorerben minden adatbázis alatt megjelenik egy adatbázis-hatókörű munkameneteket tartalmazó Bővített események csomópont.

A felügyelt Azure SQL-példány támogatja az adatbázis-hatókörű munkameneteket és a kiszolgálói hatókörű munkameneteket is. Az SSMS teljes mértékben támogatja a felügyelt SQL-példányok kiszolgálóhatókörű munkameneteit: az Object Explorerben minden felügyelt példány felügyeleti mappájában megjelenik egy kiterjesztett eseménycsomópont, amely tartalmazza az összes kiszolgálóhatókörű munkamenetet.

Megjegyzés:

A felügyelt Azure SQL-példányhoz kiszolgálói hatókörű esemény-munkamenetek ajánlottak.

Az adatbázis-hatókörű esemény munkamenetek nem jelennek meg az Object Explorerben az Azure SQL Managed Instance SSMS-ben. Felügyelt SQL-példányokon az adatbázis-hatókörű esemény munkamenetek csak a Transact-SQL-vel kérdezhetők le és kezelhetők.

Illusztrációként az alábbi táblázat felsorolja és összehasonlítja a katalógusnézetek két részhalmazát. Az alhalmazok eltérő névelőtagokkal rendelkeznek, mivel különböző adatbázismotor-típusokat támogatnak.

Név az SQL Serverben és a felügyelt Azure SQL-példányban Név az Azure SQL Database-ben, az SQL Database in Fabricben és a felügyelt Azure SQL-példányban
sys.server_event_session_actions
sys.server_event_session_events
sys.server_event_session_fields
sys.server_event_session_targets
sys.server_event_sessions
sys.database_event_session_actions
sys.database_event_session_events
sys.database_event_session_fields
sys.database_event_session_targets
sys.database_event_sessions