Udostępnij za pomocą


Szybki start: zdarzenia rozszerzone

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

Zdarzenia rozszerzone to uproszczona funkcja monitorowania wydajności, która umożliwia użytkownikom zbieranie danych w celu monitorowania i rozwiązywania problemów. Korzystając ze zdarzeń rozszerzonych, można wyświetlić szczegółowe informacje o operacjach wewnętrznych aparatu bazy danych, które są istotne dla celów monitorowania wydajności i rozwiązywania problemów. Aby dowiedzieć się więcej o zdarzeniach rozszerzonych, zobacz Omówienie zdarzeń rozszerzonych.

Ten artykuł ma na celu pomoc administratorom, inżynierom i deweloperom języka SQL, którzy są nowi w przypadku zdarzeń rozszerzonych i którzy chcą zacząć z niego korzystać i wyświetlać dane zdarzeń w ciągu zaledwie kilku minut.

Zdarzenia rozszerzone są również znane jako XEvents, a czasami tylko XE.

Po przeczytaniu tego artykułu możesz wykonać następujące czynności:

  • Zobacz, jak utworzyć sesję zdarzeń w programie SQL Server Management Studio (SSMS), z przykładowymi zrzutami ekranu.
  • Skoreluj zrzuty ekranu z równoważnymi instrukcjami Transact-SQL.
  • Poznaj szczegółowo terminy i pojęcia dotyczące interfejsu użytkownika programu SSMS i instrukcji języka T-SQL XEvents.
  • Dowiedz się, jak przetestować swoją sesję zdarzeń.
  • Omówienie wyników sesji, w tym:
    • Dostępne opcje magazynu wyników
    • Przetworzone i nieprzetworzone wyniki
    • Narzędzia do wyświetlania wyników na różne sposoby i w różnych skalach czasu
  • Zobacz, jak można wyszukiwać i odnajdywać wszystkie dostępne zdarzenia.
  • Omówienie relacji między widokami systemu zdarzeń rozszerzonych.

Wskazówka

Aby uzyskać więcej informacji na temat zdarzeń rozszerzonych w usłudze Azure SQL Database, w tym przykładów kodu, zobacz Zdarzenia rozszerzone w usłudze Azure SQL Database i usłudze Azure SQL Managed Instance.

Wymagania wstępne

Aby rozpocząć pracę, musisz:

  • Zainstaluj najnowszą wersję programu SQL Server Management Studio (SSMS).
  • Upewnij się, że Twoje konto ma CREATE ANY EVENT SESSION (wprowadzone w programie SQL Server 2022) lub ALTER ANY EVENT SESSIONuprawnienie serwera.
  • Ponadto w przypadku korzystania z programu SSMS i wyświetlania utworzonych sesji logowanie wymaga uprawnienia VIEW SERVER PERFORMANCE STATE.
  • W przypadku usługi Azure SQL Database, usługi Azure SQL Managed Instance i bazy danych SQL w Fabric pliki zdarzeń rozszerzonych są przechowywane w Azure Storage. Będziesz potrzebować konta usługi Azure Storage.

Szczegółowe informacje o zabezpieczeniach i uprawnieniach związanych z zdarzeniami rozszerzonymi są dostępne na końcu tego artykułu w dodatku.

Zdarzenia rozszerzone w programie SSMS

Program SSMS udostępnia w pełni funkcjonalny interfejs użytkownika (UI) dla Zdarzeń Rozszerzonych. Przy użyciu tego interfejsu użytkownika można wykonać wiele scenariuszy bez konieczności używania języka T-SQL lub dynamicznych widoków zarządzania (DMV).

W następnej sekcji zobaczysz kroki interfejsu użytkownika, aby utworzyć sesję zdarzeń rozszerzonych i wyświetlić dane, które raportuje. Po wykonaniu kroków praktycznych lub przejrzeniu ich w tym artykule możesz przeczytać o pojęciach związanych z krokami w celu dokładniejszego zrozumienia.

Tworzenie sesji zdarzeń w programie SSMS

Podczas tworzenia sesji zdarzeń rozszerzonych, instruujesz system:

  • Które zdarzenia cię interesują.
  • Jak chcesz, aby system raportował dane do ciebie.

