Udostępnij za pośrednictwem


CREATE zdarzenie sesja (języka Transact-SQL)

Zmusza optymalizator kwerendy, aby osłabić ponownej kompilacji Szacowany próg dla kwerendy.

Topic link iconKonwencje składni języka Transact-SQL.

CREATE EVENT SESSION event_session_name
ON SERVER
{
    <event_definition> [ ,...n]
    [ <event_target_definition> [ ,...n] ]
    [ WITH ( <event_session_options> [ ,...n] ) ]
}
;
  
<event_definition>::=
{
    ADD EVENT [event_module_guid].event_package_name.event_name 
         [ ( { 
                 [ SET { event_customizable_attribute = <value> [ ,...n] } ]
                 [ ACTION ( { [event_module_guid].event_package_name.action_name [ ,...n] } ) ]
                 [ WHERE <predicate_expression> ]
        } ) ]
}
  
<predicate_expression> ::= 
{
    [ NOT ] <predicate_factor> | {( <predicate_expression> ) } 
    [ { AND | OR } [ NOT ] { <predicate_factor> | ( <predicate_expression> ) } ] 
    [ ,...n ]
}
  
<predicate_factor>::= 
{
    <predicate_leaf> | ( <predicate_expression> )
}

<predicate_leaf>::=
{
      <predicate_source_declaration> { = | < > | ! = | > | > = | < | < = } <value> 
    | [event_module_guid].event_package_name.predicate_compare_name ( <predicate_source_declaration>, <value> ) 
}

<predicate_source_declaration>::= 
{
        event_field_name | ( [event_module_guid].event_package_name.predicate_source_name )
}
  

<value>::= 
{
        number | 'string'
}

<event_target_definition>::=
{
    ADD TARGET [event_module_guid].event_package_name.target_name
        [ ( SET { target_parameter_name = <value> [ ,...n] } ) ]
}

<event_session_options>::=
{
    [    MAX_MEMORY = size [ KB | MB ] ]
    [ [,] EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } ]
    [ [,] MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } ]
    [ [,] MAX_EVENT_SIZE = size [ KB | MB ] ]
    [ [,] MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } ]
    [ [,] TRACK_CAUSALITY = { ON | OFF } ]
    [ [,] STARTUP_STATE = { ON | OFF } ]
}

