CREATE DIAGNOSTICS SESSION (Transact-SQL)

S’applique à :Analytics Platform System (PDW)

Les sessions de diagnostic vous permettent d’enregistrer des informations de diagnostic détaillées et définies par l’utilisateur sur les performances du système ou des requêtes.

Les sessions de diagnostic sont généralement utilisées pour déboguer les performances d’une requête spécifique ou pour surveiller le comportement d’un composant d’appliance spécifique pendant l’opération de l’appliance.

Note

Vous devez être familiarisé avec XML afin d’utiliser des sessions de diagnostic.

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 ;

Arguments

diagnostics_name

Nom de la session de diagnostics. Les noms de session de diagnostic peuvent inclure des caractères a-z, A-Z et 0-9 uniquement. En outre, les noms de session de diagnostic doivent commencer par un caractère. diagnostics_name est limité à 127 caractères.

max_item_count_num

Nombre d’événements à conserver dans une vue. Par exemple, si 100 est spécifié, les 100 événements les plus récents correspondant aux critères de filtre sont conservés à la session de diagnostics. Si moins de 100 événements correspondants sont trouvés, la session de diagnostic contient moins de 100 événements. max_item_count_num doit être au moins 100 et inférieur ou égal à 100 000.

event_name

Définit les événements réels à collecter dans la session de diagnostics. event_name est l’un des événements répertoriés dans sys.pdw_diag_events où sys.pdw_diag_events.is_enabled='True'.

filter_property_name

Nom de la propriété sur laquelle restreindre les résultats. Par exemple, si vous souhaitez limiter en fonction de l’ID de session, filter_property_name doit être SessionId. Consultez l’argument property_name pour obtenir la liste des valeurs potentielles pour filter_property_name.

valeur

Valeur à évaluer par rapport à filter_property_name. Le type valeur doit correspondre au type de propriété. Par exemple, si le type de propriété est décimal, le type de valeur doit être décimal.

comp_type

Type de comparaison. Les valeurs potentielles sont les suivantes : Equals, , EqualsOrGreaterThanEqualsOrLessThan, NotEqualsLessThanGreaterThanContainset .RegEx

property_name

Propriété liée à l’événement. Les noms de propriétés peuvent faire partie de la balise de capture ou être utilisés dans le cadre de critères de filtrage.

Nom de la propriété Description
UserName Nom d’utilisateur (connexion).
SessionId ID de session.
QueryId ID de requête.
CommandType Type de commande.
CommandText Texte dans une commande traitée.
OperationType Type d’opération de l’événement.
Duration Durée de l’événement.
SPID ID de la session.

Remarks

Chaque utilisateur est autorisé à un maximum de 10 sessions de diagnostic simultanées. Consultez sys.pdw_diag_sessions pour obtenir la liste de vos sessions actuelles et supprimer les sessions inutiles à l’aide DROP DIAGNOSTICS SESSIONde .

Les sessions de diagnostic continuent de collecter les métadonnées jusqu’à ce qu’elles ne sont pas supprimées.

Permissions

Nécessite l’autorisation ALTER SERVER STATE.

Verrouillage

Prend un verrou partagé sur la table Sessions de diagnostic.

Examples

A. Créer une session de diagnostics

Cet exemple crée une session de diagnostic pour enregistrer les métriques des performances du moteur de base de données. L’exemple crée une session de diagnostic qui écoute les événements d’exécution/fin de la requête du moteur et un événement DMS bloquant. Ce qui est retourné est le texte de commande, le nom de l’ordinateur, l’ID de requête (ID de requête) et la session sur laquelle l’événement a été créé.

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>';

Après la création de la session de diagnostics, exécutez une requête.

SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;

Affichez ensuite les résultats de la session de diagnostic en sélectionnant dans le schéma sysdiag.

SELECT * FROM master.sysdiag.MYDIAGSESSION;

Le schéma sysdiag contient une vue nommée nom de votre session de diagnostics.

Pour afficher uniquement l’activité de votre connexion, ajoutez la Session.SPID propriété et ajoutez-la WHERE [Session.SPID] = @@spid; à la requête.

Une fois la session de diagnostic terminée, supprimez-la à l’aide de la DROP DIAGNOSTICS commande.

DROP DIAGNOSTICS SESSION MYDIAGSESSION;

B. Autre session de diagnostic

Deuxième exemple avec des propriétés légèrement différentes.

-- 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>';

Exécutez une requête, par exemple :

USE ssawPDW;
GO

SELECT * FROM dbo.FactFinance;

La requête suivante retourne le minutage d’autorisation :

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

Une fois la session de diagnostic terminée, supprimez-la à l’aide de la DROP DIAGNOSTICS commande.

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;