Sdílet prostřednictvím


Rozšířené události v Azure SQL

Platí pro:Azure SQL DatabaseAzure SQL Managed InstanceSQL database ve Fabric

Úvod do rozšířených událostí najdete tady:

Sady funkcí, funkce a scénáře použití rozšířených událostí ve službě Azure SQL Database, sql database in Fabric a Azure SQL Managed Instance jsou podobné tomu, co je dostupné na SQL Serveru. Hlavní rozdíly:

  • V Azure SQL Database, SQL databázi ve Fabricu a Azure SQL Managed Instance event_file cíl vždy používá objekty blob ve službě Azure Storage místo souborů na disku.
    • V SQL Serveru event_file může cíl používat soubory na disku nebo bloby v Azure úložišti.
  • V Azure SQL Database a databázi SQL v prostředcích infrastruktury jsou relace událostí vždy vymezeny oborem databáze. To znamená, že:
    • Relace událostí v jedné databázi nemůže shromažďovat události z jiné databáze.
    • K události musí dojít v kontextu uživatelské databáze, která se má zahrnout do relace.
  • Ve službě Azure SQL Managed Instance můžete vytvořit relace událostí v oboru serveru i databáze. Pro většinu scénářů doporučujeme používat relace událostí v oboru serveru.

Začínáme

Existují dva příklady návodů, které vám pomůžou rychle začít s rozšířenými událostmi:

Rozšířené události lze použít k monitorování replik jen pro čtení. Další informace najdete v tématu Čtení dotazů na repliky.

Osvědčené postupy

Při používání rozšířených událostí bezpečně, spolehlivě a bez vlivu na stav databázového stroje a výkon úloh využijte následující osvědčené postupy.

  • Pokud použijete event_file cíl:
    • V závislosti na událostech přidaných do relace můžou soubory vytvořené event_file cílem obsahovat citlivá data. Pečlivě zkontrolujte přiřazení rolí RBAC a seznamy řízení přístupu (ACL) v účtu úložiště a kontejneru, včetně zděděného přístupu, abyste se vyhnuli udělení zbytečného přístupu ke čtení. Dodržujte zásadu nejnižších oprávnění.
    • Použijte účet úložiště ve stejné oblasti Azure jako databázi nebo spravovanou instanci, ve které vytváříte relace událostí.
    • Zarovnejte redundanci účtu úložiště s redundancí databáze, elastického fondu nebo spravované instance. Pro místně redundantní prostředky použijte LRS, GRS nebo RA-GRS. Pro zónově redundantní prostředky použijte ZRS, GZRS nebo RA-GZRS. Podrobnosti najdete v části Redundance služby Azure Storage.
    • Nepoužívejte jinou úroveň přístupu k objektům blob než Hot.
    • Nepovolujte hierarchický obor názvů pro účet úložiště.
  • Pokud chcete vytvořit nepřetržitě spuštěnou relaci událostí, která se spustí automaticky po každém restartování databázového stroje (například po převzetí služeb při selhání nebo události údržby), zahrňte do příkazů STARTUP_STATE = ON nebo CREATE EVENT SESSION příkazů možnost ALTER EVENT SESSION relace události.
  • Naopak se používají STARTUP_STATE = OFF pro krátkodobé relace událostí, jako jsou relace používané při řešení potíží ad hoc.
  • Ve službě Azure SQL Database nečtěte události vzájemného zablokování z integrované dl relace událostí. Pokud se shromažďuje velký počet událostí vzájemného zablokování, může jejich čtení pomocí funkce sys.fn_xe_file_target_read_file() způsobit chybu nedostatku paměti v master databázi. To může mít vliv na zpracování přihlášení a způsobit výpadek aplikace. Doporučené způsoby monitorování zablokování najdete v tématu Shromažďování grafů vzájemného zablokování ve službě Azure SQL Database s rozšířenými událostmi.

Cíle relace událostí

Další informace o cílech rozšířených událostí podporovaných ve službě Azure SQL Database, SQL databázi v rámci Fabric, Azure SQL Managed Instance a SQL Serveru najdete v tématu Cíle pro rozšířené události.

rozdíly Transact-SQL

Když spustíte příkazy CREATE EVENT SESSION, ALTER EVENT SESSION a DROP EVENT SESSION v SQL Serveru a ve spravované instanci Azure SQL, použijete klauzuli ON SERVER . Ve službě Azure SQL Database místo toho použijete ON DATABASE klauzuli, protože v relacích událostí Azure SQL Database jsou obor databáze.

Zobrazení katalogu rozšířených událostí