Pokaz otwiera okno dialogowe Nowa sesja , pokazuje, jak używać jego czterech stron o nazwie:

  • General
  • Events
  • Magazyn danych
  • Zaawansowany

Tekst i pomocnicze zrzuty ekranu mogą być nieco inne w twojej wersji programu SSMS, ale nadal powinny być istotne dla wyjaśnienia podstawowych pojęć.

  1. Połącz się z instancją silnika bazy danych. Zdarzenia rozszerzone są obsługiwane od programu SQL Server 2014 (12.x), w usłudze Azure SQL Database i usłudze Azure SQL Managed Instance.

  2. W Eksploratorze obiektów wybierz pozycję Zarządzanie zdarzeniami rozszerzonymi>. W usłudze Azure SQL Database sesje zdarzeń są ograniczone do zakresu bazy danych, więc opcja Zdarzenia rozszerzone znajduje się w każdej bazie danych, a nie w obszarze Zarządzanie.

  3. Kliknij prawym przyciskiem myszy folder Sesje i wybierz pozycję Nowa sesja.... Okno dialogowe Nowa sesja... jest preferowane w Kreatorze nowej sesji, chociaż te dwa są podobne.

    Wskazówka

    W tych krokach samouczka nie klikaj OK, dopóki nie przejdziesz przez wszystkie cztery strony: Ogólne, Zdarzenia, Przechowywanie danych i Zaawansowane.

  4. Wybierz stronę Ogólne . Następnie wpisz YourSessionlub dowolną nazwę w polu tekstowym Nazwa sesji . Nie wybieraj jeszcze przycisku OK , ponieważ nadal musisz wprowadzić pewne szczegóły na innych stronach.

  5. Wybierz stronę Zdarzenia .

  6. W obszarze Biblioteka zdarzeń na liście rozwijanej wybierz tylko nazwy zdarzeń.

    • Wpisz sql_statement w polu tekstowym. To filtruje listę, aby pokazać tylko zdarzenia z sql_statement w nazwie.
    • Przewiń i wybierz zdarzenie o nazwie sql_statement_completed.
    • Wybierz przycisk > strzałki w prawo, aby przenieść zdarzenie do pola Wybrane zdarzenia .
  7. Na stronie Zdarzenia wybierz przycisk Konfiguruj . Spowoduje to otwarcie pola Opcje konfiguracji zdarzenia dla wybranych zdarzeń.

    Zrzut ekranu z Nowych zdarzeń sesji. > Wybierz z biblioteki zdarzeń. > sql_statement_completed jest wybrany. Przycisk konfiguruj jest następną akcją.

  8. Wybierz kartę Filtr (predykat). Następnie wybierz nowy wiersz filtru z napisem Kliknij tutaj, aby dodać klauzulę. W tym samouczku skonfigurujemy ten filtr (znany również jako predykat), aby przechwycić wszystkie SELECT instrukcje zawierające klauzulę HAVING.

  9. Z listy rozwijanej Pole wybierz pozycję sqlserver.sql_text.

    • W obszarze Operator wybierz pozycję like_i_sql_unicode_string. Tutaj, i w nazwie operatora oznacza brak rozróżniania wielkości liter.
    • W polu Wartość wpisz %SELECT%HAVING%. Tutaj znaki procentowe (%) są symbolami wieloznacznymi reprezentującymi dowolny ciąg znaków.

    Uwaga / Notatka

    W dwuczęściowej nazwie pola sqlserver jest nazwą pakietu i sql_text nazwą pola. Wybrane wcześniej zdarzenie sql_statement_completedmusi znajdować się w tym samym pakiecie co wybrane pole.

    Zrzut ekranu przedstawiający pole Konfiguruj filtr (predykat) > zdarzeń nowej sesji >>.>

  10. Wybierz stronę Magazyn danych.

  11. W obszarze Cele wybierz nowy wiersz typu celu z napisem Kliknij tutaj, aby dodać nowy cel. W tym samouczku napiszemy przechwycone dane zdarzeń rozszerzonych do pliku zdarzenia. Oznacza to, że dane zdarzenia są przechowywane w pliku, który można otworzyć i wyświetlić później. Począwszy od programu SQL Server 2019 (15.x), dane zdarzeń można również zapisywać w usłudze Azure Storage. W przypadku usługi Azure SQL Database, usługi Azure SQL Managed Instance i bazy danych SQL w usłudze Fabric pliki zdarzeń są zawsze przechowywane w usłudze Azure Storage.

    • Na liście rozwijanej Typ wybierz pozycję event_file.
  12. W obszarze Właściwości wpisz pełną ścieżkę i nazwę pliku w polu tekstowym Nazwa pliku na serwerze . Możesz również użyć przycisku Przeglądaj . Rozszerzenie nazwy pliku musi mieć wartość xel. W naszym przykładzie użyliśmy elementu C:\temp\YourSession_Target.xel.

    Zrzut ekranu nowej sesji magazynu danych - typ miejsca docelowego >>> event_file. >

  13. Wybierz stronę Zaawansowane . Domyślnie ten docelowy plik .xel sesji zdarzeń rozszerzonych powinien mieć minimalny wpływ lub nie mieć go wcale na wydajność serwera, jednak ustawienia na stronie Zaawansowane mogą być używane do zwiększania lub zmniejszania wykorzystania zasobów i opóźnienia.

    Zrzut ekranu nowej sesji zaawansowanej >.

  14. Wybierz przycisk OK u dołu, aby utworzyć tę sesję zdarzeń.

  15. Wróć do Eksploratora obiektów programu SSMS, otwórz lub odśwież folder Sessions i zobacz nowy węzeł sesji zdarzeń rozszerzonych YourSession . Sesja nie została jeszcze uruchomiona. W tym samouczku uruchomimy go później.

