Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Baza 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.
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:
actioneventmessagepred_comparepred_sourcetargettype
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.