Pakiety zdarzeń rozszerzonych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBaza danych SQL w usłudze Microsoft Fabric

Pakiet to kontener obiektów zdarzeń rozszerzonych w silniku bazy danych programu SQL Server. Na przykład następujące pakiety istnieją w dowolnym silniku bazy danych, które obsługują zdarzenia rozszerzone.

Package Description
package0 (ustawienie domyślne) Systemowe obiekty Zdarzeń Rozszerzonych.
sqlserver Obiekty związane z mechanizmem bazy danych.
sqlos Obiekty pokrewne systemu operacyjnego SQL (SQLOS).

Uwaga / Notatka

Pakiet SecAudit jest używany wewnętrznie przez funkcję Inspekcja. Żaden z obiektów w tym pakiecie nie jest dostępny za pośrednictwem języka definicji danych zdarzeń rozszerzonych (DDL).

Pakiety są identyfikowane przez nazwę, identyfikator GUID i moduł binarny zawierający pakiet. Moduł może być plikiem wykonywalnym lub biblioteką linków dynamicznych. Aby uzyskać więcej informacji, zobacz sys.dm_xe_packages.

Pakiet może zawierać dowolne lub wszystkie następujące obiekty, które zostały szczegółowo omówione w dalszej części tego artykułu:

  • Events
  • Targets
  • Czynności
  • Types
  • Predicates
  • Maps

Obiekty z różnych pakietów mogą być łączone w sesji zdarzeń. Aby uzyskać więcej informacji, zobacz Sesje zdarzeń rozszerzonych.

Zawartość pakietu

Poniższa ilustracja przedstawia obiekty, które mogą istnieć w pakiecie.

Diagram przedstawiający relację modułu, pakietów i obiektów.

Events

Zdarzenia to monitorowanie punktów orientacyjnych w ścieżce wykonywania programu, na przykład programu SQL Server. Gdy zdarzenie zostanie wyzwolone, zawiera fakt, że punkt orientacyjny został osiągnięty, a informacje o stanie od momentu uruchomienia zdarzenia.

Zdarzenia mogą być używane wyłącznie do celów śledzenia lub wyzwalania akcji. Te akcje mogą być synchroniczne lub asynchroniczne.

Uwaga / Notatka

Zdarzenie nie ma żadnej wiedzy na temat akcji, które mogą być wyzwalane w odpowiedzi na wyzwalanie zdarzenia.

Zestaw zdarzeń w pakiecie nie może ulec zmianie po zarejestrowaniu pakietu przy użyciu zdarzeń rozszerzonych.

Wszystkie zdarzenia mają schemat wersji definiujący ich zawartość. Ten schemat składa się z kolumn zdarzeń ze zdefiniowanymi typami. Zdarzenie określonego typu musi zawsze podawać dane w dokładnie takiej samej kolejności, jak określona w schemacie. Jednak element docelowy zdarzenia nie musi używać wszystkich dostarczonych danych.

Kategoryzacja zdarzeń

Zdarzenia rozszerzone używają modelu kategoryzacji zdarzeń podobnego do śledzenia zdarzeń dla systemu Windows (ETW). Dwie właściwości zdarzenia są używane do kategoryzacji, kanału i słowa kluczowego. Użycie tych właściwości obsługuje integrację Zdarzeń Rozszerzonych z ETW i jej narzędziami.

Kanał identyfikuje odbiorców zdarzenia. Kanały są opisane w poniższej tabeli.

Termin Definition
Administrator Zdarzenia administratora są przeznaczone głównie dla użytkowników końcowych, administratorów i pomocy technicznej. Zdarzenia znalezione w kanale administracyjnym mogą wskazywać na problem, na który istnieje dobrze zdefiniowane rozwiązanie, na które administrator może podjąć działanie. Przykładem zdarzenia administratora jest sytuacja, w której aplikacja nie może nawiązać połączenia. Te zdarzenia są udokumentowane lub mają skojarzony z nimi komunikat informujący czytelnika, co należy zrobić, aby rozwiązać problem.
Operational Zdarzenia operacyjne są używane do analizowania i diagnozowania problemu lub wystąpienia. Mogą służyć do wyzwalania narzędzi lub zadań na podstawie problemu lub wystąpienia.
Analiza Zdarzenia analityczne są publikowane w dużej ilości. Opisują one operację programu i są zwykle używane w badaniach wydajności.
Debug Zdarzenia debugowania są używane głównie przez deweloperów do diagnozowania problemu podczas debugowania.

Zdarzenia w kanale debugowania zwracają dane stanu specyficzne dla implementacji wewnętrznej. Schematy i dane zwracane przez zdarzenia mogą ulec zmianie, staną się nieprawidłowe lub zostaną usunięte w przyszłych wersjach aparatu bazy danych bez powiadomienia.

Słowo kluczowe jest specyficzne dla aplikacji i umożliwia bardziej szczegółowe grupowanie powiązanych zdarzeń, co ułatwia określenie i pobranie zdarzenia, które ma być używane w sesji. Aby uzyskać informacje o słowach kluczowych, możesz użyć następującego zapytania.

