Rozšířené události ve službě Azure SQL Database a azure SQL Managed Instance

Platí pro:Azure SQL DatabaseAzure SQL Managed Instance

Ú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 a Azure SQL Managed Instance jsou podobné tomu, co je dostupné na SQL Serveru. Hlavní rozdíly:

  • Cíl event_file vždy používá objekty blob ve službě Azure Storage místo souborů na disku.
  • Ve službě Azure SQL Database 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, které vám pomůžou rychle začít s rozšířenými událostmi ve službě Azure SQL Database a azure SQL Managed Instance:

  • Vytvořte relaci s cílem event_file ve službě Azure Storage. V tomto příkladu se dozvíte, jak zachytit data událostí v souboru (objektu blob) ve službě event_file Azure Storage pomocí cíle. Tuto možnost použijte, pokud potřebujete zachovat zachycená data událostí nebo pokud chcete k analýze zachycených dat použít prohlížeč událostí v aplikaci SQL Server Management Studio (SSMS).
  • Vytvořte relaci s cílem ring_buffer v paměti. Tento příklad ukazuje, jak zachytit nejnovější události z relace událostí v paměti pomocí ring_buffer cíle. Můžete se tak rychle podívat na nedávné události během ad hoc šetření nebo řešení potíží, aniž byste museli ukládat zachycená data událostí.

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

Využijte následující osvědčené postupy pro spolehlivé používání rozšířených událostí ve službě Azure SQL Database a azure SQL Managed Instance, aniž by to ovlivnilo stav databázového stroje a výkon úloh.

  • Pokud použijete event_file cíl:
    • Nenastavujte EVENT_RETENTION_MODE možnost na NO_EVENT_LOSShodnotu . To může způsobit vypršení časového limitu připojení a zpoždění převzetí služeb při selhání mezi dalšími problémy, které ovlivňují dostupnost databáze nebo spravované instance.
    • 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.
  • 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ů CREATE EVENT SESSION nebo ALTER EVENT SESSION příkazů možnost STARTUP_STATE = ON 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í

Azure SQL Database a Azure SQL Managed Instance podporují následující cíle:

  • event_file cíl. Zapisuje úplné vyrovnávací paměti do objektu blob v kontejneru Azure Storage.
  • ring_buffer cíl. Uchovává data událostí v paměti, dokud nebudou nahrazena novými daty událostí.
  • event_counter cíl. Spočítá všechny události, ke kterým dochází během relace rozšířených událostí.
  • cíl histogramu . Spočítá výskyty různých hodnot polí nebo akcí v samostatných kontejnerech.
  • event_stream. Toky data událostí do aplikace .NET.

Poznámka:

Cíl event_stream ve službě Azure SQL Database a azure SQL Managed Instance je ve verzi Preview.

Rozdíly v 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í.

Název zobrazení katalogu Popis
sys.database_event_session_actions Vrátí řádek pro každou akci pro každou událost relace události.
sys.database_event_session_events Vrátí řádek pro každou událost v relaci události.
sys.database_event_session_fields Vrátí řádek pro každý sloupec umožňující přizpůsobení, který byl explicitně nastaven pro události a cíle.
sys.database_event_session_targets Vrátí řádek pro každý cíl události relace události.
sys.database_event_sessions Vrátí řádek pro každou relaci událostí v databázi.

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í.

Název zobrazení dynamické správy Popis
sys.dm_xe_database_session_event_actions Vrátí informace o akcích relace událostí.
sys.dm_xe_database_session_events Vrátí informace o událostech relace.
sys.dm_xe_database_session_object_columns Zobrazuje hodnoty konfigurace pro objekty, které jsou svázané s relací.
sys.dm_xe_database_session_targets Vrátí informace o cílech relace.
sys.dm_xe_database_sessions Vrátí řádek pro každou relaci událostí spuštěnou v aktuální databázi.

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

Stejně jako na SQL Serveru můžete pomocí tohoto dotazu 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;

Oprávnění

Rozšířené události ve službě Azure SQL Database a Azure SQL Managed Instance podporují podrobný model oprávnění. Můžete udělit následující oprávnění:

CREATE ANY DATABASE EVENT SESSION
DROP ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION
ALTER ANY DATABASE EVENT SESSION ADD EVENT
ALTER ANY DATABASE EVENT SESSION DROP EVENT
ALTER ANY DATABASE EVENT SESSION ADD TARGET
ALTER ANY DATABASE EVENT SESSION DROP TARGET
ALTER ANY DATABASE EVENT SESSION ENABLE
ALTER ANY DATABASE EVENT SESSION DISABLE
ALTER ANY DATABASE EVENT SESSION OPTION

Informace o tom, co každý z těchto ovládacích prvků oprávnění řídí, naleznete v tématu CREATE EVENT SESSION, ALTER EVENT SESSION a DROP EVENT SESSION.

Všechna tato oprávnění jsou součástí CONTROL oprávnění k databázi nebo spravované instanci. Ve službě Azure SQL Database vlastník databáze (dbo), členové db_owner databázové role a správci logického serveru uchovávají oprávnění k databázi CONTROL . Ve službě Azure SQL Managed Instance členové sysadmin role serveru uchovávají CONTROL oprávnění k instanci.

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

Při použití event_file cíle se data událostí ukládají do objektů blob v kontejneru Azure Storage. Databázový stroj, na kterém je spuštěná relace událostí, musí mít k tomuto kontejneru specifický přístup. Tento přístup udělíte vytvořením tokenu SAS pro kontejner a uložením tokenu 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 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:

  • rwl Mít oprávnění (Read, Write, 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.

Poznámka:

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.