Sdílet prostřednictvím


VYTVOŘIT RELACI UDÁLOSTI (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vytvoří relaci rozšířených událostí, která identifikuje události, které se mají shromažďovat, cíle relace událostí a možnosti relace události.

Transact-SQL konvence syntaxe

Syntaxe

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

Uživatelem definovaný název relace události. event_session_name je alfanumerické, může mít maximálně 128 znaků, musí být jedinečné v rámci instance SQL Serveru a musí splňovat pravidla pro identifikátory databáze.

ON { SERVER | DATABÁZE }

Určuje, zda je relace událostí v kontextu serveru nebo databáze.

Azure SQL Database a SQL database v Microsoft Fabric vyžadují DATABASE.

ADD EVENT [event_module_guid]. event_package_name. event_name

Událost, která se má přidružit k relaci události, kde:

  • event_module_guid je identifikátor GUID modulu, který obsahuje událost.
  • event_package_name je balíček, který obsahuje událost.
  • event_name je název události.

Dostupné události lze najít spuštěním následujícího dotazu:

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 = <hodnota> [ ,... n ] }

Přizpůsobitelné atributy události

Přizpůsobitelné atributy pro danou událost lze najít spuštěním následujícího dotazu:

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

Akce, která se má přidružit k události, kde:

  • event_module_guid je identifikátor GUID modulu, který obsahuje akci.
  • event_package_name je balíček, který obsahuje akci.
  • action_name je název akce.

Dostupné akce lze najít spuštěním následujícího dotazu:

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;

KDE <predicate_expression>

Určuje predikát výraz použitý k určení, jestli má být událost zpracována. Pokud <je predicate_expression> pravdivý, událost se dále zpracuje akcemi a cíli relace. Pokud <je predicate_expression> false, událost se zahodí, zabrání další akci a cílovému zpracování. Každý predikátový výraz je omezen na 3 000 znaků.

event_field_name

Název pole události, které identifikuje zdroj predikátu.

Pole události lze najít spuštěním následujícího dotazu:

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

Název globálního predikátu, kde:

  • event_module_guid je identifikátor GUID modulu, který obsahuje událost.
  • event_package_name je balíček, který obsahuje zdrojový objekt predikátu.
  • predicate_source_name je název predikátu.

Predikát zdroje lze najít spuštěním následujícího dotazu:

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

Název srovnávacího objektu predikátu, kde:

  • event_module_guid je identifikátor GUID modulu, který obsahuje událost.
  • event_package_name je balíček, který obsahuje porovnávací objekt predikátu.
  • predicate_compare_name je název porovnávače predikátu.

Srovnávací predikát lze najít spuštěním následujícího dotazu:

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

Libovolný číselný typ, který může být reprezentován jako 64bitové celé číslo.

Řetězec

Buď řetězec ANSI nebo Unicode vyžadovaný srovnávacím predikátem. Pro porovnávané funkce predikátu se neprovádí žádný implicitní převod typu řetězce. Předáním hodnoty neočekávaného typu dojde k chybě.

ADD TARGET [event_module_guid]. event_package_name. target_name

Je cílem přidružit relaci události, kde:

  • event_module_guid je identifikátor GUID modulu, který obsahuje cíl.
  • event_package_name je balíček, který obsahuje cíl.
  • target_name je cílový název.

Dostupné cíle najdete spuštěním následujícího dotazu:

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;

Relace události může mít nula, jednu nebo mnoho cílů. Všechny cíle přidané do relace událostí se musí lišit. Nemůžete například přidat druhý event_file cíl do relace, která už má event_file cíl.

Další informace, včetně příkladů použití pro běžně používané cíle, naleznete v tématu Cíle rozšířených událostí.

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

Nastaví cílový parametr.

Pokud chcete zobrazit všechny cílové parametry a jejich popisy, spusťte následující dotaz a nahraďte target-name-placeholder ho názvem cíle, například event_file, ring_buffer, histogramatd.:

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

Důležité

Pokud používáte cíl vyrovnávací paměti okruhu, doporučujeme nastavit MAX_MEMORYcílový parametr (odlišný od parametru MAX_MEMORYrelace ) na 1 024 kilobajtů (KB) nebo méně, abyste zabránili možnému zkrácení dat výstupu XML.

Další informace ocílových

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

Určuje možnosti, které se mají použít s relací událostí.

MAX_MEMORY = velikost [ kB | MB ]

Určuje maximální velikost paměti, která se má přidělit relaci pro ukládání událostí do vyrovnávací paměti. Výchozí hodnota je 4 MB. velikost je celé číslo a může to být kilobajt (KB) nebo megabajt (MB). Maximální velikost nesmí překročit 2 GB (2 048 MB). Použití hodnot paměti v rozsahu GB se ale nedoporučuje.

EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }

