Compartilhar via


ALTER EVENT SESSION (Transact-SQL)

Aplica-se a:SQL ServerInstância Gerenciada de SQL do Azure

Inicia ou interrompe uma sessão de evento ou altera uma configuração de sessão de evento.

Convenções de sintaxe de Transact-SQL

Sintaxe

ALTER EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
    [ [ {  <add_drop_event> [ , ...n ] }
       | { <add_drop_event_target> [ , ...n ] } ]
    [ WITH ( <event_session_options> [ , ...n ] ) ]
    ]
    | [ STATE = { START | STOP } ]
}

<add_drop_event>::=
{
    [ ADD EVENT <event_specifier>
         [ ( {
                 [ SET { event_customizable_attribute = <value> [ , ...n ] } ]
                 [ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
                 [ WHERE <predicate_expression> ]
        } ) ]
   ]
   | DROP EVENT <event_specifier> }

<event_specifier> ::=
{
[event_module_guid].event_package_name.event_name
}
<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'
}

<add_drop_event_target>::=
{
    ADD TARGET <event_target_specifier>
        [ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
    | DROP TARGET <event_target_specifier>
}

<event_target_specifier>::=
{
    [event_module_guid].event_package_name.target_name
}

<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 } ]
    [ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}

Argumentos

event_session_name

O nome de uma sessão de evento existente.

STATE = START | PARAR

Inicia ou para a sessão de evento. O STATE argumento deve ser especificado por conta própria. Ele não pode ser combinado com outros argumentos na mesma ALTER EVENT SESSION instrução.

ADICIONAR EVENT_SPECIFIER DE EVENTO <>

Identifica um evento a ser associado à sessão de evento. < > event_specifier está na forma de [event_module_guid].event_package_name. event_name, em que:

  • event_module_guid é o GUID do módulo que contém o evento.
  • event_package_name é o pacote que contém o evento.
  • event_name é o nome do evento.

Os eventos disponíveis podem ser encontrados executando a seguinte consulta:

SELECT o.name AS event_name,
       o.description AS event_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'event'
ORDER BY event_name ASC;

SET { event_customizable_attribute = <value> [ ,... n ] }

Atributos personalizáveis para o evento.

Atributos personalizáveis para um determinado evento podem ser encontrados executando a seguinte consulta:

SELECT object_name,
       name AS column_name,
       type_name,
       column_value,
       description
FROM sys.dm_xe_object_columns
WHERE object_name = 'event-name-placeholder'
      AND column_type = 'customizable'
ORDER BY column_name ASC;

ACTION ( { [event_module_guid].event_package_name. action_name [ ,... n ] })

A ação a ser associada ao evento, em que:

  • event_module_guid é o GUID do módulo que contém a ação.
  • event_package_name é o pacote que contém a ação.
  • action_name é o nome da ação.

As ações disponíveis podem ser encontradas executando a seguinte consulta:

SELECT o.name AS action_name,
       o.description AS action_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'action'
ORDER BY action_name ASC;

ONDE <predicate_expression>

Especifica a expressão de predicado usada para determinar se um evento deve ser processado. Se <predicate_expression> for verdadeira, o evento será processado mais detalhadamente pelas ações e pelos destinos da sessão. Se <predicate_expression> for false, o evento será descartado, evitando ação adicional e processamento de destino. Cada expressão de predicado é limitada a 3.000 caracteres.

event_field_name

O nome do campo de evento que identifica a origem do predicado.

Os campos de um evento podem ser encontrados executando a seguinte consulta:

SELECT oc.name AS field_name,
       oc.type_name AS field_type,
       oc.description AS field_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns AS oc
ON o.name = oc.object_name
   AND
   o.package_guid = oc.object_package_guid
WHERE o.object_type = 'event'
      AND
      o.name = 'event-name-placeholder'
      AND
      oc.column_type = 'data'
ORDER BY field_name ASC;

[event_module_guid]. event_package_name. predicate_source_name

O nome da origem do predicado global em que:

  • event_module_guid é o GUID do módulo que contém o evento.
  • event_package_name é o pacote que contém o objeto de origem do predicado.
  • predicate_source_name é o nome da origem do predicado.

