Udostępnij za pośrednictwem


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 instrukcji CREATE EVENT SESSION lub ALTER 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 w master 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 i ALTER dla sesji zdarzeń zmniejsza ilość pamięci określonej w MAX_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.