Určuje režim uchovávání událostí, který se má použít pro zpracování ztráty událostí.

  • ALLOW_SINGLE_EVENT_LOSS

    Událost může být ztracena z relace. Jedna událost se zahodí jenom v případě, že jsou všechny vyrovnávací paměti událostí plné. Ztráta jedné události, když jsou vyrovnávací paměti událostí plné, minimalizuje dopad na výkon a zároveň minimalizuje ztrátu dat ve zpracovaném streamu událostí.

  • ALLOW_MULTIPLE_EVENT_LOSS

    Úplné vyrovnávací paměti událostí obsahující více událostí je možné z relace ztratit. Počet ztracených událostí závisí na velikosti paměti přidělené relaci, dělení paměti a velikosti událostí v vyrovnávací paměti. Tato možnost obecně zabraňuje dopadu na výkon na server, když jsou rychle vyplněny vyrovnávací paměti událostí, ale z relace může dojít ke ztrátě velkého počtu událostí.

  • NO_EVENT_LOSS

    Není povolena žádná ztráta událostí. Tato možnost zajišťuje zachování všech vyvolaných událostí. Pomocí této možnosti vynutíte všechny úkoly, které aktivuje události, aby čekaly, až bude v vyrovnávací paměti událostí k dispozici mezera. Použití NO_EVENT_LOSS může způsobit zjištěné problémy s výkonem, když je relace událostí aktivní. Uživatelské relace a dotazy se můžou při čekání na vyprázdnění událostí z vyrovnávací paměti zastavit.

    Poznámka:

    Pro cíle souborů událostí v Azure SQL Database, SQL databázi v Microsoft Fabric a Azure SQL Managed Instance (s politikou aktualizaceSQL Server 2025 nebo Always-up-to-date), se od června 2024 NO_EVENT_LOSS chová stejně jako ALLOW_SINGLE_EVENT_LOSS. Pokud zadáte NO_EVENT_LOSSupozornění s ID zprávy 25665, závažnost 10 a vrátí se zpráva This target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead. a relace se vytvoří.

    Tato změna zabraňuje vypršení časového limitu připojení, zpoždění převzetí služeb při selhání a dalším problémům, které můžou snížit dostupnost databáze při NO_EVENT_LOSS použití s cíli souborů událostí v Úložišti objektů blob v Azure.

    NO_EVENT_LOSS je plánováno k odstranění jako podporovaný EVENT_RETENTION_MODE argument v budoucích aktualizacích Azure SQL Database, SQL databáze v Microsoft Fabric a Azure SQL Managed Instance. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají.

MAX_DISPATCH_LATENCY = { sekund SEKUNDY | INFINITE }

Určuje dobu, po kterou se události ukládají do vyrovnávací paměti před odesláním do cílů relace událostí. Ve výchozím nastavení je tato hodnota nastavená na 30 sekund.

  • sekundySECONDS

    Doba, v sekundách, počkat, než začnete vyprázdnit vyrovnávací paměti cílům. sekundy je celé číslo. Minimální hodnota latence je 1 sekunda. K určení latence INFINITE však lze použít hodnotu 0.

  • NEKONEČNÝ

    Vyprázdnění vyrovnávacích pamětí cílům pouze v případě, že jsou vyrovnávací paměti plné nebo když se relace událostí zavře.

MAX_EVENT_SIZE = velikost [ kB | MB ]

Určuje maximální povolenou velikost událostí. MAX_EVENT_SIZE by měly být nastaveny pouze tak, aby povolily jednotlivé události větší než MAX_MEMORY; nastavení na méně než MAX_MEMORY vyvolá chybu. velikost je celé číslo a může to být kilobajt (KB) nebo megabajt (MB). Pokud je velikost zadaná v kilobajtech, minimální povolená velikost je 64 kB. Při nastavení MAX_EVENT_SIZE se kromě MAX_MEMORY vytvoří dvě vyrovnávací paměti a celková paměť používaná pro ukládání událostí do vyrovnávací paměti je MAX_MEMORY + 2 * MAX_EVENT_SIZE.

MEMORY_PARTITION_MODE = { NIKDO | PER_NODE | PER_CPU }

Určuje spřažení vyrovnávacích pamětí událostí. Jiné možnosti než NONE mají za následek více vyrovnávacích pamětí a vyšší spotřebu paměti, ale mohou se vyhnout kolizím a zlepšit výkon na větších počítačích.

  • ŽÁDNÝ

    V instanci databázového stroje se vytvoří jedna sada vyrovnávacích pamětí.

  • PER_NODE

    Pro každý uzel NUMA se vytvoří sada vyrovnávacích pamětí.

  • PER_CPU

    Pro každý procesor se vytvoří sada vyrovnávacích pamětí.

TRACK_CAUSALITY = { ON | VYPNUTO }

