CREATE DIAGNOSTICS SESSION (Transact-SQL)

適用対象: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;