Rozšířené události poskytují několik zobrazení katalogu. Zobrazení katalogu vás seznámí s metadaty nebo definicí relace událostí. Tato zobrazení nevrací informace o instancích aktivních relací událostí.

Seznam zobrazení katalogu pro každou platformu najdete v tématu Zobrazení katalogu rozšířených událostí.

Zobrazení dynamické správy rozšířených událostí

Rozšířené události poskytují několik zobrazení dynamické správy (DMV). Zobrazení dynamické správy vrací informace o spuštěných relacích událostí.

Seznam zobrazení dynamické správy pro každou platformu najdete v tématu Zobrazení dynamické správy rozšířených událostí.

Běžná zobrazení dynamické správy

Existují další rozšířené dynamické správy událostí, které jsou společné pro Azure SQL Database, Azure SQL Managed Instance a SQL Server:

Dostupné události, akce a cíle

Pomocí tohoto dotazu můžete získat dostupné události, akce a cíle:

SELECT o.object_type,
       p.name AS package_name,
       o.name AS db_object_name,
       o.description AS db_obj_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON p.guid = o.package_guid
WHERE o.object_type IN ('action','event','target')
ORDER BY o.object_type,
         p.name,
         o.name;

Permissions

Podívejte se na oprávnění pro podrobná oprávnění podle platformy.

Autorizace a řízení kontejneru úložiště

Když použijete event_file cíl s objekty blob služby Azure Storage, databázový stroj, na kterém je spuštěná relace událostí, musí mít specifický přístup ke kontejneru objektů blob. Tento přístup můžete udělit jedním z následujících způsobů:

  • Přiřaďte roli RBAC přispěvatele dat v objektu blob úložiště ke spravované identitě logického serveru Azure SQL nebo spravované instance Azure SQL v kontejneru a vytvořte přihlašovací údaje, které můžou databázovému stroji dát pokyn k použití spravované identity k ověřování.

    Jako alternativu k přiřazení role RBAC přispěvatele dat v objektech blob služby Storage můžete přiřadit následující akce RBAC:

    Namespace Action
    Microsoft.Storage/storageAccounts/blobServices/containers/ read
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/ delete
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/ read
    Microsoft.Storage/storageAccounts/blobServices/containers/blobs/ write
  • Vytvořte token SAS pro kontejner a uložte token do přihlašovacích údajů.

    Ve službě Azure SQL Database musíte použít přihlašovací údaje s oborem databáze. Ve službě Azure SQL Managed Instance a SQL Serveru použijte přihlašovací údaje s oborem serveru.

    Token SAS, který vytvoříte pro kontejner Azure Storage, musí splňovat následující požadavky:

    • rwdl Mít oprávnění (Read, Write, Delete, List)
    • Mít čas zahájení a vypršení platnosti, které zahrnují životnost relace události.
    • Nemá žádná omezení IP adres.

Zásady správného řízení prostředků

Ve službě Azure SQL Database je spotřeba paměti rozšířenými relacemi událostí dynamicky řízena databázovým strojem za účelem minimalizace kolizí prostředků.

Pro relace událostí je k dispozici limit paměti:

  • V jedné databázi je celková paměť relace omezená na 128 MB.
  • V elastickém fondu jsou jednotlivé databáze omezeny limity jednotlivých databází a celkem nemohou překročit 512 MB.

Pokud se zobrazí chybová zpráva odkazující na limit paměti, můžete provést opravné akce:

  • Spusťte méně souběžných relací událostí.
  • Použití CREATE a ALTER příkazy pro relace událostí snižte množství paměti, kterou zadáte v MAX_MEMORY klauzuli relace.

Note

V rozšířených událostech MAX_MEMORY se klauzule zobrazí ve dvou kontextech: při vytváření nebo změně relace (na úrovni relace) a při použití ring_buffer cíle (na cílové úrovni). Výše uvedené limity platí pro paměť na úrovni relace.

Počet spuštěných relací událostí ve službě Azure SQL Database je omezený:

  • V jedné databázi je limit 100.
  • V elastickém fondu je limit 100 relací s oborem databáze na fond.

V hustých elastických fondech může spuštění nové rozšířené relace událostí selhat kvůli omezením paměti, i když je celkový počet spuštěných relací nižší než 100.

Pokud chcete zjistit celkovou paměť spotřebovanou relací událostí, spusťte následující dotaz při připojení k databázi, ve které je spuštěna relace události:

SELECT name AS session_name,
       total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;

Pokud chcete zjistit celkovou paměť relace událostí pro elastický fond, musí se tento dotaz spustit ve všech databázích ve fondu.