Určuje, zda je sledována kauzalita nebo ne. Pokud je tato možnost povolená, kauzalita umožňuje korelaci souvisejících událostí na různých serverových připojeních.

STARTUP_STATE = { ON | VYPNUTO }

Určuje, jestli se má tato relace událostí spustit automaticky při spuštění SQL Serveru.

Poznámka:

Pokud STARTUP_STATE = ONse relace událostí spustí, když je databázový stroj zastaven a restartuje se. Chcete-li zahájit relaci událostí okamžitě, použijte ALTER EVENT SESSION ... ON SERVER STATE = START.

  • ON

    Relace událostí se spustí při spuštění.

  • OFF

    Relace událostí není spuštěna při spuštění.

MAX_DURATION = { doba trvání { SEKUNDY | MINUTY | HODINY | DAYS } | UNLIMITED }

Platí na: SQL Server 2025 (17.x)

  • NEOMEZENÝ

    Vytvoří relaci událostí, která se spustí po neomezenou dobu, dokud se ALTER EVENT SESSION ... STATE = STOP příkaz nezastaví. Toto je výchozí hodnota, pokud MAX_DURATION není zadána.

  • doba trvání SEKUNDY | MINUTY | HODINY | DNY

    Vytvoří relaci události, která se zastaví automaticky po uplynutí zadaného času po spuštění relace. Maximální podporovaná doba trvání je 2 147 483 sekund nebo 35 792 minut nebo 596 hodin nebo 24 dní.

Další informace naleznete v tématu Relace událostí vázané na čas.

Poznámky

Další informace oargumentch

Pořadí priorit logických operátorů je NOT (nejvyšší), následované AND, následované OR.

Povolení

SQL Server a Azure SQL Managed Instance vyžadují CREATE ANY EVENT SESSION (zavedený v SQL Serveru 2022) nebo ALTER ANY EVENT SESSION oprávnění.

Azure SQL databáze a SQL databáze v Microsoft Fabric vyžadují CREATE ANY DATABASE EVENT SESSION oprávnění v databázi.

Návod

SQL Server 2022 zavedl podrobnější oprávnění pro rozšířené události. Další informace najdete v tématu Blog: Nová podrobná oprávnění pro SQL Server 2022 a Azure SQL pro zlepšení dodržování poLP.

Examples

A. Příklad SQL Serveru a azure SQL Managed Instance

Následující příklad ukazuje, jak vytvořit relaci události s názvem test_session. Tento příklad přidá dvě události a použije event_file cíl, omezí velikost každého souboru na 256 MB a omezí uchovávaný počet souborů na 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. Příklady služby Azure SQL Database

Například názorné postupy najdete v tématu Vytvoření relace událostí s cílem event_file ve službě Azure Storage a vytvoření relace událostí s ring_buffer cílem v paměti.

Příklady kódu se můžou lišit pro Službu Azure SQL Database a spravovanou instanci SQL.

Některé Transact-SQL příklady kódu napsané pro SQL Server potřebují malé změny ke spuštění ve službě Azure SQL Database nebo v databázi SQL v prostředcích infrastruktury. Jedna kategorie takových příkladů kódu zahrnuje zobrazení katalogu, jejichž předpony názvů se liší v závislosti na typu databázového stroje:

  • server_ - předpona pro SQL Server a spravovanou instanci Azure SQL
  • database_ - předpona pro Azure SQL Database, databázi SQL v prostředcích infrastruktury a službu SQL Managed Instance

Azure SQL Database a databáze SQL v prostředcích infrastruktury podporují pouze relace událostí v oboru databáze. SQL Server Management Studio (SSMS) podporuje relace událostí v oboru databáze pro Azure SQL Database: Uzel rozšířených událostí obsahující relace s oborem databáze se zobrazí v rámci každé databáze v Průzkumníku objektů.

Spravovaná instance Azure SQL podporuje relace s oborem databáze i relace s oborem serveru. SSMS plně podporuje relace s vymezeným serverem pro službu SQL Managed Instance: uzel Rozšířených událostí obsahující všechny relace s oborem serveru se zobrazí ve složce Správa pro každou spravovanou instanci v Průzkumníku objektů.

Poznámka:

Relace událostí v oboru serveru se doporučují pro spravovanou instanci Azure SQL.

Relace událostí v oboru databáze se nezobrazují v Průzkumníku objektů v SSMS pro spravovanou instanci Azure SQL. Ve spravované instanci SQL se relace událostí v oboru databáze dají dotazovat a spravovat pouze pomocí jazyka Transact-SQL.

Na obrázku uvádí následující tabulka a porovnává dvě podmnožina zobrazení katalogu. Podmnožina má různé předpony názvů, protože podporují různé typy databázových strojů.

Název v SQL Serveru a azure SQL Managed Instance Název ve službě Azure SQL Database, databáze SQL v prostředcích infrastruktury a Azure SQL Managed Instance
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