CREATE DIAGNOSTICS SESSION (Transact-SQL)CREATE DIAGNOSTICS SESSION (Transact-SQL)

適用対象:Applies to: はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse適用対象:Applies to: はいParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

診断セッションを使用すると、システムまたはクエリのパフォーマンスについての詳細なユーザー定義の診断情報を保存することができます。Diagnostics sessions allow you to save detailed, user-defined diagnostic information on system or query performance.

診断セッションは通常、特定のクエリのパフォーマンスをデバッグする、またはアプライアンス操作中に特定のアプライアンス コンポーネントの動作を監視する場合に使用します。Diagnostics sessions are typically used to debug performance for a specific query, or to monitor the behavior of a specific appliance component during appliance operation.

注意

診断セッションを使用するために XML を熟知してください。You should be familiar with XML in order to use diagnostics sessions.

構文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 ;  

注意

SQL Server 2014 以前の Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

引数Arguments

diagnostics_namediagnostics_name
診断セッションの名前。The name of the diagnostics session. 診断セッションの名前には、文字 a - z、A - Z、0 - 9 のみを含めることができます。Diagnostics session names can include characters a-z, A-Z, and 0-9 only. また、診断セッションの名前は、文字で開始する必要があります。Also, diagnostics session names must start with a character. diagnostics_name の上限は 127 文字です。diagnostics_name is limited to 127 characters.

max_item_count_nummax_item_count_num
ビューに保存されるイベントの数。The number of events to be persisted in a view. たとえば、100 を指定した場合は、フィルター条件に一致する最新の 100 イベントが診断セッションに保存されます。For example, if 100 is specified, the 100 most recent events matching the filter criteria will be persisted to the diagnostics session. 見つかった一致するイベントが 100 より少ない場合は、診断セッションに含まれるイベントは 100 未満になります。If fewer than 100 matching events are found, the diagnostics session will contain less than 100 events. max_item_count_num は 100 以上 100,000 以下である必要があります。max_item_count_num must be at least 100 and less than or equal to 100,000.

event_nameevent_name
診断セッションで収集する実際のイベントを定義します。Defines the actual events to be collected in the diagnostics session. event_name は、sys.pdw_diag_events.is_enabled='True' の場合に sys.pdw_diag_events に列挙されるイベントの 1 つです。event_name is one of the events listed in sys.pdw_diag_events where sys.pdw_diag_events.is_enabled='True'.

filter_property_namefilter_property_name
結果を制限するプロパティの名前です。The name of the property on which to restrict results. たとえば、セッション ID に基づいて制限する場合は、filter_property_nameSessionId にする必要があります。For example, if you want to limit based on session id, filter_property_name should be SessionId. filter_property_name に使用できる値の一覧については、以下の property_name を参照してください。See property_name below for a list of potential values for filter_property_name.

valuevalue
filter_property_name に対して評価する値。A value to evaluate against filter_property_name. 値の型は、プロパティの型と一致する必要があります。The value type must match the property type. たとえば、プロパティの型が decimal の場合、value の型も decimal である必要があります。For example, if the property type is decimal, the type of value must be decimal.

comp_typecomp_type
比較型。The comparison type. 可能性のある値: Equals、EqualsOrGreaterThan、EqualsOrLessThan、GreaterThan、LessThan、NotEquals、Contains、RegExPotential values are:Equals, EqualsOrGreaterThan, EqualsOrLessThan, GreaterThan, LessThan, NotEquals, Contains, RegEx

property_nameproperty_name
イベントに関連するプロパティです。A property related to the event. プロパティ名は、キャプチャ タグの一部でもかまわず、またはフィルター条件の一部として使用されます。Property names can be part of the capture tag, or used as part of filtering criteria.

プロパティ名Property Name 説明Description
UserNameUserName ユーザー (ログイン) の名前。A user (login) name.
SessionIdSessionId セッション ID。A session ID.
QueryIdQueryId クエリの ID。A query ID.
CommandTypeCommandType コマンドの種類。A command type.
CommandTextCommandText 処理されたコマンド内のテキスト。Text within a command processed.
OperationTypeOperationType イベントの操作の種類。The operation type for the event.
DurationDuration イベントの期間。The duration of the event.
SPIDSPID サービス プロセス ID。The Service Process ID.

解説Remarks

各ユーザーには、最大 10 個の同時診断セッションが許可されます。Each user is allowed a maximum of 10 concurrent diagnostics sessions. 現在のセッションの一覧については、sys.pdw_diag_sessions を参照してください。不要なセッションがある場合は、DROP DIAGNOSTICS SESSION を使用して削除します。See sys.pdw_diag_sessions for a list of your current sessions, and drop any unneeded sessions using DROP DIAGNOSTICS SESSION.

診断セッションでは、削除されるまでメタデータの収集が続行されます。Diagnostics sessions will continue to collect metadata until dropped.

アクセス許可Permissions

ALTER SERVER STATE アクセス許可が必要です。Requires the ALTER SERVER STATE permission.

ロックLocking

診断セッション テーブルで共有ロックを取得します。Takes a shared lock on the Diagnostic Sessions table.

Examples

A.A. 診断セッションを作成するCreating a diagnostics session

この例では、データベース エンジンのパフォーマンスのメトリックを記録する診断セッションを作成します。This example creates a diagnostics session to record metrics of the database engine performance. この例では、エンジン クエリ実行/終了イベントと DMS ブロック イベントをリッスンする診断セッションを作成します。The example creates a diagnostics session that listens for Engine Query running/end events and a blocking DMS event. 返される結果は、コマンド テキスト、コンピューター名、要求 ID (クエリ ID)、イベントが作成されたセッションです。What is returned is the command text, machine name, request id (query id) and the session that the event was created on.

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

診断セッションの作成後に、クエリを実行します。After creation of the diagnostics session, run a query.

SELECT COUNT(EmployeeKey) FROM AdventureWorksPDW2012..FactSalesQuota;  

その後、sysdiag スキーマから選択して、診断セッションの結果を表示します。Then view the diagnostics session results by selecting from the sysdiag schema.

SELECT * FROM master.sysdiag.MYDIAGSESSION;  

sysdiag スキーマには、診断セッション名の名前が付いたビューが含まれることに注意してください。Notice that the sysdiag schema contains a view that is named your diagnostics session name.

接続のアクティビティのみを表示するには、Session.SPID プロパティを追加し、WHERE [Session.SPID] = @@spid; をクエリに追加します。To see only the activity for your connection, add the Session.SPID property and add WHERE [Session.SPID] = @@spid; to the query.

診断セッションが完了したら、DROP DIAGNOSTICS コマンドを使用して削除します。When you are finished with the diagnostics session, drop it using the DROP DIAGNOSTICS command.

DROP DIAGNOSTICS SESSION MYDIAGSESSION;  

B.B. 別の診断セッションAlternative diagnostic session

わずかに異なるプロパティを持つ 2 番目の例です。A second example with slightly different properties.

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

次のような、クエリを実行します。Run a query, such as:

USE ssawPDW;  
GO  
SELECT * FROM dbo.FactFinance;  

次のクエリでは、承認のタイミングが返されます。The following query returns the authorization timing:

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

診断セッションが完了したら、DROP DIAGNOSTICS コマンドを使用して削除します。When you are finished with the diagnostics session, drop it using the DROP DIAGNOSTICS command.

DROP DIAGNOSTICS SESSION PdwOptimizationDiagnostics;