適用対象:Analytics Platform System (PDW)
診断セッションを使用すると、システムまたはクエリのパフォーマンスに関する詳細なユーザー定義の診断情報を保存できます。
診断セッションは、通常、特定のクエリのパフォーマンスをデバッグしたり、アプライアンスの操作中に特定のアプライアンス コンポーネントの動作を監視したりするために使用されます。
Note
診断セッションを使用するには、XML に慣れている必要があります。
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 ;
議論
diagnostics_name
診断セッションの名前。 診断セッション名には、文字 a から z、A ~ Z、および 0 から 9 のみを含めることができます。 また、診断セッション名は文字で始まる必要があります。 diagnostics_name は 127 文字に制限されています。
max_item_count_num
ビューに保持されるイベントの数。 たとえば、100 を指定すると、フィルター条件に一致する最新のイベント 100 が診断セッションに保持されます。 一致するイベントが 100 個未満の場合、診断セッションに含まれるイベントは 100 個未満です。 max_item_count_num は、100 以上 100,000 以下である必要があります。
event_name
診断セッションで収集される実際のイベントを定義します。
event_nameは、sys.pdw_diag_events.is_enabled='True'sys.pdw_diag_eventsに記載されているイベントの 1 つです。
filter_property_name
結果を制限するプロパティの名前。 たとえば、セッション ID に基づいて制限する場合、filter_property_nameは SessionId にする必要があります。 filter_property_nameの潜在的な値の一覧については、 property_name 引数を 参照してください。
価値
filter_property_nameに対して評価する値。 値の型は、プロパティの型と一致する必要があります。 たとえば、プロパティ型が 10 進数の場合、 値 の型は 10 進数である必要があります。
comp_type
比較の種類。 使用可能な値は、 Equals、 EqualsOrGreaterThan、 EqualsOrLessThan、 GreaterThan、 LessThan、 NotEquals、 Contains、および RegExです。
property_name
イベントに関連するプロパティ。 プロパティ名は、キャプチャ タグの一部にすることも、フィルター条件の一部として使用することもできます。
| プロパティ名 | Description |
|---|---|
UserName |
ユーザー (ログイン) 名。 |
SessionId |
セッション ID。 |
QueryId |
クエリ ID。 |
CommandType |
コマンドの種類。 |
CommandText |
処理されたコマンド内のテキスト。 |
OperationType |
イベントの操作の種類。 |
Duration |
イベントの期間。 |
SPID |
セッション ID。 |
Remarks
各ユーザーには、最大 10 個の同時診断セッションが許可されます。 現在のセッションの一覧については 、「sys.pdw_diag_sessions 」を参照し、 DROP DIAGNOSTICS SESSIONを使用して不要なセッションを削除します。
診断セッションは、削除されるまでメタデータを収集し続けます。
Permissions
ALTER SERVER STATE アクセス許可が必要です。
ロック
診断セッション テーブルの共有ロックを取得します。
例示
A. 診断セッションを作成する
この例では、データベース エンジンのパフォーマンスのメトリックを記録する診断セッションを作成します。 この例では、エンジン クエリの実行中/終了イベントとブロック DMS イベントをリッスンする診断セッションを作成します。 返されるのは、コマンド テキスト、マシン名、要求 ID (クエリ ID)、およびイベントが作成されたセッションです。
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>';
診断セッションの作成後、クエリを実行します。
SELECT COUNT(EmployeeKey)
FROM AdventureWorksPDW2012..FactSalesQuota;
次に、sysdiag スキーマから選択して、診断セッションの結果を表示します。
SELECT * FROM master.sysdiag.MYDIAGSESSION;
sysdiag スキーマには、診断セッション名という名前のビューが含まれています。
接続のアクティビティのみを表示するには、 Session.SPID プロパティを追加し、クエリに WHERE [Session.SPID] = @@spid; を追加します。
診断セッションが完了したら、 DROP DIAGNOSTICS コマンドを使用して削除します。
DROP DIAGNOSTICS SESSION MYDIAGSESSION;
B. 代替診断セッション
少し異なるプロパティを持つ 2 番目の例。
-- 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>';
次のようなクエリを実行します。
USE ssawPDW;
GO
SELECT * FROM dbo.FactFinance;
次のクエリは、承認のタイミングを返します。
SELECT *
FROM master.sysdiag.PdwOptimizationDiagnostics
ORDER BY DateTimePublished;
診断セッションが完了したら、 DROP DIAGNOSTICS コマンドを使用して削除します。
DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;