Eksplorowanie zdarzeń rozszerzonych
Aparat zdarzeń rozszerzonych w Azure SQL to lekki i zaawansowany system monitorowania, który umożliwia przechwytywanie szczegółowych informacji o aktywności w bazach danych i serwerach. Rozwiązania do monitorowania na platformie Azure umożliwiają łatwe konfigurowanie zaawansowanego monitorowania środowiska i dostarczanie automatycznych odpowiedzi na warunki błędów.
Zdarzenia rozszerzone opierają się na funkcjonalności SQL Server Profiler, umożliwiając śledzenie zapytań i ujawnianie dodatkowych danych (zdarzeń), które można monitorować. Oto kilka przykładów problemów, które można rozwiązać z zdarzeniami rozszerzonymi:
- Rozwiązywanie problemów z wydajnością blokowania i zakleszczenia.
- Identyfikowanie długotrwałych zapytań.
- Monitorowanie operacji języka definicji danych (DDL).
- Rejestrowanie brakujących statystyk kolumn.
- Obserwowanie ciśnienia pamięci w bazie danych.
- Długotrwałe fizyczne operacje we/wy.
Rozszerzona struktura zdarzeń umożliwia również używanie filtrów w celu ograniczenia ilości zbieranych danych w celu zmniejszenia nakładu pracy nad zbieraniem danych i umożliwia łatwiejsze identyfikowanie problemu z wydajnością przez ukierunkowanie na konkretne obszary.
Poniżej przedstawiono przykład rozszerzonej sesji zdarzeń utworzonej w usłudze Azure SQL Database:
Na powyższej ilustracji xe_deadlocks jest nazwą sesji zdarzeń rozszerzonej uruchomionej w bazie danych AdventureWorks (po lewej stronie obrazu). Węzeł docelowy event_counter , który znajduje się w węźle sesji zdarzeń, zlicza liczbę wystąpień każdego zdarzenia w sesji zdarzeń. Aby wyświetlić dane docelowe w programie SSMS Eksplorator obiektów, możesz kliknąć prawym przyciskiem myszy węzeł docelowy, a następnie wybrać pozycję Wyświetl dane docelowe. Program SSMS wyświetla dane widoczne po lewej stronie obrazu oraz wyniki liczby dla każdego zdarzenia.
Aby uzyskać więcej informacji o zdarzeniach rozszerzonych w usłudze Azure SQL Database, zobacz Zdarzenia rozszerzone w usłudze Azure SQL Database.
Co mogę monitorować za pomocą zdarzeń rozszerzonych?
Zdarzenia rozszerzone obejmują pełny obszar powierzchni SQL Server i są podzielone na cztery kanały, które definiują odbiorców wydarzenia.
- Administracja — zdarzenia Administracja są przeznaczone dla użytkowników końcowych i administratorów. Uwzględnione zdarzenia wskazują problem w dobrze zdefiniowanym zestawie akcji, które może wykonać administrator. Przykładem jest generowanie raportu zakleszczenia XML, które pomaga w tożsamości głównej przyczyny zakleszczenia.
- Operacyjne — zdarzenia operacyjne są używane do analizy i diagnostyki lub typowych problemów. Te zdarzenia mogą służyć do wyzwalania akcji lub zadania na podstawie wystąpienia zdarzenia. Przykładem zdarzenia operacyjnego jest baza danych w stanie zmieniającym się grupy dostępności, co oznacza przejście w tryb failover.
- Analityczne — zdarzenia analityczne są zwykle związane z zdarzeniami wydajności i są publikowane w dużej ilości. Śledzenie procedury składowanej lub wykonywania zapytań byłoby przykładem zdarzenia analitycznego.
- Debugowanie — zdarzenia debugowania nie muszą być w pełni udokumentowane i należy ich używać tylko podczas rozwiązywania problemów w połączeniu z pomocą techniczną firmy Microsoft.
Zdarzenia są dodawane do sesji, które mogą hostować wiele zdarzeń. Zazwyczaj wiele zdarzeń jest grupowanych razem w sesji w celu przechwycenia powiązanego zestawu informacji.
Możesz uruchomić poniższe zapytanie, aby uzyskać listę dostępnych zdarzeń, akcji i elementów docelowych:
SELECT
obj.object_type,
pkg.name AS [package_name],
obj.name AS [object_name],
obj.description AS [description]
FROM sys.dm_xe_objects AS obj
INNER JOIN sys.dm_xe_packages AS pkg ON pkg.guid = obj.package_guid
WHERE obj.object_type in ('action', 'event', 'target')
ORDER BY obj.object_type,
pkg.name,
obj.name;
Tworzenie sesji zdarzeń rozszerzonych
Poniżej przedstawiono podstawowy proces tworzenia sesji zdarzeń rozszerzonych przy użyciu okna dialogowego Nowa sesja z SQL Server Management Studio. Ten ekran można uzyskać, rozwijając węzeł Zarządzanie w programie SSMS, rozwijając węzeł Zdarzenia rozszerzone, klikając prawym przyciskiem myszy pozycję Sesje i wybierając pozycję Nowa sesja.
Na powyższej ilustracji przedstawiono okno dialogowe Nowa sesja dla funkcji zdarzeń rozszerzonych. Musisz podać nazwę sesji. SQL Server udostępnia wiele szablonów pogrupowanych w następujące kategorie:
- Blokady i bloki
- Odpowiedniki profilera
- Wykonywanie zapytania
- Monitorowanie systemu
Te wstępnie zdefiniowane szablony umożliwiają szybkie rozpoczęcie pracy z użyciem zdarzeń rozszerzonych na potrzeby monitorowania. W tym przykładzie zobaczysz zdarzenia ręcznie dodane do sesji, aby przejść przez wszystkie opcje, ale po rozpoczęciu pracy przy użyciu szablonu można łatwo utworzyć sesję podstawową.
Istnieje kilka opcji pola wyboru, kiedy należy uruchomić tę sesję. Możesz wybrać, czy nowa sesja zostanie uruchomiona za każdym razem, gdy serwer zostanie uruchomiony, a także wybrać rozpoczęcie sesji zaraz po jej utworzeniu. Administratorzy mogą uruchamiać i zatrzymywać rozszerzone sesje zdarzeń w dowolnym momencie za pośrednictwem węzła Zdarzenia rozszerzone w SQL Server Management Studio. Istnieje również możliwość włączenia śledzenia przyczynowości, która dodaje globalnie unikatowy identyfikator (GUID) i numer sekwencji do danych wyjściowych każdego zdarzenia, co umożliwia łatwe przechodzenie przez kolejność wystąpienia zdarzeń.
Na powyższym obrazie przedstawiono ekran, na którym są dodawane zdarzenia do sesji. Zdarzenie reprezentuje punkt orientacyjny w kodzie aparatu bazy danych — mogą one reprezentować wyłącznie operacje systemu wewnętrznego lub mogą być skojarzone z akcjami użytkownika, takimi jak wykonywanie zapytań. W powyższym przykładzie widać, że zdarzenia sp_statement_completed, sql_batch_completedi sql_statement_completed zostały dodane do tej sesji zdarzeń. Domyślnie ta sesja przechwytuje wszystkie wystąpienia tych zdarzeń w wystąpieniu. Możesz ograniczyć zbieranie, klikając przycisk Konfiguruj.
Ekran konfiguracji zdarzeń umożliwia zdefiniowanie zbieranych danych w odniesieniu do zdarzeń. Pola globalne umożliwiają wybranie zbieranych danych po wystąpieniu zdarzenia. Pola globalne są również nazywane akcjami, ponieważ akcja polega na dodaniu dodatkowych pól danych do zdarzenia. Te pola reprezentują dane zbierane po wystąpieniu zdarzenia rozszerzonego i są wspólne dla większości zdarzeń rozszerzonych. Na poniższej ilustracji przedstawiono opcje filtrowania dla zdarzenia rozszerzonego.
Filtry to zaawansowana funkcja zdarzeń rozszerzonych, która umożliwia używanie szczegółowej kontrolki do przechwytywania tylko określonych wystąpień zdarzenia, które chcesz przechwycić. W tym przykładzie widać, że filtr jest stosowany w polu sqlserver.is_system , w którym jest równa zero, co oznacza, że zapytanie nie jest operacją wewnętrzną. Innymi słowy, sesja nie przechwytuje uzupełniania instrukcji przesyłanych przez połączenia systemowe i chcemy przechwytywać tylko instrukcje przesyłane przez użytkowników lub aplikacje użytkowników.
Filtry mają zastosowanie do pojedynczego pola w jednym zdarzeń. Jeśli chcesz upewnić się, że nie śledzisz działań systemowych dla żadnych zdarzeń, musisz mieć oddzielny filtr dla każdego z nich: dla sql_statement_completed zdarzenia, zdarzenia sql_batch_completed i zdarzenia sp_statement_completed .
Dobrym rozwiązaniem jest skonfigurowanie filtru dla każdego przechwytywania zdarzenia. Pomaga to zwiększyć wydajność zbierania danych i pozwala zawęzić fokus wyszukiwania.
Na poniższej ilustracji przedstawiono pola zdarzeń, które są zbierane. Są one specyficzne dla wyzwalanego zdarzenia i mogą zawierać opcjonalne pola dla kolekcji. W powyższym zdarzeniu można zobaczyć opcjonalne opcje kolekcji to statement, i parameterized_plan_handle.
Po zdefiniowaniu sesji zdarzeń zdefiniujesz docelowy magazyn, jak pokazano na poniższej ilustracji.
Rozszerzona sesja zdarzeń ma cel — element docelowy może być po prostu uważany za miejsce dla aparatu w celu śledzenia wystąpień zdarzenia. Dwa z bardziej typowych obiektów docelowych to plik zdarzenia, który jest plikiem w systemie plików, który może przechowywać zdarzenia, a w Azure SQL oferty PaaS te dane są zapisywane w magazynie obiektów blob. Innym typowym celem jest bufor pierścienia, który znajduje się w pamięci SQL Server. Bufor pierścienia jest najczęściej używany do obserwacji na żywo sesji zdarzeń, ponieważ jest to bufor cykliczny, a dane nie są utrwalane poza sesją. Większość obiektów docelowych przetwarza dane asynchronicznie, co oznacza, że dane zdarzenia są zapisywane w pamięci przed utrwalone na dysku. Wyjątkiem jest śledzenie zdarzeń dla obiektów docelowych systemu Windows (ETW) i obiektów docelowych licznika zdarzeń, które są przetwarzane synchronicznie.
Poniższa tabela zawiera informacje i używa ich dla każdego typu obiektu docelowego zdarzeń rozszerzonych.
| Cel | Opis | Przetwarzanie |
|---|---|---|
| Licznik zdarzeń | Zlicza wszystkie zdarzenia, które wystąpiły podczas sesji zdarzenia rozszerzonego. Służy do uzyskiwania informacji o cechach obciążenia dotyczących obciążenia bez nakładu pracy nad pełną kolekcją zdarzeń. | Synchronous |
| Plik zdarzenia | Zapisuje dane wyjściowe sesji zdarzeń z pamięci na plik trwały na dysku. | Asynchroniczny |
| Parowanie zdarzeń | Wiele zdarzeń, które zwykle występują w parach (np. uzyskiwanie blokady, zwalnianie blokady), a ta kolekcja może służyć do określania tożsamości, gdy te zdarzenia nie występują w dopasowanym zestawie. | Asynchroniczny |
| Śledzenie zdarzeń dla systemu Windows (ETW) | Służy do korelowania zdarzeń SQL Server z danymi zdarzeń systemu operacyjnego Windows. | Synchronous |
| Histogram | Jest to podobne do licznika zdarzeń, który zlicza wystąpienia zdarzenia. Różnica polega na tym, że histogram może liczyć się na podstawie określonej kolumny lub akcji zdarzenia. | Asynchroniczny |
| Bufor pierścieniowy | Służy do przechowywania danych w pamięci. Dane nie są utrwalane na dysku i mogą być często opróżniane z buforu | Asynchroniczny |
Alternatywnie można utworzyć sesję zdarzeń rozszerzonych przy użyciu języka T-SQL. Następujące polecenia języka T-SQL zawierają przykład tworzenia sesji zdarzeń rozszerzonych:
IF EXISTS (SELECT * FROM sys.server_event_sessions WHERE name='test_session')
DROP EVENT session test_session ON SERVER;
GO
CREATE EVENT SESSION test_session
ON SERVER
ADD EVENT sqlos.async_io_requested,
ADD EVENT sqlserver.lock_acquired
ADD TARGET package0.etw_classic_sync_target (SET default_etw_session_logfile_path = N'C:\demo\traces\sqletw.etl' )
WITH (MAX_MEMORY=4MB, MAX_EVENT_SIZE=4MB);
GO
Sesje zdarzeń mogą być ograniczone do serwera lub bazy danych. W powyższym przykładzie dodajesz dwa zdarzenia i używasz ścieżki śledzenia zdarzeń dla systemu Windows (ETW) z lokalizacją pliku. Po utworzeniu sesji należy ją uruchomić. Można to zrobić za pomocą języka T-SQL i ALTER sesji przy użyciu STATE opcji lub użyć SQL Server Management Studio dla niego.