Event Target to miejsce docelowe, do którego trafiają dane zarejestrowane przez sesję rozszerzonych zdarzeń.
Event Target w SQL Server Extended Events
Event Target to obiekt konfigurowany w sesji SQL Server Extended Events, który odbiera dane wygenerowane przez zarejestrowane zdarzenia. Samo zdarzenie opisuje, co zaszło w silniku, na przykład wykonanie instrukcji T-SQL, oczekiwanie na zasób, błąd, zakleszczenie albo zmianę stanu połączenia. Target określa natomiast, gdzie SQL Server zapisze lub zgromadzi informacje o takim zdarzeniu. Jedna sesja Extended Events może mieć więcej niż jeden target, dzięki czemu te same dane mogą być jednocześnie zapisywane do pliku i udostępniane do szybkiego podglądu w pamięci.
Target nie jest filtrem ani źródłem zdarzeń. Filtrowanie odbywa się w definicji eventu, zwykle przez predykat, na przykład ograniczenie do określonego identyfikatora sesji, nazwy bazy danych lub czasu trwania operacji. Dopiero zdarzenia spełniające warunki trafiają do targetu. W praktyce właściwy dobór targetu decyduje o tym, czy dane będą dostępne po restarcie usługi, jak długo można je analizować oraz jaki narzut obserwacja wywoła podczas pracy instancji SQL Server.
Najczęściej używane typy miejsc docelowych
Target event_file zapisuje zdarzenia w pliku rozszerzeń zdarzeń. Jest przeznaczony do trwałego gromadzenia śladu diagnostycznego i może korzystać z parametrów określających maksymalny rozmiar pliku oraz liczbę plików przechowywanych w ramach rotacji. Plik można później odczytać funkcją sys.fn_xe_file_target_read_file. Ten sposób jest użyteczny przy analizie problemów występujących okresowo, ponieważ dane nie znikają natychmiast po przepełnieniu bufora pamięci.
Target ring_buffer przechowuje dane w pamięci w postaci XML. Po osiągnięciu limitu starsze wpisy są zastępowane przez nowsze, więc nie zapewnia trwałej historii. Zawartość można odczytać z widoku sys.dm_xe_session_targets, łącząc ją z informacjami o sesji Extended Events. Inne targety mają wyspecjalizowane zastosowania: event_counter zlicza wystąpienia zdarzeń, histogram grupuje wartości wybranego pola, a pair_matching pomaga łączyć zdarzenia rozpoczynające i kończące określoną operację. Dostępność i parametry konkretnego targetu zależą od wersji SQL Server.
Konfiguracja sesji i odczyt zebranych danych
Target dodaje się do definicji sesji za pomocą instrukcji CREATE EVENT SESSION albo później przez ALTER EVENT SESSION. Przykładowa konfiguracja może zawierać zdarzenie sqlserver.sql_statement_completed oraz target package0.event_file. Po utworzeniu sesji trzeba ją uruchomić instrukcją ALTER EVENT SESSION ... ON SERVER STATE = START. Jeżeli sesja ma działać po restarcie usługi, należy uwzględnić opcję STARTUP_STATE = ON; bez niej konfiguracja może pozostać zatrzymana po ponownym uruchomieniu instancji.
Podczas analizy trzeba rozróżnić konfigurację targetu od danych, które faktycznie zostały zapisane. Widoki katalogowe sys.server_event_sessions, sys.server_event_session_events i sys.server_event_session_targets pokazują odpowiednio sesje, zdarzenia i targety zdefiniowane na poziomie serwera. Stan uruchomienia oraz bieżące dane sesji można sprawdzać także w widokach dynamicznych Extended Events. Przy odczycie pliku warto uwzględnić wszystkie pliki rotacji, ponieważ funkcja odczytująca może otrzymać ścieżkę z symbolem wieloznacznym. Sam plik nie powinien być analizowany jako zwykły tekst, ponieważ zapis ma format XML właściwy dla event_file.
Dobór Event Targetu w diagnostyce instancji
Wybór targetu powinien wynikać z celu pomiaru. Do krótkiego podglądu zdarzeń w trakcie testu może wystarczyć ring_buffer, ale jego zawartość jest ograniczona pamięcią i może zostać utracona po zatrzymaniu sesji lub restarcie instancji. Do dłuższej obserwacji problemu z wydajnością, błędami albo zakleszczeniami właściwszy jest event_file z kontrolowanym rozmiarem oraz rotacją. Przy projektowaniu sesji należy ograniczać liczbę zbieranych pól i stosować filtry, ponieważ rejestrowanie bardzo częstych zdarzeń, takich jak zakończenie każdej instrukcji, może zwiększyć obciążenie oraz szybko zużyć miejsce na dysku.
Diagnostyka powinna obejmować również uprawnienia do katalogu docelowego, dostępność wolnego miejsca i zgodność ścieżki z systemem operacyjnym serwera. Błędna lokalizacja pliku, brak uprawnień konta usługi SQL Server albo nieprawidłowy parametr targetu może sprawić, że sesja istnieje, lecz nie dostarcza oczekiwanych danych.