ジェネリック SQL Trace コレクター型
ジェネリック SQL Trace コレクター型は、SQL トレースを使用して SQL Server リレーショナル エンジンを監視します。トレース データは、既定のトレースまたは 1 つ以上のカスタム トレースから取得できます。このコレクター型は、core.supported_collector_types ビューに登録されています。
サーバー全体の設定によって制御される既定のトレースは、サーバー上で継続的に実行され、対象となる一般的なイベントをキャプチャします。これらの対象のイベントは、個々のバッチ実行には関係していません。これは影響の少ないトレースです。カスタム トレースは任意のイベントを収集できます。また、選択されたイベントおよびトレース実行時のサーバーの利用状況によって、影響が少ない場合と大きく影響する場合があります。ほとんどの場合、カスタム トレースが継続的に実行されることはありません。
ジェネリック SQL Trace コレクター型は、1 つ以上のファイルにデータを格納するサーバー側のトレースを実行します。トレース ファイルからは、fn_trace_gettable() システム関数を使用してトレース データが取得されます。構成によっては、コレクターがこのデータを処理して管理データ ウェアハウスにアップロードします。
ジェネリック SQL Trace コレクター型は、使用されていないファイルを削除して、トレース データの格納領域を一定量に維持するように構成されています。
ジェネリック SQL トレースの入力スキーマ
ジェネリック SQL Trace コレクター型は、入力パラメーターに次のスキーマを使用します。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="DataCollectorType">
<xs:element name="SqlTraceCollector">
<xs:complexType>
<xs:sequence>
<xs:element name="Events">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="EventType">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Event">
<xs:complexType>
<xs:attribute name="id" type="xs:unsignedByte" use="required" />
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="columnslist" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedByte" use="optional" />
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Filters">
<xs:complexType>
<xs:sequence>
<xs:element name="Filter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="columnid" type="xs:unsignedByte" use="required" />
<xs:attribute name="columnname" type="xs:string" use="required" />
<xs:attribute name="logical_operator" type="xs:string" use="required" />
<xs:attribute name="comparison_operator" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="use_default" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="DataCollectorType">
<xs:element name="SqlTraceCollector">
<xs:complexType>
<xs:sequence>
<xs:element name="Events">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="EventType">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Event">
<xs:complexType>
<xs:attribute name="id" type="xs:unsignedByte" use="required" />
<xs:attribute name="name" type="xs:string" use="required" />
<xs:attribute name="columnslist" type="xs:string" use="optional" />
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:unsignedByte" use="optional" />
<xs:attribute name="name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Filters">
<xs:complexType>
<xs:sequence>
<xs:element name="Filter" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="columnid" type="xs:unsignedByte" use="required" />
<xs:attribute name="columnname" type="xs:string" use="required" />
<xs:attribute name="logical_operator" type="xs:string" use="required" />
<xs:attribute name="comparison_operator" type="xs:string" use="required" />
<xs:attribute name="value" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="use_default" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:schema>
スキーマに示されているように、コレクター型は、重要な要素、ストアド プロシージャのパラメーター、および特別列で構成されます。
重要な要素
入力トレース定義には、トレースを定義するイベントの一覧とフィルターの一覧が含まれています。
イベントは EventType ノード内で分類されます。これは SQL Server Profiler のイベント カテゴリに相当します。
EventType ノードでは、ID 属性が sys.trace_category システム ビューの値と一致している必要があります。name 属性は省略できます。
Event ノードでは、ID 属性が sys.trace_events システム ビューの値と一致している必要があります。name 属性は省略できます。
ID は、トレース開始スクリプトを生成する際に使用されます。名前は、読みやすくするため、およびユーザー インターフェイスに入力定義を表示するために使用されます。
Event ノードには次の属性があります。
ID, name. 前で説明しています。
columnslist. イベントに対して選択された列 ID のコンマ区切りの一覧です。columnslist が指定されていない場合は、当該イベントの列がすべて取り込まれます。
Filter ノードは、トレースに適用されるフィルターを定義します。属性には次の意味があります。
columnid. フィルターが適用される列の ID です。
columnname. columnid で識別される列の名前です。この名前は表示の際に使用されます。
logical_operator. 同じ列に設定された複数のフィルター間に適用する演算子です。使用できる値は AND と OR です。
comparison_operator. 列とフィルター値の間に適用する演算子です。使用できる値は、EQ、NE、GT、GE、LT、LE、LIKE、NOTLIKE です。
value. 比較に使用する値です。フィルターの値および比較演算子は、フィルターを適用する列の型に適合している必要があります。たとえば、列の型が string の場合は、演算子に "LIKE" と "NOTLIKE" のみを使用でき、フィルター値に文字列値のみを使用できます。
ストアド プロシージャのパラメーター
次に示す sp_trace_create ストアド プロシージャのパラメーターは、コレクション セットまたはコレクター オプションに基づいて定義されます。
@options. トレースが、常にロールオーバー オプション (TRACE_FILE_ROLLOVER) を設定した状態で開始されます。
@tracefile. トレース ファイルの場所が、CollectorTempDir 変数によって決定されます。トレース ファイルの名前は、"DataCollector_" + instanceName + CollectionSetUid + CollectionItemId + ".trc" を連結して生成されます。
@maxfilesize. 常に 5 MB に設定されます。
@stoptime. 使用しません。
@filecount. コレクション セットごとに許可される最大一時ストレージに合わせて設定されます (MB 単位)。@filecount = storage limit/5。
特別列
各イベントには、そのイベントの入力パラメーターで事前に選択されていなくても追加される列があります。該当する列は次のとおりです。
StartTime
EndTime
EventSequence
SPID
上記の列によって、イベントの起点が特定され、イベントの相関関係が有効になります。
ジェネリック SQL Trace コレクター型で使用される入力スキーマの使用方法については、次のコード例を参照してください。
<?xml version="1.0" encoding="utf-8"?>
<ns:SqlTraceCollector xmlns:ns="DataCollectorType" normalize_sql="0" normalize_plans="0" normalize_procedures="0" normalize_connections="0"
normalize_default="1">
<Events>
<EventType id ="6" name="Performance">
<Event id="58" name="Auto Stats"/>
<Event id="165" name="Performance statistics"/>
<Event id="146" name="Showplan XML Statistics Profile"/>
</EventType>
<EventType id="13" name="TSQL">
<Event id="12" name="SQL:BatchCompleted" columnslist="1, 3, 9, 10, 13, 16, 17, 18"/>
<Event id="13" name="SQL:BatchStarting"/>
<Event id="41" name="SQL:StmtCompleted"/>
<Event id="166" name="SQL:StmtRecompile"/>
</EventType>
<EventType id="20" name="CLR">
<Event id="196" name="Assembly Load"/>
</EventType>
<EventType id="1" name="Cursors">
<Event id="53" name="CursorOpen"/>
<Event id="75" name="CursorRecompile"/>
<Event id="76" name="CursorImplicitConversion"/>
<Event id="78" name="CursorClose"/>
</EventType>
</Events>
<Filters>
<Filter columnid="13" columnname="Duration" logical_operator="AND" comparison_operator="GE" value="1000L"/>
<Filter columnid="10" columnname="ApplicationName" logical_operator="AND" comparison_operator="LIKE" value="Data Collector"/>
<Filter columnid="10" columnname="ApplicationName" logical_operator="AND" comparison_operator="EQ" value="NULL"/>
<Filter columnid="18" columnname="CPU" logical_operator="AND" comparison_operator="EQ" value="20"/>
<Filter columnid="14" columnname="StartTime" logical_operator="AND" comparison_operator="GT" value="2007-02-09 13:40:00"/>
</Filters>
</ns:SqlTraceCollector>
<?xml version="1.0" encoding="utf-8"?>
<ns:SqlTraceCollector xmlns:ns="DataCollectorType" normalize_sql="0" normalize_plans="0" normalize_procedures="0" normalize_connections="0"
normalize_default="1">
<Events>
<EventType id ="6" name="Performance">
<Event id="58" name="Auto Stats"/>
<Event id="165" name="Performance statistics"/>
<Event id="146" name="Showplan XML Statistics Profile"/>
</EventType>
<EventType id="13" name="TSQL">
<Event id="12" name="SQL:BatchCompleted" columnslist="1, 3, 9, 10, 13, 16, 17, 18"/>
<Event id="13" name="SQL:BatchStarting"/>
<Event id="41" name="SQL:StmtCompleted"/>
<Event id="166" name="SQL:StmtRecompile"/>
</EventType>
<EventType id="20" name="CLR">
<Event id="196" name="Assembly Load"/>
</EventType>
<EventType id="1" name="Cursors">
<Event id="53" name="CursorOpen"/>
<Event id="75" name="CursorRecompile"/>
<Event id="76" name="CursorImplicitConversion"/>
<Event id="78" name="CursorClose"/>
</EventType>
</Events>
<Filters>
<Filter columnid="13" columnname="Duration" logical_operator="AND" comparison_operator="GE" value="1000L"/>
<Filter columnid="10" columnname="ApplicationName" logical_operator="AND" comparison_operator="LIKE" value="Data Collector"/>
<Filter columnid="10" columnname="ApplicationName" logical_operator="AND" comparison_operator="EQ" value="NULL"/>
<Filter columnid="18" columnname="CPU" logical_operator="AND" comparison_operator="EQ" value="20"/>
<Filter columnid="14" columnname="StartTime" logical_operator="AND" comparison_operator="GT" value="2007-02-09 13:40:00"/>
</Filters>
</ns:SqlTraceCollector>
処理と出力
このバージョンのジェネリック SQL Trace コレクター型は、サーバーの既定のトレースでキャプチャされたイベントを処理する全トレース データの読み込みをサポートしています。
全トレース データの読み込み
このデータ読み込みでは、考えられるすべてのトレース列を含んだ単一のテーブルに、トレース データが処理されることなくそのまま読み込まれます。同じテーブルに複数のトレースからデータを読み込むことができるので、データのマージが簡単になります。各行には、トレース データに加えて snapshot_id が付加されます。これにより、トレース データの取得元とトレースの時刻を特定できます。
全トレース データの読み込みには次の利点があります。
トレース データをサーバーからデータベースに簡単に取り込み、取り込んだデータを SQL Server Profiler でトレースを開くことなく簡単に照会して処理できます。
複数のトレースから取得したデータをマージし、相互に関連付けることができます。
元のトレースからデータが失われません。キャプチャされたデータはすべて保持されます。
SQL Server Profiler などの既存のツールを使用してデータを参照できます。
対象スキーマ
対象スキーマは、管理データ ウェアハウスに格納されたトレースに関する詳細情報をキャプチャするテーブル、およびトレースからすべてのトレース イベントを格納するために使用されるテーブルとして定義されます。トレース データは、次の管理データ ウェアハウス テーブルに格納されます。
snapshots.trace_info。このテーブルには、ウェアハウスのインスタンスにアップロードされたすべてのトレースに関する情報が格納されます。
snapshots.trace_data。このテーブルには、すべてのトレースでキャプチャされたデータが格納されます。このテーブルでは、考えられる各トレース列に対して列が定義されます。このようにトレース データを格納することで、データ コレクターは fn_trace_gettable() システム関数から出力されたときと同じ形でデータをテーブルに挿入できます。また、テーブルを SQL Server Profiler に直接読み込むこともできます。
これらのテーブルの詳細については、「管理データ ウェアハウス」を参照してください。
関連項目