Package0 to domyślny pakiet zdarzeń Extended Events, zawierający podstawowy zestaw obiektów diagnostycznych.
Package0 w architekturze Extended Events SQL Server
Package0 jest nazwą domyślnego pakietu systemu Extended Events w silniku Microsoft SQL Server. Pakiet pełni rolę kontenera obiektów wykorzystywanych przez sesje zdarzeń rozszerzonych. Nie jest pojedynczym zdarzeniem, gotową sesją monitorującą ani osobnym procesem działającym obok usługi SQL Server. W jego skład wchodzą standardowe elementy infrastruktury Extended Events, między innymi typy danych, mapy wartości, operatory porównań, akcje oraz cele odbierające dane zdarzeń.
Obiekty należące do pakietu są rozpoznawane po kwalifikowanej nazwie, w której występuje identyfikator pakietu. Przykładowo package0.event_file oznacza cel zapisujący dane do pliku, a package0.ring_buffer oznacza cel przechowujący zdarzenia w buforze pamięci. Zdarzenia opisujące pracę aparatu bazodanowego znajdują się zwykle w pakiecie sqlserver, natomiast obiekty związane z SQLOS są umieszczane w pakiecie sqlos. Elementy z różnych pakietów można wykorzystać razem w jednej sesji Extended Events.
Obiekty dostarczane przez pakiet package0
Najczęściej spotykanym obiektem z package0 jest cel event_file. Odbiera on dane z aktywnej sesji i zapisuje je w plikach o rozszerzeniu .xel. W definicji celu można ustawić między innymi parametr filename, określający ścieżkę i nazwę pliku, max_file_size, określający maksymalny rozmiar pojedynczego pliku, oraz max_rollover_files, określający liczbę przechowywanych plików rotacyjnych. Sam cel nie wybiera zdarzeń; otrzymuje tylko te dane, które zostały zarejestrowane przez skonfigurowaną sesję.
Drugim użytecznym celem jest ring_buffer, który przechowuje dane w pamięci procesu SQL Server. Zawartość tego celu może być odczytana bezpośrednio z metadanych sesji, ale nie jest przeznaczona do trwałego archiwizowania. Pakiet zawiera także standardowe akcje, takie jak collect_system_time i event_sequence, które mogą uzupełniać dane zdarzeń o czas systemowy lub numer kolejny zdarzenia. Dostępność konkretnego obiektu należy zawsze potwierdzić w widokach Extended Events właściwych dla używanej wersji SQL Server.
Rozpoznawanie i użycie elementów package0
Informacje o pakietach zarejestrowanych w silniku można sprawdzić w widoku dynamicznym sys.dm_xe_packages. Zapytanie SELECT name, description FROM sys.dm_xe_packages; pozwala potwierdzić obecność pakietu oraz odczytać opis zwracany przez jego moduł. Szczegółową listę obiektów można uzyskać z sys.dm_xe_objects, filtrując wynik według kolumny package_guid powiązanej z pakietem. W tym widoku typ obiektu jest rozróżniany między innymi jako event, target, action, type, map albo pred_compare.
Przykładowa definicja sesji może łączyć zdarzenie z pakietu sqlserver z celem z package0: CREATE EVENT SESSION [MonitorZapytan] ON SERVER ADD EVENT sqlserver.sql_statement_completed ADD TARGET package0.event_file (SET filename = N'C:\XE\MonitorZapytan.xel');. W takim układzie zdarzenie sql_statement_completed informuje o zakończeniu instrukcji T-SQL, a event_file zapisuje otrzymane rekordy. Dopiero aktywna sesja, uruchomiona poleceniem ALTER EVENT SESSION ... ON SERVER STATE = START, zaczyna przechwytywać dane.
Kontrola konfiguracji i interpretacja danych
Podczas analizy sesji nie należy utożsamiać obecności celu package0.event_file z faktem, że SQL Server aktualnie rejestruje zdarzenia. Definicja sesji jest przechowywana w katalogowych widokach Extended Events, natomiast jej bieżący stan należy sprawdzić w sys.dm_xe_sessions. Powiązania między sesją, zdarzeniami i celami można analizować za pomocą widoków sys.server_event_sessions, sys.server_event_session_events oraz sys.server_event_session_targets. Błędna ścieżka pliku, brak uprawnień do katalogu albo ograniczony rozmiar bufora mogą spowodować, że konfiguracja będzie formalnie poprawna, lecz dane nie będą dostępne w oczekiwanym miejscu.
Uprawnienia do odczytu informacji o pakietach zależą od wersji silnika. W SQL Server 2022 i nowszych do widoków związanych z tym obszarem może być wymagane uprawnienie VIEW SERVER PERFORMANCE STATE; w starszych wersjach stosowane jest między innymi VIEW SERVER STATE. Przy diagnostyce trzeba również rozróżnić typ celu: plik XEL pozwala zachować dane po restarcie usługi, a bufor pierścieniowy traci zawartość po opróżnieniu pamięci lub zakończeniu procesu. Package0 dostarcza więc wspólne elementy mechanizmu, ale zakres obserwacji wynika z wybranych zdarzeń, akcji, filtrów, celów i ustawień konkretnej sesji.