Edytowanie sesji zdarzeń w programie SSMS

W Eksploratorze obiektów programu SSMS możesz edytować sesję zdarzeń, klikając prawym przyciskiem myszy jego węzeł, a następnie wybierając polecenie Właściwości. Wyświetlane jest to samo wielostronicowe okno dialogowe.

Tworzenie sesji zdarzeń przy użyciu języka T-SQL

W programie SSMS możesz wygenerować skrypt języka T-SQL, aby utworzyć sesję zdarzeń w następujący sposób:

  • Kliknij prawym przyciskiem myszy węzeł sesji zdarzeń, a następnie wybierz pozycję Sesja skryptu jako > UTWÓRZ do > Schowka.
  • Wklej do dowolnego edytora tekstów.

Oto wygenerowana CREATE EVENT SESSION instrukcja języka T-SQL dla YourSession polecenia:

CREATE EVENT SESSION [YourSession]
    ON SERVER -- For SQL Server and Azure SQL Managed Instance
    -- ON DATABASE -- For Azure SQL Database
    ADD EVENT sqlserver.sql_statement_completed
    (
        ACTION(sqlserver.sql_text)
        WHERE
        ( [sqlserver].[like_i_sql_unicode_string]([sqlserver].[sql_text], N'%SELECT%HAVING%')
        )
    )
    ADD TARGET package0.event_file
    (SET filename=N'C:\temp\YourSession_Target.xel');
GO

Uwaga / Notatka

W usłudze Azure SQL Database użyj ON DATABASE zamiast ON SERVER.

Warunkowe usunięcie sesji zdarzenia

Przed instrukcją CREATE EVENT SESSION można warunkowo wykonać instrukcję DROP EVENT SESSION, jeśli już istnieje sesja o tej samej nazwie. Spowoduje to usunięcie istniejącej sesji. Bez tego próba utworzenia sesji o tej samej nazwie powoduje błąd.

IF EXISTS (SELECT *
      FROM sys.server_event_sessions
      WHERE name = 'YourSession')
BEGIN
    DROP EVENT SESSION YourSession
          ON SERVER;
END
GO

Uruchamianie i zatrzymywanie sesji zdarzeń przy użyciu języka T-SQL

Domyślnie, po utworzeniu sesji zdarzeń, nie jest ona uruchamiana automatycznie. Sesję zdarzeń można uruchomić lub zatrzymać w dowolnym momencie, używając następującej ALTER EVENT SESSION instrukcji języka T-SQL.

ALTER EVENT SESSION [YourSession]
      ON SERVER
    STATE = START; -- STOP;

Istnieje możliwość skonfigurowania sesji zdarzeń tak, aby automatycznie uruchamiała się po uruchomieniu wystąpienia aparatu bazy danych. Zobacz słowo kluczowe w STARTUP STATE = ONCREATE EVENT SESSION.