As fontes de predicado podem ser encontradas executando a seguinte consulta:

SELECT o.name AS predicate_source_name,
       o.description AS predicate_source_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
ORDER BY predicate_source ASC;

[event_module_guid].event_package_name.predicate_compare_name

O nome do objeto comparador de predicado, em que:

  • event_module_guid é o GUID do módulo que contém o evento.
  • event_package_name é o pacote que contém o objeto comparador de predicado.
  • predicate_compare_name é o nome do comparador de predicado.

Comparadores de predicado podem ser encontrados executando a seguinte consulta:

SELECT o.name AS predicate_comparator_name,
       o.description AS predicate_comparator_description,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
ORDER BY predicate_comparator ASC;

número

Qualquer tipo numérico que possa ser representado como um inteiro de 64 bits.

'string'

Uma cadeia de caracteres ANSI ou Unicode, conforme exigido pelo comparador de predicado. Nenhuma conversão de tipo de cadeia de caracteres implícita é executada para as funções de comparação de predicado. Passar o valor de um tipo inesperado resulta em um erro.

EVENTO <DE DROP event_specifier>

Identifica um evento a ser removido da sessão de evento. O especificador de eventos está na forma de [event_module_guid]. event_package_name. event_name, em que:

  • event_module_guid é o GUID do módulo que contém o evento.

  • event_package_name é o pacote que contém o objeto de ação.

  • event_name é o objeto de evento.

    < > event_specifier deve identificar um evento que foi adicionado anteriormente à sessão de evento.

ADICIONAR EVENT_TARGET_SPECIFIER DE DESTINO <>

Identifica um destino a ser associado a uma sessão de evento. O especificador de destino de evento está na forma de [event_module_guid]. event_package_name. target_name, em que:

  • event_module_guid é o GUID do módulo que contém o evento.
  • event_package_name é o pacote que contém o objeto de ação.
  • target_name é o nome do destino.

Os destinos disponíveis podem ser encontrados executando a seguinte consulta:

SELECT o.name AS target_name,
       o.description AS target_description,
       o.capabilities_desc,
       p.name AS package_name,
       p.description AS package_description
FROM sys.dm_xe_objects AS o
     INNER JOIN sys.dm_xe_packages AS p
         ON o.package_guid = p.guid
WHERE o.object_type = 'target'
ORDER BY target_name ASC;

Uma sessão de evento pode ter zero, um ou muitos destinos. Todos os destinos adicionados a uma sessão de evento devem ser diferentes. Por exemplo, você não pode adicionar um segundo event_file destino a uma sessão que já tenha um event_file destino.

Para obter mais informações, incluindo exemplos de uso para destinos comumente usados, consulte destinos de Eventos Estendidos.

SET { target_parameter_name = <value> [ , ... n ] }

Define um parâmetro de destino.

Para ver todos os parâmetros de destino e suas descrições, execute a consulta a seguir, substituindo target-name-placeholder pelo nome de destino, como event_file, ring_buffer, histogrametc.

SELECT name AS target_parameter_name,
       column_value AS default_value,
       description
FROM sys.dm_xe_object_columns
WHERE column_type = 'customizable'
      AND object_name = 'target-name-placeholder';

Importante

Se você estiver usando o destino do buffer de anel, recomendamos definir o MAX_MEMORY parâmetro de destino (distinto do parâmetro de MAX_MEMORYsessão) para 1.024 quilobytes (KB) ou menos para ajudar a evitar possíveis truncamento de dados da saída XML.

Para obter mais informações sobre tipos de destino, consulte os destinos de Eventos Estendidos.

LANÇAR ALVO <event_target_specifier>

Identifica um destino a ser removido de uma sessão de evento. O especificador de destino de evento está na forma de [event_module_guid]. event_package_name. target_name, em que:

  • event_module_guid é o GUID do módulo que contém o evento.
  • event_package_name é o pacote que contém o objeto de ação.
  • target_name é o nome do destino.

O especificador de destino de evento deve identificar um destino que foi adicionado anteriormente à sessão de evento.

WITH ( <event_session_options> [ ,... n ] )

