Partilhar via


CRIAR SESSÃO DE EVENTO (Transact-SQL)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceBase de dados SQL no Microsoft Fabric

Cria uma sessão de Eventos Estendidos que identifica os eventos a serem coletados, os destinos da sessão do evento e as opções da sessão do evento.

Transact-SQL convenções de sintaxe

Sintaxe

CREATE EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
    <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 } ]
    [ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}

Arguments

event_session_name

O nome definido pelo usuário para a sessão do evento. event_session_name é alfanumérico, pode ter até 128 caracteres, deve ser exclusivo em uma instância do SQL Server e deve estar em conformidade com as regras para identificadores de banco de dados.

EM { SERVIDOR | BASE DE DADOS }

Determina se a sessão de evento está no contexto do servidor ou banco de dados.

Azure SQL Database e SQL Database no Microsoft Fabric requerem DATABASE.

ADICIONAR EVENTO [event_module_guid]. event_package_name. event_name

O evento a associar à sessão do evento, onde:

  • 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 = <valor> [ ,... 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;

AÇÃO ( { [event_module_guid].event_package_name. action_name [ ,... n ] })

A ação a associar ao evento, onde:

  • 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 verdadeiro, o evento será processado posteriormente pelas ações e destinos da sessão. Se <predicate_expression> for falso, 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 fonte do predicado global onde:

  • 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 fonte do predicado.

As fontes de predicados 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 predicados, onde:

  • 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 predicados.
  • predicate_compare_name é o nome do comparador de predicados.

Os comparadores de predicados 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;

number

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 predicados. Nenhuma conversão implícita de tipo de cadeia de caracteres é executada para as funções de comparação de predicados. Passar o valor de um tipo inesperado resulta em um erro.

ADICIONAR DESTINO [event_module_guid]. event_package_name. target_name

É o destino a associar à sessão do evento, onde:

  • event_module_guid é o GUID do módulo que contém o destino.
  • event_package_name é o pacote que contém o destino.
  • 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, não é possível 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 = <valor> [ , ... n ] }

Define um parâmetro de destino.

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

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 que defina o MAX_MEMORY parâmetro de destino (distinto do parâmetro MAX_MEMORY) para 1.024 kilobytes (KB) ou menos para ajudar a evitar o possível truncamento de dados da saída XML.

Para obter mais informações sobre tipos de destino, consulte Destinos de eventos estendidos.

COM ( <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 para a sessão para buffer de eventos. O padrão é 4 MB. tamanho é um número inteiro e pode ser um valor de kilobyte (KB) ou megabyte (MB). O valor máximo não pode exceder 2 GB (2.048 MB). No entanto, o uso de valores de memória no intervalo de GB não é recomendado.

EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }

Especifica o modo de retenção de eventos a ser usado para lidar com a perda de eventos.

  • ALLOW_SINGLE_EVENT_LOSS

    Um evento pode ser perdido da sessão. Um único evento só é descartado quando todos os buffers de eventos estão cheios. A perda de um único evento quando os buffers de eventos estão cheios minimiza o impacto no desempenho e, ao mesmo tempo, minimiza a perda de dados no fluxo de eventos processado.

  • ALLOW_MULTIPLE_EVENT_LOSS

    Buffers de eventos completos contendo vários eventos podem ser perdidos da sessão. O número de eventos perdidos depende do tamanho da memória alocada para a sessão, do particionamento da memória e do tamanho dos eventos no buffer. Essa opção geralmente evita o impacto no desempenho do 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. Esta opção garante que todos os eventos gerados sejam mantidos. O uso dessa opção força todas as tarefas que disparam eventos a aguardar até que o espaço esteja disponível em um buffer de eventos. O uso do NO_EVENT_LOSS pode causar problemas de desempenho detetáveis enquanto a sessão do evento estiver ativa. As sessões e consultas do usuário podem parar enquanto aguardam que os eventos sejam liberados do buffer.

    Observação

    Para os alvos de ficheiros de evento no Azure SQL Database, SQL database no Microsoft Fabric e Azure SQL Managed Instance (com a política de atualizaçãoSQL Server 2025 ou Always-up-to-date), a partir de junho de 2024, NO_EVENT_LOSS comporta-se da mesma forma que ALLOW_SINGLE_EVENT_LOSS. Se você especificar NO_EVENT_LOSS, um aviso com ID de mensagem 25665, gravidade 10 e mensagem This target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead. será retornado 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 usado com destinos de arquivo de evento no armazenamento de blob do Azure.

    NO_EVENT_LOSS está planeada a remoção como argumento apoiado EVENT_RETENTION_MODE em futuras atualizações do Azure SQL Database, SQL database no Microsoft Fabric e Azure SQL Managed Instance. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.

MAX_DISPATCH_LATENCY = { segundos SEGUNDOS | INFINITO }

Especifica a quantidade de tempo que os eventos são armazenados em buffer na memória antes de serem enviados para destinos de sessão de eventos. Por padrão, esse valor é definido como 30 segundos.

  • segundosSECONDS

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

  • INFINITO

    Libere buffers para destinos somente quando os buffers estiverem cheios ou quando a sessão de eventos for fechada.

MAX_EVENT_SIZE = tamanho [ KB | MB ]

Especifica o tamanho máximo permitido para eventos. MAX_EVENT_SIZE só deve ser definido para permitir eventos individuais maiores que MAX_MEMORY; defini-lo como inferior a MAX_MEMORY gera um erro. tamanho é um número inteiro e pode ser um valor de kilobyte (KB) ou megabyte (MB). Se o tamanho for especificado em kilobytes, o tamanho mínimo permitido é 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 dos buffers de eventos. Opções diferentes resultam NONE em mais buffers e maior consumo de memória, mas podem evitar contenção e melhorar o desempenho em máquinas 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 = { ATIVADO | DESLIGADO }

