次の方法で共有


ジェネリック 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 に直接読み込むこともできます。

これらのテーブルの詳細については、「管理データ ウェアハウス」を参照してください。