Interfejs użytkownika programu SSMS oferuje odpowiednie pole wyboru Uruchom sesję zdarzeń podczas uruchamiania serwera na stronie Nowa sesja - Ogólne>.

Przetestuj sesję zdarzeń

Przetestuj sesję zdarzeń, wykonując następujące kroki:

  1. W Eksploratorze obiektów kliknij prawym przyciskiem myszy węzeł sesji zdarzeń, a następnie wybierz pozycję Rozpocznij sesję.
  2. Po nawiązaniu połączenia z tym samym serwerem (lub tą samą bazą danych w usłudze Azure SQL Database), na którym utworzono sesję zdarzeń, uruchom następującą SELECT...HAVING instrukcję kilka razy. Rozważ zmianę wartości w klauzuli HAVING dla każdego uruchomienia, zmieniając ją na przemian między 2 a 3. Dzięki temu można zobaczyć różnice w wynikach.
  3. Kliknij prawym przyciskiem myszy węzeł sesji, a następnie wybierz polecenie Zatrzymaj sesję.
  4. Przeczytaj następną podsekcję dotyczącą sposobu wybierania i wyświetlania wyników.
SELECT c.name,
    COUNT(*) AS [Count-Per-Column-Repeated-Name]
FROM sys.syscolumns AS c
INNER JOIN sys.sysobjects AS o
    ON o.id = c.id
WHERE o.type = 'V'
    AND c.name LIKE '%event%'
GROUP BY c.name
HAVING Count(*) >= 3 --2     -- Try both values during session.
ORDER BY c.name;

Aby uzyskać kompletność, poniżej przedstawiono przykładowe dane wyjściowe z poprzedniego SELECT...HAVINGelementu .

/* Approximate output, 6 rows, all HAVING Count >= 3:
name                   Count-Per-Column-Repeated-Name
---------------------  ------------------------------
event_group_type       4
event_group_type_desc  4
event_session_address  5
event_session_id       5
is_trigger_event       4
trace_event_id         3
*/

Wyświetl dane sesji zdarzeń jako XML

W oknie zapytania w programie SSMS uruchom następującą SELECT instrukcję, aby wyświetlić dane zdarzenia przechwycone przez sesję. Każdy wiersz reprezentuje jedno zdarzenie. Zmienia CAST(... AS xml) typ danych kolumny z nvarchar na xml. Dzięki temu można wybrać wartość kolumny, aby otworzyć ją w nowym oknie, aby ułatwić czytanie.

Uwaga / Notatka

Element event_file docelowy zawsze wstawia część liczbową w xel nazwie pliku. Przed uruchomieniem następującego zapytania należy skopiować rzeczywistą pełną nazwę xel pliku zawierającego tę część liczbową i wkleić ją do instrukcji SELECT . W poniższym przykładzie część liczbowa to _0_131085363367310000.

SELECT object_name,
    file_name,
    file_offset,
    event_data,
    'CLICK_NEXT_CELL_TO_BROWSE_XML RESULTS!' AS [CLICK_NEXT_CELL_TO_BROWSE_XML_RESULTS],
    CAST(event_data AS XML) AS [event_data_XML]
-- TODO: In the SSMS results grid, click this XML cell
FROM sys.fn_xe_file_target_read_file(
    'C:\Temp\YourSession_Target_0_131085363367310000.xel', NULL, NULL, NULL
);

To zapytanie udostępnia dwa sposoby wyświetlania pełnych wyników dowolnego wiersza zdarzenia:

  • Uruchom polecenie SELECT w programie SSMS, a następnie wybierz komórkę w kolumnie event_data_XML .

  • Skopiuj ciąg XML z komórki w kolumnie event_data . Wklej do dowolnego edytora tekstów, takiego jak Notatnik, i zapisz plik z rozszerzeniem xml. Następnie otwórz plik w przeglądarce lub edytorze, który może wyświetlać dane XML.

Dane zdarzenia w formacie XML

Następnie zobaczymy część wyników, które są w formacie XML. Poniższy kod XML jest edytowany w celu zwięzłości. <data name="row_count"> Wyświetla wartość 6, która pasuje do naszych sześciu wyświetlanych wcześniej wierszy wyników. I widzimy całą SELECT instrukcję.

