CREATE DIAGNOSTICS SESSION (Transact-SQL)
Gilt für: Analytics Platform System (PDW)
Mithilfe von Diagnosesitzungen können Sie detaillierte benutzerdefinierte Diagnoseinformationen zur System- oder Abfrageleistung speichern.
Diagnosesitzungen werden in der Regel dazu verwendet, die Leistung einer bestimmten Abfrage zu debuggen oder das Verhalten einer bestimmten Appliancekomponente während des Appliancevorgangs zu überwachen.
Hinweis
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. Namen von Diagnosesitzungen dürfen nur die Zeichen a-z, A-Z und die Zahlen 0-9 enthalten. Darüber hinaus müssen Namen von Diagnosesitzungen mit einem Zeichen beginnen. diagnostics_name ist auf 127 Zeichen beschränkt.
max_item_count_num
Die Anzahl der zu persistierenden Ereignisse in einer Sicht. Wenn beispielsweise 100 angegeben wird, werden die 100 aktuellsten Ereignisse, die den Filterkriterien entsprechen, in der Diagnosesitzung persistiert. Wenn weniger als 100 übereinstimmende Ereignisse gefunden werden, enthält die Diagnosesitzung weniger als 100 Ereignisse. max_item_count_num muss mindestens einen Wert von 100 und darf maximal den Wert 100.000 aufweisen.
event_name
Definiert die tatsächlichen Ereignisse, die in der Diagnosesitzung gesammelt werden sollen. event_name ist eines der Ereignisse, die in sys.pdw_diag_events aufgelistet sind, wobei Folgendes gilt: sys.pdw_diag_events.is_enabled='True'
.
filter_property_name
Der Name der Eigenschaft, auf die Ergebnisse beschränkt werden sollen. Wenn Sie beispielsweise eine Einschränkung basierend auf der Sitzungs-ID vornehmen möchten, muss für filter_property_nameSessionId angegeben werden. Eine Liste mit möglichen Werten für filter_property_name finden Sie unter property_name weiter unten.
value
Ein Wert, der für filter_property_name ausgewertet werden soll. Der Werttyp muss mit dem Eigenschaftentyp übereinstimmen. Wenn beispielsweise der Eigenschaftentyp „decimal“ ist, muss der Typ von value „decimal“ sein.
comp_type
Der Vergleichstyp. Mögliche Werte sind: Equals, EqualsOrGreaterThan, EqualsOrLessThan, GreaterThan, LessThan, NotEquals, Contains, RegEx
property_name
Eine Eigenschaft, die mit dem Ereignis verknüpft ist. Eigenschaftsnamen können Teil des Capture-Tags sein oder als Teil der Filterkriterien verwendet werden.
Eigenschaftenname | BESCHREIBUNG |
---|---|
UserName | Ein Benutzer(anmelde)name. |
SessionID | Eine Sitzungs-ID. |
QueryId | Eine Abfrage-ID. |
CommandType | Ein Befehlstyp. |
CommandText | Text innerhalb eines verarbeiteten Befehls. |
OperationType | Der Vorgangstyp für das Ereignis. |
Duration | Die Dauer des Ereignisses. |
SPID | Die Prozess-ID des Diensts. |
Bemerkungen
Pro Benutzer sind maximal 10 Diagnosesitzungen gleichzeitig erlaubt. Eine Liste Ihrer aktuellen Sitzungen finden Sie unter sys.pdw_diag_sessions. Dort können Sie nicht benötigte Sitzungen mithilfe von DROP DIAGNOSTICS SESSION
löschen.
Diagnosesitzungen sammeln weiter Metadaten, bis sie gelöscht werden.
Berechtigungen
Erfordert die ALTER SERVER STATE-Berechtigung.
Sperren
Ruft eine gemeinsame Sperre für die Tabelle der Diagnosesitzungen ab.
Beispiele
A. Erstellen einer Diagnosesitzung
In diesem Beispiel wird eine Diagnosesitzung erstellt, um Statistiken zur Leistung der Datenbank-Engine aufzuzeichnen. Im Beispiel wird eine Diagnosesitzung erstellt, die auf Ausführungs- und Endereignisse von Engine-Abfragen sowie ein blockierendes DMS-Ereignis achtet. Zurückgegeben werden der Befehlstext, der Computername, die Anforderungs-ID (Abfrage-ID) und die Sitzung, in der 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 diese über das sysdiag-Schema auswählen.
SELECT * FROM master.sysdiag.MYDIAGSESSION;
Beachten Sie, dass das sysdiag-Schema eine Sicht mit dem Namen Ihrer Diagnosesitzung enthält.
Um nur die Aktivität für Ihre Verbindung anzuzeigen, fügen Sie die Session.SPID
-Eigenschaft hinzu, und fügen Sie WHERE [Session.SPID] = @@spid;
zur Abfrage hinzu.
Wenn Sie mit der Diagnosesitzung fertig sind, löschen Sie diese mithilfe des Befehls DROP DIAGNOSTICS.
DROP DIAGNOSTICS SESSION MYDIAGSESSION;
B. Alternative Diagnosesitzung
Ein zweites Beispiel mit etwas anderen 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>';
Führen Sie eine Abfrage wie z.B folgende aus:
USE ssawPDW;
GO
SELECT * FROM dbo.FactFinance;
Die folgende Abfrage gibt die Autorisierungszeitsteuerung zurück:
SELECT *
FROM master.sysdiag.PdwOptimizationDiagnostics
ORDER BY DateTimePublished;
Wenn Sie mit der Diagnosesitzung fertig sind, löschen Sie diese mithilfe des Befehls DROP DIAGNOSTICS.
DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;