SELECT map_value AS Keyword
FROM sys.dm_xe_map_values
WHERE name = 'keyword_map';

Targets

Odbiorcy to konsumenci zdarzeń. Odnosi się do zdarzeń procesowych, realizowanych synchronicznie w wątku uruchamiającym zdarzenie lub asynchronicznie w wątku udostępnionym przez system. Zdarzenia rozszerzone udostępniają kilka typów docelowych, których można użyć odpowiednio do kierowania danych wyjściowych zdarzenia. Aby uzyskać więcej informacji, zobacz Obiekty docelowe dla zdarzeń rozszerzonych.

Klauzuli ADD TARGET używasz do dodawania celów do sesji zdarzeń.

Czynności

Akcja to programowa odpowiedź lub seria odpowiedzi na zdarzenie. Akcje są powiązane ze zdarzeniem, a każde zdarzenie może mieć własny zestaw akcji.

Uwaga / Notatka

Akcje przeznaczone dla określonych zdarzeń nie mogą być powiązane z innymi zdarzeniami.

Akcja powiązana ze zdarzeniem jest wywoływana synchronicznie w wątku, który wyzwolił zdarzenie. Istnieje wiele typów akcji i mają szeroką gamę możliwości. Akcje mogą:

  • Przechwyć zrzut procesu
  • Przechowywanie informacji o stanie w kontekście lokalnym przy użyciu magazynu zmiennych
  • Agregowanie danych zdarzeń
  • Dołączanie danych do danych zdarzenia

Typowe przykłady użycia akcji to:

  • Zbieranie tekstu SQL zapytania wykonywanego przez wątek uruchamiany przez zdarzenie
  • Zbierz uchwyt planu zapytania, skrót zapytania oraz skrót planu zapytania
  • Zbierz atrybuty sesji, która powoduje wyzwolenie zdarzenia, w tym nazwę hosta klienta, nazwę główną użytkownika, identyfikator połączenia itp.
  • Zbierz stos wywołań
  • Przechwytywanie zrzutu procesu w przypadku wystąpienia określonego błędu

Klauzuli ACTION używa się do dodawania akcji do sesji zdarzeń.

Predicates

Predykaty to zestaw reguł logicznych używanych do oceny zdarzeń podczas ich przetwarzania. Predykaty umożliwiają użytkownikowi zdarzeń rozszerzonych selektywne przechwytywanie danych zdarzeń na podstawie określonych kryteriów.

Predykaty mogą przechowywać dane w kontekście lokalnym, co może służyć do tworzenia predykatów, które zwracają wartość true co n minut lub po uruchomieniu zdarzenia n razy. Możesz również użyć tego magazynu kontekstu lokalnego, aby dynamicznie aktualizować predykat, co tłumi uruchamianie przyszłych zdarzeń, jeśli zdarzenia zawierają podobne dane.

Predykaty mają możliwość pobierania informacji kontekstowych, takich jak identyfikator wątku i dane specyficzne dla zdarzenia. Predykaty są oceniane jako pełne wyrażenia logiczne i obsługują zwarcie w pierwszym punkcie, w którym całe wyrażenie jest uznawane za fałszywe.

Uwaga / Notatka

Predykaty z efektami ubocznymi mogą nie być oceniane, jeśli wcześniejsze sprawdzanie predykatu kończy się niepowodzeniem.

Ty używasz klauzuli WHERE do dodawania predykatów do sesji zdarzeń.

Types

W pakiecie wszystkie obiekty Zdarzeń Rozszerzonych mają typ. Używane są następujące typy:

  • action
  • event
  • message
  • pred_compare
  • pred_source
  • target
  • type

Aby uzyskać więcej informacji, zobacz sys.dm_xe_objects.

Maps

Tabela mapowania przypisuje wartość wewnętrzną do ciągu znaków, co pozwala użytkownikowi zrozumieć, co przedstawia dana wartość. Zamiast uzyskiwać tylko wartość liczbową, użytkownik może uzyskać zrozumiały opis wartości wewnętrznej. Poniższe zapytanie pokazuje, jak uzyskać wartości mapy.

SELECT map_key,
       map_value
FROM sys.dm_xe_map_values
WHERE name = 'lock_mode';

Powyższe zapytanie generuje następujące dane wyjściowe:

klucz_mapy mapuj_wartosc
0 NL
1 SCH_S
2 SCH_M
3 S
4 U
5 X
6 IS
7 IU
8 IX
9 SIU
10 SIX
11 UIX
12 BU
13 RS_S
14 RS_U
15 RI_NL
16 RI_S
17 RI_U
18 RI_X
19 RX_S
20 RX_U
dwadzieścia jeden LAST_MODE

Korzystając z tej tabeli jako przykładu, załóżmy, że masz kolumnę o nazwie lock_mode, a jej wartość to 5. Tabela wskazuje, że 5 mapuje na X, co oznacza, że typ blokady jest Wyłączny.