Rozšířené události ve službě Azure SQL Database a azure SQL Managed Instance
Platí pro: Azure SQL Database Azure 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:- 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
neboALTER EVENT SESSION
příkazů možnostSTARTUP_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 vmaster
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. Streamuje 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í
Tip
V roce 2022 společnost Microsoft zavedla řadu nových podrobnějších oprávnění pro rozšířené události, další informace najdete na blogu: Nová podrobná oprávnění pro SQL Server 2022 a Azure SQL pro zlepšení dodržování poLP.
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 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:
Obor názvů Akce 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
Poznámka:
Použití spravované identity s rozšířenými relacemi událostí je ve verzi Preview.
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 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
aALTER
příkazy pro relace událostí snižte množství paměti, kterou zadáte vMAX_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.