<event name="sql_statement_completed" package="sqlserver" timestamp="2016-05-24T04:06:08.997Z">
  <data name="duration">
    <value>111021</value>
  </data>
  <data name="cpu_time">
    <value>109000</value>
  </data>
  <data name="physical_reads">
    <value>0</value>
  </data>
  <data name="last_row_count">
    <value>6</value>
  </data>
  <data name="offset">
    <value>0</value>
  </data>
  <data name="offset_end">
    <value>584</value>
  </data>
  <data name="statement">
    <value>SELECT c.name,
            COUNT(*) AS [Count-Per-Column-Repeated-Name]
        FROM sys.syscolumns AS c
        INNER JOIN sys.sysobjects AS o
            ON o.id = c.id
        WHERE o.type = 'V'
            AND c.name LIKE '%event%'
        GROUP BY c.name
        HAVING Count(*) >= 3 --2     -- Try both values during session.
    ORDER BY c.name;</value>
      </data>
</event>

Wyświetlanie danych sesji zdarzeń w programie SSMS

Istnieje kilka zaawansowanych funkcji w interfejsie użytkownika programu SSMS, których można użyć do wyświetlania danych przechwyconych przez sesję zdarzeń. Aby uzyskać więcej informacji, zobacz Wyświetlanie danych zdarzeń w programie SQL Server Management Studio.

Możesz rozpocząć od opcji menu kontekstowego z etykietą Wyświetl dane docelowe i Oglądaj dane na żywo.

Wyświetlanie danych docelowych

W Eksploratorze obiektów programu SSMS możesz kliknąć prawym przyciskiem myszy węzeł docelowy znajdujący się w węźle sesji zdarzeń, na przykład package0.event_counter. W menu kontekstowym wybierz pozycję Wyświetl dane docelowe. Program SSMS wyświetla dane.

Wyświetlanie nie jest aktualizowane, ponieważ nowe zdarzenia występują w sesji. Możesz jednak ponownie wybrać pozycję Wyświetl dane docelowe .

Oglądaj dane na żywo

W Eksploratorze obiektów programu SSMS możesz kliknąć prawym przyciskiem myszy węzeł sesji zdarzeń. W menu kontekstowym wybierz pozycję Obejrzyj dane na żywo. Program SSMS wyświetla dane przychodzące w miarę kontynuowania ich odbierania w czasie rzeczywistym.

Pojęcia i terminy w rozszerzonych zdarzeniach

W poniższej tabeli wymieniono terminy używane dla zdarzeń rozszerzonych i opisano ich znaczenie.

Termin Description
event session Konstrukcja wyśrodkowana wokół jednego lub większej liczby zdarzeń oraz elementów pomocniczych, takich jak akcje, są obiektami docelowymi. Instrukcja CREATE EVENT SESSION tworzy każdą sesję zdarzeń. Możesz ALTER sesję zdarzeń uruchomić i zatrzymać w dowolnym momencie.

Sesja zdarzeń jest czasami nazywana po prostu sesją, gdy kontekst wskazuje, że chodzi o sesję zdarzeń.
Więcej szczegółów na temat sesji zdarzeń można znaleźć w rozdziale Sesje zdarzeń rozszerzonych.
event Określone wystąpienie w systemie, które jest obserwowane przez aktywną sesję monitorowania zdarzeń.

Na przykład sql_statement_completed zdarzenie reprezentuje moment ukończenia danej instrukcji języka T-SQL. Zdarzenie może zgłaszać czas trwania i inne dane.
target Element, który odbiera dane wyjściowe z przechwyconego zdarzenia. Obiekt docelowy wyświetla dane.

Przykłady obejmują element docelowy używany wcześniej w tym szybkim starcie event_file, oraz ring_buffer element docelowy, który zachowuje najnowsze zdarzenia w pamięci.
Dowolny rodzaj obiektu docelowego może być używany w dowolnej sesji wydarzeń. Aby uzyskać szczegółowe informacje, zobacz Cele dla zdarzeń rozszerzonych.
action Pole znane z zdarzenia. Dane z pola są wysyłane do miejsca docelowego. Pole akcji jest ściśle powiązane z filtrem predykatu.
predicate lub filtr Testowanie danych w polu zdarzenia, wykorzystywane tak, aby tylko interesujący podzbiór wystąpień zdarzeń był wysyłany do miejsca docelowego.

