Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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;