CREATE DIAGNOSTICS SESSION (Transact-SQL)

Aplica-se a:PDW (Analytics Platform System)

As sessões de diagnóstico permitem que você salve informações detalhadas de diagnóstico definidas pelo usuário sobre o desempenho do sistema ou da consulta.

As sessões de diagnóstico normalmente são usadas para depurar o desempenho de uma consulta específica ou para monitorar o comportamento de um componente de dispositivo específico durante a operação do dispositivo.

Note

Você deve estar familiarizado com XML para usar sessões de diagnóstico.

Syntax

-- Creating a new diagnostics session:
CREATE DIAGNOSTICS SESSION diagnostics_name AS N' { <session_xml> } ';

<session_xml>::
<Session>
   [ <MaxItemCount>max_item_count_num</MaxItemCount> ]
   [ <Filter>
      { <Event Name = "event_name"/>
         [ <Where><filter_property_name Name = "value" ComparisonType = "comp_type"/></Where> ] [ , ...n ]
      } [ , ...n ]
   </Filter> ]
   <Capture>
      <Property Name = "property_name"/> [ , ...n ]
   </Capture>
<Session>

-- Retrieving results for a diagnostics session:
SELECT * FROM master.sysdiag.diagnostics_name ;

-- Removing results for a diagnostics session:
DROP DIAGNOSTICS SESSION diagnostics_name ;

Argumentos

diagnostics_name

O nome da sessão de diagnóstico. Os nomes de sessão de diagnóstico podem incluir apenas caracteres a-z, A-Z e 0-9. Além disso, os nomes de sessão de diagnóstico devem começar com um caractere. diagnostics_name é limitado a 127 caracteres.

max_item_count_num

O número de eventos a serem persistidos em um modo de exibição. Por exemplo, se 100 for especificado, os 100 eventos mais recentes que correspondem aos critérios de filtro serão mantidos na sessão de diagnóstico. Se forem encontrados menos de 100 eventos correspondentes, a sessão de diagnóstico conterá menos de 100 eventos. max_item_count_num deve ser pelo menos 100 e menor ou igual a 100.000.

event_name

Define os eventos reais a serem coletados na sessão de diagnóstico. event_name é um dos eventos listados em sys.pdw_diag_events em que sys.pdw_diag_events.is_enabled='True'.

filter_property_name

O nome da propriedade na qual restringir os resultados. Por exemplo, se você quiser limitar com base na ID da sessão, filter_property_name deverá ser SessionId. Consulte o argumento property_name para obter uma lista de valores potenciais para filter_property_name.

valor

Um valor a ser avaliado em relação a filter_property_name. O tipo de valor deve corresponder ao tipo de propriedade. Por exemplo, se o tipo de propriedade for decimal, o tipo de valor deverá ser decimal.

comp_type

O tipo de comparação. Os valores potenciais são: Equals, , EqualsOrGreaterThan, EqualsOrLessThan, GreaterThan, LessThan, , NotEquals, Containse RegEx.

property_name

Uma propriedade relacionada ao evento. Os nomes de propriedade podem fazer parte da marca de captura ou usados como parte dos critérios de filtragem.

Nome da propriedade Description
UserName Um nome de usuário (logon).
SessionId Uma ID de sessão.
QueryId Uma ID de consulta.
CommandType Um tipo de comando.
CommandText Texto em um comando processado.
OperationType O tipo de operação do evento.
Duration A duração do evento.
SPID A ID da sessão.

Remarks

Cada usuário tem um máximo de 10 sessões de diagnóstico simultâneas. Consulte sys.pdw_diag_sessions para obter uma lista das sessões atuais e descartar as sessões desnecessárias usando DROP DIAGNOSTICS SESSION.

As sessões de diagnóstico continuam coletando metadados até serem descartadas.

Permissions

Requer a permissão ALTER SERVER STATE.

Bloqueio

Usa um bloqueio compartilhado na tabela Sessões de Diagnóstico.

Examples

A. Criar uma sessão de diagnóstico

Este exemplo cria uma sessão de diagnóstico para registrar métricas do desempenho do mecanismo de banco de dados. O exemplo cria uma sessão de diagnóstico que escuta eventos de execução/término da Consulta do Mecanismo e um evento DMS de bloqueio. O que é retornado é o texto do comando, o nome do computador, a ID da solicitação (ID da consulta) e a sessão na qual o evento foi criado.

CREATE DIAGNOSTICS SESSION MYDIAGSESSION AS N'
<Session>
   <MaxItemCount>100</MaxItemCount>
   <Filter>
      <Event Name="EngineInstrumentation:EngineQueryRunningEvent" />
      <Event Name="DmsCoreInstrumentation:DmsBlockingQueueEnqueueBeginEvent" />
      <Where>
         <SessionId Value="381" ComparisonType="NotEquals" />
      </Where>
   </Filter>
   <Capture>
      <Property Name="Query.CommandText" />
      <Property Name="MachineName" />
      <Property Name="Query.QueryId" />
      <Property Name="Alias" />
      <Property Name="Duration" />
      <Property Name="Session.SessionId" />
   </Capture>
</Session>';

Após a criação da sessão de diagnóstico, execute uma consulta.

SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;

Em seguida, exiba os resultados da sessão de diagnóstico selecionando no esquema sysdiag.

SELECT * FROM master.sysdiag.MYDIAGSESSION;

O esquema sysdiag contém uma exibição que é chamada de nome da sessão de diagnóstico.

Para ver apenas a atividade da conexão, adicione a Session.SPID propriedade e adicione WHERE [Session.SPID] = @@spid; à consulta.

Quando terminar a sessão de diagnóstico, solte-a usando o DROP DIAGNOSTICS comando.

DROP DIAGNOSTICS SESSION MYDIAGSESSION;

B. Sessão de diagnóstico alternativa

Um segundo exemplo com propriedades ligeiramente diferentes.

-- Determine the session_id of your current session
SELECT TOP 1 session_id();

-- Replace <session_number> in the code below with the numbers in your session_id
CREATE DIAGNOSTICS SESSION PdwOptimizationDiagnostics AS N'
<Session>
   <MaxItemCount>100</MaxItemCount>
   <Filter>
      <Event Name="EngineInstrumentation:MemoGenerationBeginEvent" />
      <Event Name="EngineInstrumentation:MemoGenerationEndEvent" />
      <Event Name="DSQLInstrumentation:OptimizationBeginEvent" />
      <Event Name="DSQLInstrumentation:OptimizationEndEvent" />
      <Event Name="DSQLInstrumentation:BuildRelOpContextTreeBeginEvent" />
      <Event Name="DSQLInstrumentation:PostPlanGenModifiersEndEvent" />
      <Where>
         <SessionId Value="<session_number>" ComparisonType="Equals" />
      </Where>
   </Filter>
   <Capture>
      <Property Name="Session.SessionId" />
      <Property Name="Query.QueryId" />
      <Property Name="Query.CommandText" />
      <Property Name="Name" />
      <Property Name="DateTimePublished" />
      <Property Name="DateTimePublished.Ticks" />
  </Capture>
</Session>';

Execute uma consulta, como:

USE ssawPDW;
GO

SELECT * FROM dbo.FactFinance;

A consulta a seguir retorna o tempo de autorização:

SELECT *
FROM master.sysdiag.PdwOptimizationDiagnostics
ORDER BY DateTimePublished;

Quando terminar a sessão de diagnóstico, solte-a usando o DROP DIAGNOSTICS comando.

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;