Especifica as opções a serem usadas com a sessão de evento.

MAX_MEMORY = tamanho [ KB | MB ]

Especifica a quantidade máxima de memória a ser alocada à sessão para buffer de evento. O padrão é 4 MB. size é um número inteiro e pode ser um valor kilobyte (KB) ou megabyte (MB). A quantidade máxima não pode exceder 2 GB (2.048 MB). No entanto, não é recomendável usar valores de memória no intervalo de GB.

EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }

Especifica o modo de retenção do evento para usar em tratamento de perda de evento.

  • ALLOW_SINGLE_EVENT_LOSS

    Um evento pode ser perdido da sessão. Um único evento será descartado somente quando todos os buffers de evento estiverem cheios. Perder um único evento quando os buffers de eventos estiverem completos minimiza o impacto no desempenho, minimizando também a perda de dados no fluxo de eventos processados.

  • ALLOW_MULTIPLE_EVENT_LOSS

    Buffers de evento cheios que contêm vários eventos podem ser perdidos da sessão. O número de eventos perdidos depende do tamanho de memória alocado à sessão, do particionamento da memória e do tamanho dos eventos no buffer. Essa opção geralmente evita o impacto no desempenho no servidor quando os buffers de eventos são preenchidos rapidamente, mas um grande número de eventos pode ser perdido da sessão.

  • NO_EVENT_LOSS

    Nenhuma perda de evento é permitida. Essa opção assegura que todos os eventos gerados serão retidos. O uso dessa opção força todas as tarefas que acionam eventos a esperar até que haja espaço disponível em um buffer de evento. O uso de NO_EVENT_LOSS pode causar problemas de desempenho detectáveis enquanto a sessão de eventos está ativa. As sessões e consultas do usuário podem parar enquanto aguardam a liberação de eventos do buffer.

    Observação

    Para os destinos de arquivo de evento no Banco de Dados SQL do Azure e na Instância Gerenciada de SQL do Azure (com a política de atualização do SQL Server 2025 ou Always-up-to-date), a partir de junho de 2024, NO_EVENT_LOSS se comporta da mesma ALLOW_SINGLE_EVENT_LOSSforma que . Se você especificar NO_EVENT_LOSS, um aviso com a ID da mensagem 25665, a severidade 10 e a mensagem This target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead. serão retornados e a sessão será criada.

    Essa alteração evita tempos limite de conexão, atrasos de failover e outros problemas que podem reduzir a disponibilidade do banco de dados quando NO_EVENT_LOSS usados com destinos de arquivo de evento no armazenamento de blobs do Azure.

    NO_EVENT_LOSS é planejado para remoção como um argumento com EVENT_RETENTION_MODE suporte em atualizações futuras para o Banco de Dados SQL do Azure e a Instância Gerenciada de SQL do Azure. Evite usar esse recurso em um novo trabalho de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.

MAX_DISPATCH_LATENCY = { segundos SEGUNDOS | INFINITE }

Especifica a quantidade de tempo em que os eventos serão colocados no buffer de memória antes que sejam despachados para destinos de sessão de evento. Por padrão, este valor é definido como 30 segundos.

  • Segundos SEGUNDOS

    O tempo, em segundos, a esperar antes de liberar buffers para os destinos. seconds é um número inteiro. O valor mínimo de latência é 1 segundo. No entanto, o valor 0 pode ser usado para especificar a latência INFINITE.

  • INFINITO

    Libera buffers para os destinos somente quando eles estão cheios ou quando a sessão de evento é fechada.

MAX_EVENT_SIZE = tamanho [ KB | MB ]

Especifica o tamanho máximo permitido para eventos. MAX_EVENT_SIZE só devem ser definidas para permitir eventos únicos maiores que MAX_MEMORY; defini-lo como menor que MAX_MEMORY gera um erro. size é um número inteiro e pode ser um valor de KB (kilobyte) ou MB (megabyte). Se size for especificado em kilobytes, o tamanho mínimo permitido será de 64 KB. Quando MAX_EVENT_SIZE é definido, dois buffers de tamanho são criados além de MAX_MEMORY e a memória total usada para buffer de eventos é MAX_MEMORY + 2 * MAX_EVENT_SIZE.

