Criar uma sessão de Eventos Estendidos usando o Editor de Consultas
Você pode criar uma sessão de Eventos Estendidos usando o Editor de Consulta ou pode criar uma sessão no Pesquisador de Objetos. Em Pesquisador de Objetos, os Eventos Estendidos fornecem duas interfaces do usuário que você pode usar para criar, modificar e exibir dados de sessão de evento: um assistente que orienta o processo de criação de sessão de evento e uma interface de usuário Nova Sessão que fornece mais opções de configuração avançadas. Você pode criar sessões de Eventos Estendidos para diagnosticar rastreamento de SQL Server que permite resolver problemas como os seguintes:
Localizar suas consultas mais caras
Localizar causas raiz de contenção de trava
Localizar uma consulta que está bloqueando outras consultas
Solucionar problemas de uso excessivo de CPU causados por recompilação de consulta
Solucionando problemas de deadlocks
Para obter informações sobre como criar uma sessão de Eventos Estendidos usando o Assistente para Nova Sessão, consulte Criar uma sessão de Eventos Estendidos usando o assistente (Pesquisador de Objetos). Para obter informações sobre como criar uma sessão de Eventos Estendidos usando a Interface de Usuário da Nova Sessão, consulte Criar uma sessão de Eventos Estendidos usando a caixa de diálogo Nova Sessão.
Permissões
Para criar uma sessão de Eventos Estendidos, você deve ter a permissão ALTER ANY EVENT SESSION.
Criando uma sessão de Eventos Estendidos usando o Editor de Consultas
Para criar uma sessão de Eventos Estendidos
O procedimento a seguir descreve como criar uma sessão de Eventos Estendidos usando o Editor de Consultas no SQL Server Management Studio.
Determine quais eventos você deseja usar na sessão. Para consultar todos os eventos disponíveis, junto com a palavra-chave e o canal, use a seguinte consulta:
Observação Para obter informações sobre as palavras-chave e os canais, consulte Pacotes de Eventos Estendidos do SQL Server.
SELECT p.name, c.event, k.keyword, c.channel, c.description FROM ( SELECT event_package = o.package_guid, o.description, event=c.object_name, channel = v.map_value FROM sys.dm_xe_objects o LEFT JOIN sys.dm_xe_object_columns c ON o.name = c.object_name INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name AND c.column_value = cast(v.map_key AS nvarchar) WHERE object_type = 'event' AND (c.name = 'CHANNEL' or c.name IS NULL) ) c LEFT JOIN ( SELECT event_package = c.object_package_guid, event = c.object_name, keyword = v.map_value FROM sys.dm_xe_object_columns c INNER JOIN sys.dm_xe_map_values v ON c.type_name = v.name AND c.column_value = v.map_key AND c.type_package_guid = v.object_package_guid INNER JOIN sys.dm_xe_objects o ON o.name = c.object_name AND o.package_guid = c.object_package_guid WHERE object_type = 'event' AND c.name = 'KEYWORD' ) k ON k.event_package = c.event_package AND (k.event=c.event or k.event IS NULL) INNER JOIN sys.dm_xe_packages p ON p.guid = c.event_package ORDER BY keyword desc, channel, event
Em uma nova janela de consulta, adicione as seguintes instruções para criar uma sessão de evento, substituindo session_name pelo nome de sessão que você deseja usar:
Importante As etapas de 2 a 6 deste procedimento descrevem cada seção da definição de sessão de evento. Você adicionaria todas as instruções a uma única janela de consulta antes da execução. Para obter um exemplo completo, consulte a seção Exemplo deste tópico.
CREATE EVENT SESSION session_name ON SERVER
Adicionar os eventos que deseja monitorar no formato package_name.event_name. Para cada evento, adicione uma linha semelhante à seguinte:
ADD EVENT package_name.event_name
Por exemplo:
ADD EVENT sqlserver.file_read_completed, ADD EVENT sqlserver.file_write_completed
(Opcional) Depois que você adicionar um evento, poderá adicionar as ações a serem executadas. Você também pode adicionar predicados. Os predicados são usados para estabelecer critérios para o momento em que as informações de evento devem ser utilizadas pelo destino. As ações são adicionadas usando uma cláusula ACTION e os predicados são adicionados usando uma cláusula WHERE. Por exemplo, para adicionar uma ação e um predicado onde o texto do Transact-SQL é capturado para o evento sqlserver.file_read_completed, onde a ID de arquivo é igual a 1, você incluiria a seguinte instrução:
ADD EVENT sqlserver.file_read_completed (ACTION (sqlserver.sql_text) WHERE file_id = 1),
Para exibir quais ações estão disponíveis, use a seguinte consulta:
SELECT p.name AS 'package_name', xo.name AS 'action_name', xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'action' AND (xo.capabilities & 1 = 0 OR xo.capabilities IS NULL) ORDER BY p.name, xo.name
Para exibir quais predicados estão disponíveis para um evento, use a seguinte consulta, substituindo event_name pelo nome do evento para o qual você deseja adicionar um predicado:
SELECT * FROM sys.dm_xe_object_columns WHERE object_name = 'event_name' AND column_type = 'data'
Por exemplo:
SELECT * FROM sys.dm_xe_object_columns WHERE object_name = 'file_read_completed' AND column_type = 'data'
Esteja atento que você também pode adicionar origens de predicado globais. Uma origem de predicado global pode ser usada em qualquer expressão de predicado. Para exibir quais origens de predicado globais estão disponíveis, use a seguinte consulta:
SELECT p.name AS package_name, xo.name AS predicate_name , xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'pred_source' ORDER BY p.name, xo.name
Por exemplo, você poderia usar a seguinte expressão de predicado para especificar que os dados sejam coletados para um evento somente nas cinco primeiras vezes que um evento ocorrer.
WHERE package0.counter <= 5
Adicione o destino desejado, onde os dados de evento serão processados e utilizados. Use o seguinte formato:
ADD TARGET package_name.target_name
O exemplo a seguir adiciona o destino de arquivo assíncrono:
ADD TARGET package0.asynchronous_file_target (SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
Para exibir a lista de destinos disponíveis, use a seguinte consulta:
SELECT p.name AS 'package_name', xo.name AS 'target_name' , xo.description, xo.object_type FROM sys.dm_xe_objects AS xo JOIN sys.dm_xe_packages AS p ON xo.package_guid = p.guid WHERE xo.object_type = 'target' AND (xo.capabilities & 1 = 0 OR xo.capabilities IS NULL) ORDER BY p.name, xo.name
Observação Para obter mais informações sobre os diferentes tipos de destino, consulte Destinos de eventos estendidos do SQL Server.
Revise e adicione qualquer opção de configuração adicional. Por exemplo, você pode configurar opções como modo de retenção de evento, quanto tempo os eventos permanecerão armazenados em buffer na memória ou se a sessão de evento deverá iniciar automaticamente quando o SQL Server for iniciado. As opções são descritas no tópico ALTER EVENT SESSION (Transact-SQL). Saiba que os valores padrão serão atribuídos se essas opções não forem especificadas.
Inicie a sessão.
Observação Para obter mais informações sobre como exibir os resultados da sessão, consulte o tópico correspondente do tipo de destino usado no nó Destinos de eventos estendidos do SQL Server dos Manuais Online.
O exemplo a seguir cria uma sessão de Eventos Estendidos chamada IOActivity que captura as seguintes informações:
Dados de evento para leituras de arquivo concluídas, incluindo o texto associado do Transact-SQL para leituras de arquivo onde a ID de arquivo é igual a 1.
Dados de evento para gravações de arquivo concluídas.
Dados de evento sobre o momento em que os dados são gravados no cache de log para o arquivo de log físico.
A sessão envia a saída para um destino de arquivo.
CREATE EVENT SESSION IOActivity
ON SERVER
ADD EVENT sqlserver.file_read_completed
(
ACTION (sqlserver.sql_text)
WHERE file_id = 1),
ADD EVENT sqlserver.file_write_completed,
ADD EVENT sqlserver.databases_log_flush
ADD TARGET package0.asynchronous_file_target
(SET filename = 'c:\temp\xelog.xel', metadatafile = 'c:\temp\xelog.xem')
Consulte também
Referência
CREATE EVENT SESSION (Transact-SQL)