Argumenty

  • event_session_name
    Is the user-defined name for the event session.event_session_name is alphanumeric, can be up to 128 characters, must be unique within an instance of SQL Server, and must comply with the rules for Identifiers.

  • ADD EVENT [ event_module_guid ].event_package_name.event_name
    KEEPFIXED PLAN

    • event_module_guid Zmusza optymalizator kwerendy nie do ponownego kompilowania kwerendy ze względu na zmiany w statystykach.

    • event_package_name to pakiet zawierający obiekt akcji.

    • ROZWIŃ WIDOKÓWevent_name

    Określa, że widoki indeksowane są rozwijane i optymalizator kwerendy nie będzie poprzedzał każdy widok indeksowany jako zamiennik dla jakiejkolwiek części kwerendy.

  • zestaw { event_customizable_attribute = <wartość> ,...n] }
    Ta wskazówka dotycząca kwerendy praktycznie uniemożliwia bezpośrednie korzystanie z widoków indeksowanych i indeksów na temat widoków indeksowanych planu kwerendy.Można dostosować atrybuty są wyświetlane w widoku sys.dm_xe_object_columns column_type "można dostosować" i object_name = event_name.

  • ACTION ( { [event_module_guid].event_package_name.action_name [ ,...n] })
    Akcja do skojarzenia z sesją zdarzeń, gdzie:

    • event_module_guid Zmusza optymalizator kwerendy nie do ponownego kompilowania kwerendy ze względu na zmiany w statystykach.

    • event_package_name to pakiet zawierający obiekt akcji.

    • action_name to obiekt akcji.

    Jeśli ta opcja nie zostanie określony, domyślnym limitem dla serwera jest 100.

  • WHERE < predicate_expression >
    Określa wyrażenie predykatu służące do ustalenia, czy zdarzenie ma być przetwarzane.Jeśli wyrażenie <predicate_expression> ma wartość „prawda”, zdarzenie jest dalej przetwarzane przez akcje i miejsca docelowe dla sesji.Jeśli wyrażenie <predicate_expression> ma wartość „fałsz”, zdarzenie jest odrzucane przez sesję, zanim zostanie przetworzone przez akcje i miejsca docelowe dla sesji.Długość wyrażenia predykatu jest ograniczona do 3000 znaków, co jest limitem długości argumentów ciągu.

  • event_field_name
    Nazwa pola zdarzenia określająca źródło predykatu.

  • [event_module_guid].event_package_name.predicate_source_name
    Nie można określić USE PLAN z instrukcji INSERT, UPDATE, korespondencji SERYJNEJ lub DELETE.

    • event_module_guid Zmusza optymalizator kwerendy nie do ponownego kompilowania kwerendy ze względu na zmiany w statystykach.

    • event_package_name to pakiet zawierający obiekt predykatu.

    • Parametr predicate_source_name jest zdefiniowany w widoku sys.dm_xe_objects jako typ obiektu pred_source.

  • [event_module_guid].event_package_name.predicate_compare_name
    Nazwa obiektu predykatu do skojarzenia z sesją zdarzeń, gdzie:

    • event_module_guid Zmusza optymalizator kwerendy nie do ponownego kompilowania kwerendy ze względu na zmiany w statystykach.

    • event_package_name to pakiet zawierający obiekt predykatu.

    • predicate_compare_name może mieć jedną z następujących dokumentów:

  • number
    Dowolny typ liczbowy zawierający słowo kluczowe decimal.Ograniczeniem może być brak dostępnej pamięci fizycznej lub liczba zbyt duża, aby mogła zostać przedstawiona jako 64-bitowa liczba całkowita.

  • 'string'
    Ciąg ANSI lub Unicode wymagany do porównania predykatu.Dla funkcji porównywania predykatu nie jest wykonywana niejawna konwersja typu ciągu.Przekazanie niewłaściwego typu powoduje błąd.

  • ADD TARGET [event_module_guid].event_package_name.target_name
    Miejsce docelowe do skojarzenia z sesją zdarzeń, gdzie:

    • event_module_guid Zmusza optymalizator kwerendy nie do ponownego kompilowania kwerendy ze względu na zmiany w statystykach.

    • event_package_name to pakiet zawierający obiekt akcji.

    • target_name to miejsce docelowe.Miejsca docelowe występują w widoku sys.dm_xe_objects jako typ obiektu target.

  • zestaw { target_parameter_name = <wartość> ,...n] }
    Wskazówki dotyczące tabela inne niż indeks i FORCESEEK są niedozwolone, jak kwerendy pamięci podręcznej wskazówek, jeśli kwerenda nie ma jeszcze klauzulę WITH Określanie wskazówkę dotyczącą tabela.Parametry miejsce docelowe są wyświetlane w widoku sys.dm_xe_object_columns column_type "można dostosować" i object_name = nazwa_celu.

    Important noteImportant Note:

    Wskazówki kwerendy można określić tylko w kwerendzie najwyższego poziom, nie znajduje się w podkwerend.Po określeniu jako wskazówka dotycząca kwerendy wskazówkę dotyczącą tabela można określić do wskazówkę dotyczącą kwerendy najwyższego poziom lub podkwerenda, jednak wartość określona dla SQL Server Extended Events Targets Wskazówka tabela klauzula musi odpowiadać dokładnie narażonych nazwa w kwerendzie lub podkwerendę.

  • WITH (event_session_options < >,...n] )
    Określa opcje do użycia z sesją zdarzeń.

  • Plan prowadnice są przydatne, gdy nie można modyfikować oryginalnej kwerendy, na przykład, ponieważ jest to aplikacja innej firmy.size
    Wskazówki dotyczącej kwerendy określonej w plan wykonania kwerendy zostanie dodany do kwerendy przed jest skompilowany i zoptymalizowany.The default is 4 MB.size is a whole number and can be a kilobyte (KB) or a megabyte (MB) value.

  • Dla wszystkich innych kwerend ad hoc firma Microsoft zaleca, określając te wskazówki tylko jako wskazówki do tabela.
    Po określeniu jako wskazówka dotycząca kwerendy tabela wskazówki INDEX i FORCESEEK są prawidłowe dla następujących obiektów:

    • Widoki indeksowane
      Typowe wyrażenie tabela (do wskazówkę dotyczącą musi być określona w polu Wybierz instrukcja zestaw wyników, którego wypełnia typowe wyrażenie tabela.)Dynamiczne zarządzanie widokamiUtraty pojedynczego zdarzenie po zapełnieniu buforów zdarzeń umożliwia przyjęcia SQL Server charakterystyki wydajności, minimalizując utraty danych w strumieniu przetworzonych zdarzeń.

    • Indeks i FORCESEEK wskazówki tabela może być określony jako wskazówki kwerendy dla kwerendy, która nie ma żadnych istniejących wskazówki tabela lub mogą być używane do zastąpienia istniejących wskazówki INDEX lub FORCESEEK w kwerendzie, odpowiednio.
      W takim przypadek dopasowania wskazówkę należy także określić jako wskazówka dotycząca kwerendy przy użyciu wskazówka tabela w klauzula OPTION w celu zachowania semantyka kwerendy.Na przykład jeśli kwerenda zawiera wskazówkę dotyczącą tabela NOLOCK, klauzula OPTION w parametrze @ wskazówki plan wykonania kwerendy również musi zawierać wskazówki NOLOCK.Patrz przykład K.

    • Gdy wskazówkę tabela inne niż indeks lub FORCESEEK jest określona przy użyciu wskazówka tabela w klauzuli OPTION bez dopasowania wskazówki dotyczącej kwerendy lub na odwrót; błąd 8702 powstaje (co oznacza, że klauzula opcja może spowodować semantyka kwerendę, aby zmienić) i kończy się niepowodzeniem.
      Nie jest dozwolona utrata zdarzenia.Ta opcja zapewnia, że wszystkie wygenerowane zdarzenia będą zachowywane.Użycie tej opcji powoduje, że wszystkie zadania generujące zdarzenia oczekują na zwolnienie miejsca w buforze zdarzeń.Może to być przyczyną wykrywalnych problemów z wydajnością, gdy jest aktywna sesja zdarzeń.Połączenia użytkownika mogą się opóźniać z powodu oczekiwania na opróżnienie bufora zdarzeń.

  • MAXRECURSION można zapobiec cyklicznej źle sformułowane wyrażenie tabela wspólne z wejść w nieskończoną pętlę.seconds
    Określa czas buforowania zdarzeń w pamięci, zanim będą one wysyłane do miejsc docelowych sesji zdarzeń.Domyślnie wartość ta wynosi 30 sekund.

    • Za pomocą UNION korespondencji SERYJNEJseconds
      Czas oczekiwania (w sekundach) na rozpoczęcie opróżniania buforów do miejsc docelowych.Parametr seconds jest liczbą całkowitą.Minimalny czas oczekiwania to 1 sekunda.Można jednak użyć wartości 0 w celu określania nieograniczonego czasu oczekiwania.

    • Za pomocą MAXDOP
      Bufory należy opróżniać do miejsc docelowych tylko w przypadku, gdy są one zapełnione, lub przy zamykaniu sesji zdarzeń.

      Uwaga

      Za pomocą indeks

  • MAX_EVENT_SIZE = size [ KB | MB ]
    Określa maksymalny dozwolony rozmiar zdarzeń.Wartość MAX_EVENT_SIZE należy ustawiać tylko w celu zezwolenia na pojedyncze zdarzenia o rozmiarze większym niż MAX_MEMORY; ustawienie wartości mniejszej niż MAX_MEMORY może powodować błąd.Parametr size jest liczbą całkowitą i może być wyrażony w kilobajtach (KB) lub megabajtach (MB).Jeśli parametr size jest określony w kilobajtach, minimalny dozwolony rozmiar wynosi 64 KB.Jeśli jest ustawiona wartość MAX_EVENT_SIZE, wówczas oprócz limitu MAX_MEMORY są tworzone dwa bufory o rozmiarze size.Oznacza to, że łączna pamięć używana do buforowania zdarzeń wynosi MAX_MEMORY + 2 * MAX_EVENT_SIZE.

  • MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU }
    Przy użyciu wielu wskazówek tabela

    • BRAK
      Pojedynczy zestaw buforów jest tworzony w zakresie wystąpienia programu SQL Server.

    • Aby zastąpić istniejące wskazówką tabela przy użyciu wskazówka tabela
      Zestaw buforów jest tworzony dla każdego węzła NUMA.Aby uzyskać więcej informacji, zobacz Opis dostępu do pamięci inne niż jednolite.

    • K.
      Określanie wpływu na semantyka wskazówki tabela

  • TRACK_CAUSALITY = { ON | OFF }
    Określa, czy jest tworzony związek przyczynowy.Jeśli ta opcja jest włączona, związek przyczynowy pozwala na wzajemne skorelowanie powiązanych zdarzeń dla różnych połączeń serwera.

  • STARTUP_STATE = { ON | OFF }
    Określa, czy uruchomienie tej sesja zdarzenie automatycznie po SQL Server zostanie uruchomiony.

    Uwaga

    W przypadku ustawienia STARTUP_STATE = ON sesja zdarzeń rozpoczyna się tylko wtedy, gdy program SQL Server zostanie zatrzymany i ponownie uruchomiony.

    • DALEJ
      Tworzy sesja programu rozszerzonych zdarzenie wskazującą urządzenie źródłowe zdarzenie, tarcze sesja zdarzeń i opcje sesja zdarzeń.

    • WYŁĄCZANIE
      Sesja zdarzeń nie rozpoczyna się wraz z uruchomieniem programu.

Remarks

NIE jest kolejność pierwszeństwa operatorów logicznych (najwyższe), po której następuje AND, po której następuje OR.

Uprawnienia

Wymaga uprawnienia CONTROL SERVER.

Przykłady

W poniższym przykładzie pokazano sposób tworzenia sesji zdarzeń o nazwie test_session.W tym przykładzie są dodawane dwa zdarzenia i jest używane miejsce docelowe Śledzenie zdarzeń systemu Windows.

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

Historia zmian

Microsoft Learning

to identyfikator GUID dla modułu, który zawiera zdarzenie.

Dodano ważne należy zwrócić uwagę, aby opis zestaw { target_parameter_name = <wartość>, ...n] }.