Zdarzenia rozszerzone w usługach Azure SQL Database i Azure SQL Managed Instance
Dotyczy: Azure SQL Database Azure SQL Managed Instance
Aby zapoznać się z wprowadzeniem do zdarzeń rozszerzonych, zobacz:
Zestaw funkcji, funkcje i scenariusze użycia dla zdarzeń rozszerzonych w usługach Azure SQL Database i Azure SQL Managed Instance są podobne do dostępnych w programie SQL Server. Główne różnice są następujące:
- Obiekt
event_file
docelowy zawsze używa obiektów blob w usłudze Azure Storage, a nie plików na dysku. - W usłudze Azure SQL Database sesje zdarzeń są zawsze ograniczone do zakresu bazy danych. Oznacza to, że:
- Sesja zdarzeń w jednej bazie danych nie może zbierać zdarzeń z innej bazy danych.
- Zdarzenie musi wystąpić w kontekście bazy danych użytkownika, która ma zostać uwzględniona w sesji.
- W usłudze Azure SQL Managed Instance można utworzyć sesje zdarzeń o zakresie serwera i w zakresie bazy danych. W większości scenariuszy zalecamy używanie sesji zdarzeń o zakresie serwera.
Rozpocznij
Istnieją dwa przykłady ułatwiające szybkie rozpoczęcie pracy z zdarzeniami rozszerzonymi w usłudze Azure SQL Database i usłudze Azure SQL Managed Instance:
- Utwórz sesję z obiektem docelowym event_file w usłudze Azure Storage. W tym przykładzie pokazano, jak przechwytywać dane zdarzeń w pliku (blob) w usłudze Azure Storage przy użyciu
event_file
obiektu docelowego. Użyj tej opcji, jeśli chcesz utrwalić przechwycone dane zdarzenia lub jeśli chcesz użyć podglądu zdarzeń w programie SQL Server Management Studio (SSMS) do analizowania przechwyconych danych. - Utwórz sesję z obiektem docelowym ring_buffer w pamięci. W tym przykładzie pokazano, jak przechwytywać najnowsze zdarzenia z sesji zdarzeń w pamięci przy użyciu
ring_buffer
obiektu docelowego. Użyj tego jako szybkiego sposobu, aby przyjrzeć się ostatnim zdarzeniom podczas badań ad hoc lub rozwiązywania problemów bez konieczności przechowywania przechwyconych danych zdarzeń.
Zdarzenia rozszerzone mogą służyć do monitorowania replik tylko do odczytu. Aby uzyskać więcej informacji, zobacz Odczyt zapytań dotyczących replik.
Najlepsze rozwiązania
Zastosuj poniższe najlepsze rozwiązania, aby niezawodnie używać zdarzeń rozszerzonych w usługach Azure SQL Database i Azure SQL Managed Instance oraz bez wpływu na kondycję aparatu bazy danych i wydajność obciążenia.
- Jeśli używasz
event_file
elementu docelowego:- Użyj konta magazynu w tym samym regionie świadczenia usługi Azure co baza danych lub wystąpienie zarządzane, w którym są tworzone sesje zdarzeń.
- Dopasuj nadmiarowość konta magazynu do nadmiarowości bazy danych, elastycznej puli lub wystąpienia zarządzanego. W przypadku zasobów lokalnie nadmiarowych użyj magazynu LRS, GRS lub RA-GRS. W przypadku zasobów strefowo nadmiarowych użyj magazynu ZRS, GZRS lub RA-GZRS. Aby uzyskać szczegółowe informacje, zobacz Nadmiarowość usługi Azure Storage.
- Nie używaj żadnej warstwy dostępu do obiektu blob innej niż
Hot
.
- Jeśli chcesz utworzyć stale uruchomioną sesję zdarzeń, która jest uruchamiana automatycznie po ponownym uruchomieniu aparatu bazy danych (na przykład po przejściu w tryb failover lub zdarzeniu konserwacji), dołącz opcję
STARTUP_STATE = ON
sesji zdarzeń w instrukcjiCREATE EVENT SESSION
lubALTER EVENT SESSION
. - Z drugiej strony należy używać
STARTUP_STATE = OFF
do krótkoterminowych sesji zdarzeń, takich jak te używane w rozwiązywaniu problemów ad hoc. - W usłudze Azure SQL Database nie odczytuj zdarzeń zakleszczenia z wbudowanej
dl
sesji zdarzeń. Jeśli zebrano dużą liczbę zdarzeń zakleszczenia, odczytanie ich za pomocą funkcji sys.fn_xe_file_target_read_file() może spowodować błąd braku pamięci wmaster
bazie danych. Może to mieć wpływ na przetwarzanie logowania i spowodować awarię aplikacji. Aby zapoznać się z zalecanymi sposobami monitorowania zakleszczeń, zobacz Zbieranie wykresów zakleszczenia w usłudze Azure SQL Database przy użyciu zdarzeń rozszerzonych.
Cele sesji zdarzeń
Usługi Azure SQL Database i Azure SQL Managed Instance obsługują następujące cele:
- event_file celu. Zapisuje pełne do obiektu blob w kontenerze usługi Azure Storage.
- ring_buffer celu. Przechowuje dane zdarzeń w pamięci do momentu zastąpienia przez nowe dane zdarzenia.
- event_counter celu. Zlicza wszystkie zdarzenia, które występują podczas sesji zdarzeń rozszerzonych.
- cel histogramu . Zlicza wystąpienia różnych wartości pól lub akcji w oddzielnych zasobnikach.
- event_stream. Przesyła strumieniowo dane zdarzeń do aplikacji .NET.
Uwaga
Obiekt docelowy event_stream
w usługach Azure SQL Database i Azure SQL Managed Instance jest w wersji zapoznawczej.
Różnice w języku Transact-SQL
Podczas wykonywania instrukcji CREATE EVENT SESSION, ALTER EVENT SESSION i DROP EVENT SESSION w programie SQL Server i w usłudze Azure SQL Managed Instance należy użyć klauzuli ON SERVER
. W usłudze Azure SQL Database należy zamiast tego użyć ON DATABASE
klauzuli , ponieważ w przypadku sesji zdarzeń usługi Azure SQL Database są ograniczone do zakresu bazy danych.
Widoki wykazu zdarzeń rozszerzonych
Zdarzenia rozszerzone udostępniają kilka widoków wykazu. Widoki wykazu informują o metadanych lub definicjach sesji zdarzeń. Te widoki nie zwracają informacji o wystąpieniach aktywnych sesji zdarzeń.
Nazwa widoku wykazu | opis |
---|---|
sys.database_event_session_actions | Zwraca wiersz dla każdej akcji dla każdego zdarzenia sesji zdarzeń. |
sys.database_event_session_events | Zwraca wiersz dla każdego zdarzenia w sesji zdarzeń. |
sys.database_event_session_fields | Zwraca wiersz dla każdej kolumny, która została jawnie ustawiona dla zdarzeń i obiektów docelowych. |
sys.database_event_session_targets | Zwraca wiersz dla każdego obiektu docelowego zdarzenia dla sesji zdarzeń. |
sys.database_event_sessions | Zwraca wiersz dla każdej sesji zdarzeń w bazie danych. |
Dynamiczne widoki zarządzania zdarzeniami rozszerzonymi
Zdarzenia rozszerzone udostępniają kilka dynamicznych widoków zarządzania (DMV). Dynamiczne widoki zarządzania zwracają informacje o uruchomionych sesjach zdarzeń.
Nazwa dynamicznego widoku zarządzania | opis |
---|---|
sys.dm_xe_database_session_event_actions | Zwraca informacje o akcjach sesji zdarzeń. |
sys.dm_xe_database_session_events | Zwraca informacje o zdarzeniach sesji. |
sys.dm_xe_database_session_object_columns | Przedstawia wartości konfiguracji obiektów powiązanych z sesją. |
sys.dm_xe_database_session_targets | Zwraca informacje o celach sesji. |
sys.dm_xe_database_sessions | Zwraca wiersz dla każdej sesji zdarzeń uruchomionej w bieżącej bazie danych. |
Typowe dynamiczne widoki zarządzania
Istnieją dodatkowe dynamiczne widoki zarządzania zdarzeniami rozszerzonymi, które są wspólne dla usługi Azure SQL Database, usługi Azure SQL Managed Instance i programu SQL Server:
Dostępne zdarzenia, akcje i cele
Podobnie jak w programie SQL Server, można uzyskać dostępne zdarzenia, akcje i obiekty docelowe przy użyciu tego zapytania:
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;
Uprawnienia
Napiwek
W 2022 r. firma Microsoft wprowadziła szereg nowych bardziej szczegółowych uprawnień dla zdarzeń rozszerzonych, aby uzyskać więcej informacji, zobacz Blog: Nowe szczegółowe uprawnienia dla programu SQL Server 2022 i usługi Azure SQL w celu poprawy zgodności z funkcją PoLP.
W usługach Azure SQL Database i Azure SQL Managed Instance zdarzenia rozszerzone obsługują szczegółowy model uprawnień. Można przyznać następujące uprawnienia:
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
Aby uzyskać informacje o tym, co każdy z tych uprawnień kontroluje, zobacz CREATE EVENT SESSION( TWORZENIE SESJI ZDARZEŃ), ALTER EVENT SESSION (ZMIENIANIE SESJI ZDARZEŃ) i DROP EVENT SESSION (USUWANIE SESJI ZDARZEŃ).
Wszystkie te uprawnienia są uwzględniane w CONTROL
uprawnieniach do bazy danych lub wystąpienia zarządzanego. W usłudze Azure SQL Database właściciel bazy danych (dbo
), członkowie db_owner
roli bazy danych i administratorzy serwera logicznego posiadają uprawnienia do bazy danych CONTROL
. W usłudze Azure SQL Managed Instance członkowie sysadmin
roli serwera przechowują CONTROL
uprawnienia do wystąpienia.
Autoryzacja i kontrola kontenera magazynu
W przypadku korzystania z event_file
obiektu docelowego dane zdarzeń są przechowywane w obiektach blob w kontenerze usługi Azure Storage. Aparat bazy danych z uruchomioną sesją zdarzeń musi mieć określony dostęp do tego kontenera. Ten dostęp można udzielić w jeden z następujących sposobów:
Przypisz rolę RBAC współautora danych obiektu blob usługi Storage do tożsamości zarządzanej serwera logicznego Azure SQL lub wystąpienia zarządzanego usługi Azure SQL w kontenerze i utwórz poświadczenia, aby poinstruować aparat bazy danych, aby używał tożsamości zarządzanej do uwierzytelniania.
Alternatywą dla przypisania roli RBAC współautora danych obiektu blob usługi Storage jest przypisanie następujących akcji kontroli dostępu opartej na rolach:
Przestrzeń nazw Akcja 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
Uwaga
Korzystanie z tożsamości zarządzanej z rozszerzonymi sesjami zdarzeń jest w wersji zapoznawczej.
Utwórz token SAS dla kontenera i zapisz token w poświadczeniu.
W usłudze Azure SQL Database należy użyć poświadczeń o zakresie bazy danych. W usłudze Azure SQL Managed Instance użyj poświadczeń o zakresie serwera.
Token SAS utworzony dla kontenera usługi Azure Storage musi spełniać następujące wymagania:
rwdl
Mają uprawnienia (Read
,Write
,Delete
,List
).- Czas rozpoczęcia i czas wygaśnięcia, który obejmuje okres istnienia sesji zdarzeń.
- Brak ograniczeń adresów IP.
Nadzór nad zasobami
W usłudze Azure SQL Database użycie pamięci przez rozszerzone sesje zdarzeń jest dynamicznie kontrolowane przez aparat bazy danych w celu zminimalizowania rywalizacji o zasoby.
Istnieje limit pamięci dostępnej dla sesji zdarzeń:
- W pojedynczej bazie danych łączna ilość pamięci sesji jest ograniczona do 128 MB.
- W elastycznej puli poszczególne bazy danych są ograniczone przez limity pojedynczej bazy danych i łącznie nie mogą przekraczać 512 MB.
Jeśli zostanie wyświetlony komunikat o błędzie odwołujący się do limitu pamięci, możesz wykonać następujące akcje naprawcze:
- Uruchamianie mniejszej liczby współbieżnych sesji zdarzeń.
- Używanie
CREATE
instrukcji iALTER
dla sesji zdarzeń zmniejsza ilość pamięci określonej wMAX_MEMORY
klauzuli dla sesji.
Uwaga
W przypadku zdarzeń rozszerzonych klauzula MAX_MEMORY
jest wyświetlana w dwóch kontekstach: podczas tworzenia lub zmieniania sesji (na poziomie sesji) oraz podczas korzystania z ring_buffer
obiektu docelowego (na poziomie docelowym). Powyższe limity dotyczą pamięci na poziomie sesji.
Istnieje limit liczby uruchomionych sesji zdarzeń w usłudze Azure SQL Database:
- W pojedynczej bazie danych limit wynosi 100.
- W elastycznej puli limit wynosi 100 sesji w zakresie bazy danych na pulę.
W gęstych elastycznych pulach uruchomienie nowej rozszerzonej sesji zdarzeń może zakończyć się niepowodzeniem z powodu ograniczeń pamięci nawet wtedy, gdy łączna liczba rozpoczętych sesji jest większa niż 100.
Aby znaleźć łączną ilość pamięci zużywaną przez sesję zdarzeń, wykonaj następujące zapytanie podczas nawiązywania połączenia z bazą danych, w której uruchomiono sesję zdarzeń:
SELECT name AS session_name,
total_buffer_size + total_target_memory AS total_session_memory
FROM sys.dm_xe_database_sessions;
Aby znaleźć łączną pamięć sesji zdarzeń dla elastycznej puli, to zapytanie musi być wykonywane w każdej bazie danych w puli.