CREATE DIAGNOSTICS SESSION (Transact-SQL)

Gilt für:Analytics Platform System (PDW)

Diagnosesitzungen ermöglichen ihnen das Speichern detaillierter, benutzerdefinierter Diagnoseinformationen auf System- oder Abfrageleistung.

Diagnosesitzungen werden in der Regel verwendet, um die Leistung für eine bestimmte Abfrage zu debuggen oder um das Verhalten einer bestimmten Appliance-Komponente während des Appliance-Vorgangs zu überwachen.

Note

Sie sollten mit XML vertraut sein, um Diagnosesitzungen zu verwenden.

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 ;

Argumente

diagnostics_name

Der Name der Diagnosesitzung. Diagnosesitzungsnamen können nur Zeichen a-z, A-Z und 0-9 enthalten. Außerdem müssen die Namen der Diagnosesitzung mit einem Zeichen beginnen. diagnostics_name ist auf 127 Zeichen beschränkt.

max_item_count_num

Die Anzahl der Ereignisse, die in einer Ansicht beibehalten werden sollen. Wenn beispielsweise 100 angegeben ist, werden die 100 neuesten Ereignisse, die den Filterkriterien entsprechen, in der Diagnosesitzung beibehalten. Wenn weniger als 100 übereinstimmende Ereignisse gefunden werden, enthält die Diagnosesitzung weniger als 100 Ereignisse. max_item_count_num muss mindestens 100 und kleiner als oder gleich 100.000 sein.

event_name

Definiert die tatsächlichen Ereignisse, die in der Diagnosesitzung erfasst werden sollen. event_name ist eines der Ereignisse, die in sys.pdw_diag_events aufgeführt sind.sys.pdw_diag_events.is_enabled='True'

filter_property_name

Der Name der Eigenschaft, für die Ergebnisse eingeschränkt werden sollen. Wenn Sie z. B. basierend auf der Sitzungs-ID einschränken möchten, sollte filter_property_name"SessionId" lauten. Eine Liste der potenziellen Werte für filter_property_name finden Sie im argument property_name.

Wert

Ein Wert, der für filter_property_name ausgewertet werden soll. Der Werttyp muss mit dem Eigenschaftstyp übereinstimmen. Wenn der Eigenschaftstyp beispielsweise dezimal ist, muss der Werttyp dezimal sein.

comp_type

Der Vergleichstyp. Mögliche Werte sind: Equals, , EqualsOrGreaterThan, EqualsOrLessThan, GreaterThan, LessThan, NotEqualsund ContainsRegEx.

property_name

Eine Eigenschaft im Zusammenhang mit dem Ereignis. Eigenschaftsnamen können Teil des Aufnahmetags sein oder als Teil der Filterkriterien verwendet werden.

Eigenschaftsname Beschreibung
UserName Ein Benutzername (Anmeldename).
SessionId Eine Sitzungs-ID.
QueryId Eine Abfrage-ID.
CommandType Ein Befehlstyp.
CommandText Text in einem verarbeiteten Befehl.
OperationType Der Vorgangstyp für das Ereignis.
Duration Die Dauer des Ereignisses.
SPID Die Sitzungs-ID.

Remarks

Jeder Benutzer ist maximal 10 gleichzeitige Diagnosesitzungen zulässig. Eine Liste Ihrer aktuellen Sitzungen finden Sie unter sys.pdw_diag_sessions , und legen Sie alle nicht benötigten Sitzungen mithilfe von DROP DIAGNOSTICS SESSION.

Diagnosesitzungen sammeln weiterhin Metadaten, bis sie gelöscht wurden.

Berechtigungen

Erfordert die ALTER SERVER STATE-Berechtigung.

Sperren

Verwendet eine freigegebene Sperre in der Tabelle "Diagnosesitzungen".

Beispiele

A. Erstellen einer Diagnosesitzung

In diesem Beispiel wird eine Diagnosesitzung erstellt, um Metriken der Leistung des Datenbankmoduls aufzuzeichnen. Im Beispiel wird eine Diagnosesitzung erstellt, die auf Ausführungs-/Endereignisse der Modulabfrage lauscht und ein blockierende DMS-Ereignis. Was zurückgegeben wird, ist der Befehlstext, der Computername, die Anforderungs-ID (Abfrage-ID) und die Sitzung, für die das Ereignis erstellt wurde.

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

Führen Sie nach dem Erstellen der Diagnosesitzung eine Abfrage aus.

SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;

Zeigen Sie dann die Ergebnisse der Diagnosesitzung an, indem Sie aus dem Sysdiag-Schema auswählen.

SELECT * FROM master.sysdiag.MYDIAGSESSION;

Das Sysdiag-Schema enthält eine Ansicht, die den Namen der Diagnosesitzung trägt.

Um nur die Aktivität für Ihre Verbindung anzuzeigen, fügen Sie die Session.SPID Eigenschaft hinzu, und fügen Sie sie der Abfrage hinzu WHERE [Session.SPID] = @@spid; .

Wenn Sie mit der Diagnosesitzung fertig sind, legen Sie sie mit dem DROP DIAGNOSTICS Befehl ab.

DROP DIAGNOSTICS SESSION MYDIAGSESSION;

B. Alternative Diagnosesitzung

Ein zweites Beispiel mit leicht unterschiedlichen Eigenschaften.

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

Ausführen einer Abfrage, z. B.:

USE ssawPDW;
GO

SELECT * FROM dbo.FactFinance;

Die folgende Abfrage gibt den Autorisierungszeitpunkt zurück:

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

Wenn Sie mit der Diagnosesitzung fertig sind, legen Sie sie mit dem DROP DIAGNOSTICS Befehl ab.

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;