MEMORY_PARTITION_MODE = { NENHUM | PER_NODE | PER_CPU }

Especifica a afinidade de buffers de eventos. Opções diferentes de NONE resultar em mais buffers e maior consumo de memória, mas podem evitar contenção e melhorar o desempenho em computadores maiores.

  • NENHUM

    Um único conjunto de buffers é criado na instância do Mecanismo de Banco de Dados.

  • PER_NODE

    Um conjunto de buffers é criado para cada nó NUMA.

  • PER_CPU

    Um conjunto de buffers é criado para cada CPU.

TRACK_CAUSALITY = { ON | DESLIGADO }

Especifica se a causalidade do evento é controlada ou não. Se habilitada, a causalidade permitirá que eventos relacionados em conexões de servidor diferentes sejam correlacionados.

STARTUP_STATE = { ON | DESLIGADO }

Especifica se a sessão de evento será iniciada automaticamente ou não quando o Mecanismo de Banco de Dados for iniciado.

Observação

Se STARTUP_STATE = ONa sessão de evento for iniciada quando o Mecanismo de Banco de Dados for interrompido e reiniciado. Para iniciar a sessão de evento imediatamente, use ALTER EVENT SESSION ... ON SERVER STATE = START.

  • ATIVADO

    A sessão de evento é iniciada na inicialização.

  • OFF

    A sessão de evento não é iniciada na inicialização.

MAX_DURATION = { duração do tempo { SECONDS | MINUTOS | HORAS | DAYS } | UNLIMITED }

Aplica-se a: SQL Server 2025 (17.x)

  • ILIMITADO

    Faz com que uma sessão de evento seja executada indefinidamente uma vez iniciada, até parar de usar a instrução ALTER EVENT SESSION ... STATE = STOP .

  • duração do tempo SEGUNDOS | MINUTOS | HORAS | DIAS

    Faz com que uma sessão de evento seja interrompida automaticamente após o tempo especificado ser decorrido após o início da sessão. A duração máxima com suporte é de 2.147.483 segundos, ou 35.792 minutos, ou 596 horas, ou 24 dias.

Para obter mais informações, consulte sessões de evento com limite de tempo.

Comentários

Para obter mais informações sobre argumentos de sessão de evento, consulte sessões de Eventos Estendidos.

Os ADD argumentos and DROP não podem ser usados na mesma instrução.

Permissões

O SQL Server e a Instância Gerenciada de SQL do Azure exigem a ALTER ANY EVENT SESSION permissão.

O Banco de Dados SQL do Azure requer a ALTER ANY DATABASE EVENT SESSION permissão no banco de dados.

Dica

O SQL Server 2022 introduziu permissões mais granulares para Eventos Estendidos. Para obter mais informações, consulte Blog: Novas permissões granulares para SQL Server 2022 e SQL do Azure para melhorar a adesão ao PoLP.

Exemplos

A. Iniciar e interromper uma sessão de evento

Para usar este exemplo com sessões de evento de banco de dados, substitua ON SERVER por ON DATABASE.

ALTER EVENT SESSION test_session ON SERVER STATE = START;
ALTER EVENT SESSION test_session ON SERVER STATE = STOP;

B. Adicionar novos eventos a uma sessão existente

Para usar este exemplo com sessões de evento de banco de dados, substitua ON SERVER por ON DATABASE.

ALTER EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.database_transaction_begin,
ADD EVENT sqlserver.database_transaction_end;

C. Exibir estatísticas de sessão

Para usar este exemplo com sessões de evento de banco de dados, substitua sys.dm_xe_sessions por sys.dm_xe_database_sessionse sys.dm_xe_session_events por sys.dm_xe_database_session_events.

SELECT *
FROM sys.dm_xe_sessions
WHERE name = 'test_session';

SELECT se.*
FROM sys.dm_xe_session_events AS se
WHERE EXISTS (SELECT 1
              FROM sys.dm_xe_sessions AS s
              WHERE s.address = se.event_session_address
                    AND s.name = 'test_session');