Especifica se a causalidade é rastreada ou não. Se habilitada, a causalidade permite que eventos relacionados em diferentes conexões de servidor sejam correlacionados.

STARTUP_STATE = { EM | DESLIGADO }

Especifica se essa sessão de evento deve ou não ser iniciada automaticamente quando o SQL Server é iniciado.

Observação

Se STARTUP_STATE = ON, a sessão de eventos será iniciada quando o Mecanismo de Banco de Dados for interrompido e, em seguida, reiniciado. Para iniciar a sessão do evento imediatamente, use ALTER EVENT SESSION ... ON SERVER STATE = STARTo .

  • ON

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

  • OFF

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

MAX_DURATION = { duração do tempo { SEGUNDOS | ATAS | HORÁRIO | DIAS } | ILIMITADO }

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

  • ILIMITADO

    Cria uma sessão de evento que é executada indefinidamente uma vez iniciada, até parar de usar a ALTER EVENT SESSION ... STATE = STOP instrução. Este é o padrão se MAX_DURATION não for especificado.

  • Duração do tempo SEGUNDOS | ATAS | HORÁRIO | DIAS

    Cria uma sessão de evento que para automaticamente após o tempo especificado decorrer após o início da sessão. A duração máxima suportada é de 2.147.483 segundos, ou 35.792 minutos, ou 596 horas, ou 24 dias.

Para obter mais informações, consulte Sessões de eventos com limite de tempo.

Observações

Para obter mais informações sobre argumentos de sessão de evento, consulte Sessões de eventos estendidos.

A ordem de precedência para os operadores lógicos é NOT (mais alta), seguida por AND, seguida por OR.

Permissions

O SQL Server e a Instância Gerenciada SQL do Azure exigem a permissão (introduzida CREATE ANY EVENT SESSION no SQL Server 2022) ou ALTER ANY EVENT SESSION .

Azure SQL Database e SQL Database no Microsoft Fabric requerem a CREATE ANY DATABASE EVENT SESSION permissão na base de dados.

Sugestão

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 Azure SQL para melhorar a aderência com PoLP.

Examples

A. Exemplo de SQL Server e Instância Gerenciada SQL do Azure

O exemplo a seguir mostra como criar uma sessão de evento chamada test_session. Este exemplo adiciona dois eventos e usa o event_file destino, limitando o tamanho de cada arquivo a 256 MB e limitando o número retido de arquivos a 10.

IF EXISTS (SELECT 1
           FROM sys.server_event_sessions
           WHERE name = 'test_session')
    DROP EVENT SESSION test_session ON SERVER;

CREATE EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.rpc_starting,
ADD EVENT sqlserver.sql_batch_starting,
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file
    (
    SET filename = N'C:\xe\test_session.xel',
        max_file_size = 256,
        max_rollover_files = 10
    )
WITH (MAX_MEMORY = 4 MB);

B. Exemplos do Banco de Dados SQL do Azure

Por exemplo, instruções passo a passo, revise Criar uma sessão de evento com um destino de event_file no Armazenamento do Azure e Criar uma sessão de evento com um destino ring_buffer na memória.

Os exemplos de código podem diferir para o Banco de Dados SQL do Azure e a Instância Gerenciada SQL

Alguns exemplos de código Transact-SQL escritos para o SQL Server precisam de pequenas alterações para serem executados no Banco de Dados SQL do Azure ou no Banco de Dados SQL na Malha. Uma categoria desses exemplos de código envolve exibições de catálogo cujos prefixos de nome diferem dependendo do tipo de mecanismo de banco de dados:

  • server_ - prefixo para SQL Server e Instância Gerenciada SQL do Azure
  • database_ - prefixo para Banco de Dados SQL do Azure, Banco de Dados SQL na Malha e Instância Gerenciada SQL

O Banco de Dados SQL do Azure e o Banco de Dados SQL no Fabric oferecem suporte apenas a sessões de eventos com escopo de banco de dados. SQL Server Management Studio (SSMS) suporta sessões de eventos com âmbito de base de dados para Azure SQL Database: um nó de Eventos Estendidos contendo sessões com âmbito de base de dados aparece sob cada base de dados no Explorador de Objetos.

A Instância Gerenciada SQL do Azure dá suporte a sessões com escopo de banco de dados e sessões com escopo de servidor. O SSMS oferece suporte total a sessões com escopo de servidor para Instância Gerenciada SQL: um nó Eventos Estendidos contendo todas as sessões com escopo de servidor aparece na pasta Gerenciamento de cada instância gerenciada no Pesquisador de Objetos.

Observação

As sessões de eventos com escopo de servidor são recomendadas para a Instância Gerenciada SQL do Azure.

As sessões de eventos com escopo de banco de dados não são exibidas no Pesquisador de Objetos no SSMS para Instância Gerenciada SQL do Azure. Em uma instância gerenciada pelo SQL, as sessões de eventos com escopo de banco de dados só podem ser consultadas e gerenciadas com o Transact-SQL.

Para ilustração, a tabela a seguir lista e compara dois subconjuntos de exibições de catálogo. Os subconjuntos têm prefixos de nome diferentes porque suportam diferentes tipos de mecanismo de banco de dados.

Nome no SQL Server e na Instância Gerenciada SQL do Azure Nome no Banco de Dados SQL do Azure, Banco de Dados SQL no Fabric e Instância Gerenciada SQL do Azure
sys.server_event_session_actions
sys.server_event_session_events
sys.server_event_session_fields
sys.server_event_session_targets
sys.server_event_sessions
sys.database_event_session_actions
sys.database_event_session_events
sys.database_event_session_fields
sys.database_event_session_targets
sys.database_event_sessions