Na przykład filtr może obejmować wyłącznie te sql_statement_completed wystąpienia zdarzeń, w których instrukcja T-SQL zawierała ciąg HAVING.
package Kwalifikator nazwy dołączony do każdego elementu w zestawie elementów, które skupiają się wokół rdzenia zdarzeń.

Na przykład pakiet może zawierać zdarzenia dotyczące tekstu T-SQL. Jedno zdarzenie może dotyczyć całego języka T-SQL w partii. Tymczasem kolejne węższe zdarzenie dotyczy poszczególnych instrukcji języka T-SQL. Ponadto, dla dowolnej instrukcji T-SQL, istnieje zdarzenie started oraz zdarzenie completed.
W pakiecie ze zdarzeniami zawarte są także pola odpowiednie dla tych zdarzeń. Większość celów znajduje się w package0 i są używane ze zdarzeniami z wielu innych pakietów.

Rozszerzone scenariusze zdarzeń i szczegóły użycia

Istnieje wiele scenariuszy używania zdarzeń rozszerzonych do monitorowania i rozwiązywania problemów z aparatem bazy danych i obciążeniami zapytań. W poniższych artykułach przedstawiono przykłady użycia scenariuszy związanych z blokadą:

Jak odnajdywać zdarzenia dostępne w pakietach

Następujące zapytanie zwraca wiersz dla każdego dostępnego zdarzenia, którego nazwa zawiera trzy znaki ciągu sql. Możesz edytować klauzulę, LIKE aby wyszukać różne nazwy zdarzeń. Zestaw wyników identyfikuje również pakiet zawierający zdarzenie.

SELECT -- Find an event you want.
    p.name AS [Package-Name],
    o.object_type,
    o.name AS [Object-Name],
    o.description AS [Object-Descr],
    p.guid AS [Package-Guid]
FROM sys.dm_xe_packages AS p
INNER JOIN sys.dm_xe_objects AS o
    ON p.guid = o.package_guid
WHERE o.object_type = 'event' --'action'  --'target'
    AND p.name LIKE '%'
    AND o.name LIKE '%sql%'
ORDER BY p.name,
    o.object_type,
    o.name;

Poniższy przykładowy wynik przedstawia zwrócony wiersz, przekształcony tutaj do formatu column name = value. Dane pochodzą ze sql_statement_completed zdarzenia, które zostało użyte w poprzednich przykładowych krokach. Opis obiektu (zdarzenie, w tym przykładzie) służy jako ciąg dokumentacji.

Package-Name = sqlserver
object_type  = event
Object-Name  = sql_statement_completed
Object-Descr = Occurs when a Transact-SQL statement has completed.
Package-Guid = 655FD93F-3364-40D5-B2BA-330F7FFB6491

Znajdowanie zdarzeń przy użyciu interfejsu użytkownika programu SSMS

Inną opcją wyszukiwania zdarzeń według nazwy jest użycie okna dialogowego Nowa biblioteka zdarzeń > sesji>, które jest wyświetlane na poprzednim zrzucie ekranu. Możesz wpisać częściową nazwę zdarzenia i znaleźć wszystkie pasujące nazwy zdarzeń.

Klasy zdarzeń śledzenia SQL

Opis używania zdarzeń rozszerzonych z klasami zdarzeń śledzenia SQL i kolumnami jest dostępny pod adresem: Wyświetl rozszerzone zdarzenia równoważne klasom zdarzeń śledzenia SQL.

Śledzenie zdarzeń dla systemu Windows (ETW)

Opisy korzystania z Rozszerzonych Zdarzeń (Extended Events) z Śledzeniem Zdarzeń dla systemu Windows (ETW) są dostępne pod następującym adresem:

Sesje zdarzeń systemowych

W SQL Server i Azure SQL Managed Instance domyślnie tworzonych jest kilka sesji zdarzeń systemowych, które są skonfigurowane do uruchamiania wraz z uruchomieniem aparatu bazy danych. Podobnie jak większość sesji zdarzeń, zużywają niewielką ilość zasobów i nie mają znaczącego wpływu na wydajność pracy. Firma Microsoft zaleca, aby te sesje pozostały włączone i uruchomione. Sesje zdrowotne, szczególnie sesja system_health, są często przydatne do monitorowania i rozwiązywania problemów.

