Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica:Analytics Platform System (PDW)
Las sesiones de diagnóstico permiten guardar información detallada de diagnóstico definida por el usuario en el rendimiento del sistema o de las consultas.
Las sesiones de diagnóstico se suelen usar para depurar el rendimiento de una consulta específica o para supervisar el comportamiento de un componente de dispositivo específico durante la operación del dispositivo.
Note
Debe estar familiarizado con XML para poder usar sesiones 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
Nombre de la sesión de diagnóstico. Los nombres de sesión de diagnóstico pueden incluir solo caracteres a-z, A-Z y 0-9. Además, los nombres de sesión de diagnóstico deben comenzar con un carácter. diagnostics_name está limitado a 127 caracteres.
max_item_count_num
Número de eventos que se van a conservar en una vista. Por ejemplo, si se especifica 100, los 100 eventos más recientes que coinciden con los criterios de filtro se conservan en la sesión de diagnóstico. Si se encuentran menos de 100 eventos coincidentes, la sesión de diagnóstico contiene menos de 100 eventos. max_item_count_num debe ser al menos 100 y menor o igual que 100 000.
event_name
Define los eventos reales que se van a recopilar en la sesión de diagnóstico.
event_name es uno de los eventos enumerados en sys.pdw_diag_events donde sys.pdw_diag_events.is_enabled='True'.
filter_property_name
Nombre de la propiedad en la que se van a restringir los resultados. Por ejemplo, si desea limitar en función del identificador de sesión, filter_property_name debe ser SessionId. Consulte el argumento property_name para obtener una lista de valores potenciales para filter_property_name.
valor
Valor que se va a evaluar con filter_property_name. El tipo de valor debe coincidir con el tipo de propiedad. Por ejemplo, si el tipo de propiedad es decimal, el tipo de valor debe ser decimal.
comp_type
Tipo de comparación. Los valores potenciales son: Equals, , EqualsOrLessThanEqualsOrGreaterThan, LessThanGreaterThan, NotEquals, , , Containsy RegEx.
property_name
Propiedad relacionada con el evento. Los nombres de propiedad pueden formar parte de la etiqueta de captura o usarse como parte de los criterios de filtrado.
| Nombre de la propiedad | Description |
|---|---|
UserName |
Un nombre de usuario (inicio de sesión). |
SessionId |
Un identificador de sesión. |
QueryId |
Identificador de consulta. |
CommandType |
Tipo de comando. |
CommandText |
Texto dentro de un comando procesado. |
OperationType |
Tipo de operación para el evento. |
Duration |
Duración del evento. |
SPID |
El identificador de sesión. |
Remarks
Cada usuario puede tener un máximo de 10 sesiones de diagnóstico simultáneas. Consulte sys.pdw_diag_sessions para obtener una lista de las sesiones actuales y quite las sesiones innecesarias mediante DROP DIAGNOSTICS SESSION.
Las sesiones de diagnóstico continúan recopilando metadatos hasta que se quitan.
Permissions
Requiere el permiso ALTER SERVER STATE.
Bloqueo
Toma un bloqueo compartido en la tabla Sesiones de diagnóstico.
Examples
A. Creación de una sesión de diagnóstico
En este ejemplo se crea una sesión de diagnóstico para registrar las métricas del rendimiento del motor de base de datos. En el ejemplo se crea una sesión de diagnóstico que escucha los eventos de ejecución o finalización de la consulta del motor y un evento DMS de bloqueo. Lo que se devuelve es el texto del comando, el nombre de la máquina, el identificador de solicitud (id. de consulta) y la sesión en la que se creó el evento.
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>';
Después de crear la sesión de diagnóstico, ejecute una consulta.
SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;
A continuación, vea los resultados de la sesión de diagnóstico seleccionando en el esquema sysdiag.
SELECT * FROM master.sysdiag.MYDIAGSESSION;
El esquema sysdiag contiene una vista denominada nombre de la sesión de diagnóstico.
Para ver solo la actividad de la conexión, agregue la Session.SPID propiedad y agréguela WHERE [Session.SPID] = @@spid; a la consulta.
Cuando haya terminado con la sesión de diagnóstico, colóquela con el DROP DIAGNOSTICS comando .
DROP DIAGNOSTICS SESSION MYDIAGSESSION;
B. Sesión de diagnóstico alternativa
Un segundo ejemplo con propiedades ligeramente 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>';
Ejecute una consulta, como:
USE ssawPDW;
GO
SELECT * FROM dbo.FactFinance;
La consulta siguiente devuelve el tiempo de autorización:
SELECT *
FROM master.sysdiag.PdwOptimizationDiagnostics
ORDER BY DateTimePublished;
Cuando haya terminado con la sesión de diagnóstico, colóquela con el DROP DIAGNOSTICS comando .
DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;