Te sesje zdarzeń można zobaczyć w Eksploratorze obiektów programu SSMS w obszarze Zarządzanie sesjami > zdarzeń > rozszerzonych. Na przykład w programie SQL Server następujące sesje zdarzeń systemowych to:

  • AlwaysOn_health
  • system_health
  • telemetry_events

Dostawca programu PowerShell

Zdarzenia rozszerzone można zarządzać przy użyciu dostawcy programu SQL Server PowerShell. Aby uzyskać więcej informacji, zobacz Use the PowerShell Provider for Extended Events (Używanie dostawcy programu PowerShell dla zdarzeń rozszerzonych).

Widoki systemowe

Widoki systemowe dla zdarzeń rozszerzonych obejmują:

  • Widoki katalogu: informacje o sesjach zdarzenia zdefiniowanych przez program CREATE EVENT SESSION.
  • Dynamiczne widoki zarządzania (DMV): informacje o aktywnych (uruchomionych) sesjach zdarzeń.

SELECTs i JOINs z widoków systemowych dla zdarzeń rozszerzonych w programie SQL Server zawierają informacje o:

  • Jak połączyć widoki
  • Kilka przydatnych zapytań na podstawie tych widoków
  • Korelacja między:
    • Wyświetlanie kolumn
    • CREATE EVENT SESSION Klauzule
    • Interfejs użytkownika programu SSMS

Dodatek: Zapytania do znajdowania posiadaczy uprawnień do Zdarzeń Rozszerzonych

Uprawnienia wymienione w tym artykule to:

  • ALTER ANY EVENT SESSION
  • VIEW SERVER STATE
  • CONTROL SERVER

Poniższa SELECT...UNION ALL instrukcja zwraca wiersze, które pokazują, kto ma niezbędne uprawnienia do tworzenia sesji zdarzeń i wykonywania zapytań dotyczących widoków wykazu systemu dla zdarzeń rozszerzonych.

-- Ascertain who has the permissions listed in the ON clause.
-- 'CONTROL SERVER' permission includes all lower permissions like
-- 'ALTER ANY EVENT SESSION' and 'VIEW SERVER STATE'.
SELECT 'Owner-is-Principal' AS [Type-That-Owns-Permission],
    NULL AS [Role-Name],
    prin.name AS [Owner-Name],
    PERM.permission_name COLLATE Latin1_General_CI_AS_KS_WS AS [Permission-Name]
FROM sys.server_permissions AS PERM
INNER JOIN sys.server_principals AS prin
    ON prin.principal_id = PERM.grantee_principal_id
WHERE PERM.permission_name IN (
    'CREATE ANY EVENT SESSION',
    'ALTER ANY EVENT SESSION',
    'VIEW SERVER PERFORMANCE STATE',
    'VIEW SERVER STATE',
    'CONTROL SERVER'
)
UNION ALL
-- Plus check for members of the 'sysadmin' fixed server role,
-- because 'sysadmin' includes the 'CONTROL SERVER' permission.
SELECT 'Owner-is-Role',
    prin.name, -- [Role-Name]
    CAST((IsNull(pri2.name, N'No members')) AS NVARCHAR(128)),
    NULL
FROM sys.server_role_members AS rolm
RIGHT JOIN sys.server_principals AS prin
    ON prin.principal_id = rolm.role_principal_id
LEFT JOIN sys.server_principals AS pri2
    ON rolm.member_principal_id = pri2.principal_id
WHERE prin.name = 'sysadmin';

HAS_PERMS_BY_NAME, funkcja

SELECT Poniższa instrukcja zgłasza twoje uprawnienia. Opiera się na wbudowanej funkcji HAS_PERMS_BY_NAME.

Ponadto, jeśli masz uprawnienia do tymczasowego występowania w roli innych identyfikatorów logowania, możesz usunąć komentarz z instrukcji EXECUTE AS i REVERT, i zobaczyć, czy inne identyfikatory logowania mają ALTER ANY EVENT SESSION uprawnienie.

--EXECUTE AS LOGIN = 'LoginNameHere';
SELECT HAS_PERMS_BY_NAME(NULL, NULL, 'ALTER ANY EVENT SESSION');
--REVERT;