データ コレクターのログ記録

データ コレクターは、各コレクション セットとそのコレクション パッケージに関するさまざまな種類の情報をキャプチャしてログに記録します。msdb テーブルに書き込まれるこの情報は、コレクション セットの現在の状態やパッケージの実行結果に関する情報を提供します。これらのログ テーブルは、各コレクション セットとそのパッケージに関する統計情報も提供します。次の種類の情報をデータ コレクションの監視および分析に利用できます。

  • 現在実行中のコレクション セット

  • コレクション セットの実行履歴

  • 指定されたコレクション セットでの、そのコレクションの一部として実行されたパッケージの階層

  • 各パッケージの開始時刻と終了時刻、時間、完了時の状態、および処理された行数

  • コレクション セットの実行が失敗した場合の、そのエラーの原因となったパッケージ

  • パッケージの実行が失敗した場合の、失敗したパッケージのコンポーネントとエラー メッセージ

  • 各パッケージでの、実行ごとにパッケージでログに記録されたログ イベントのシーケンス

データ コレクターのログ記録における SSIS の役割

データ コレクターは、ストアド プロシージャおよび SQL Server 2008 Integration Services (SSIS) のタスク実行とログ機能を使用してログ記録を実装します。これらの機能によって、実行時イベントの発生時に、ログ プロバイダー用に概要ログ エントリおよび詳細ログ エントリが作成されます。詳細については、「パッケージへのログ機能の実装」を参照してください。

ログに記録されたイベントは、プログラム実行のすべてのフェーズに対する参照ポイントを提供します。各イベント レコードは、タスクが実行されたパッケージの実行 ID にマップされます。データ コレクターは、データ コレクションやデータのアップロードのために、これらの ID を特定のパッケージにマップします。

コレクション セットとパッケージのログ記録

データ コレクターの高レベルなアーキテクチャとデータ処理を以下に示します。

  • 実行時にデータ コレクターによって提供されるコレクション セットの情報は、ストアド プロシージャを使用してデータ コレクター テーブルに格納されます。すべてのレコードには、テーブル エントリの参照および SSIS 実行 ID へのパッケージのマッピングに使用される log_id が付けられます。

  • パッケージ情報は、各パッケージの実行開始時と終了時にログに記録されます。このログ記録は、各パッケージの制御フローの開始時と終了時に Transact-SQL タスクを実行することで行われます。

    • パッケージの実行中に、定期更新と統計更新がデータ コレクターによって実行されます。各パッケージには、エラー イベントをログに記録するグローバル エラー ハンドラー タスク (SSIS パッケージ イベントを使用して実装) があります。これは、必要なイベントのログ記録を提供する制御フローに、SSIS "SQL 実行タスク" を配置することで行います。詳細については、「SSIS SQL 実行タスク」および「制御フローの要素」を参照してください。

    • SSIS が生成するイベントは、dbo.sp_ssis_addlogentry ストアド プロシージャを使用して、SSIS 定義テーブル (dbo. sysssislog) に記録されます。

  • パッケージの終了時に、成功または失敗のイベントがログに記録されます。

  • コレクション セットの停止時に、その情報がログに記録されます。パッケージの場合と同様に、成功または失敗のイベントがログに記録されます。

データ コレクターによって生成されるデータは、dbo.syscollector_execution_log_internal テーブルに格納されます。このテーブルは、dbo.sysssislog に結合されます。これにより、コレクション セットの実行に関するすべての情報が提供されます。これらのテーブルについては、以下のセクションで詳しく説明します。

ログ テーブル

ログ テーブルとその列を次の表に示します。後の「ログ データへのアクセスと表示」セクションでは、ログ テーブルのデータ型と内容に関する詳細情報の取得に使用できる関数とビューについて説明します。

テーブル名

説明

syscollector_execution_log_internal

実行情報を格納するためのデータ コレクター テーブルです。このテーブルには、次の列があります。

  • log_id

  • parent_log_id

  • collection_set_id

  • collection_item_id

  • start_time

  • last_iteration_time

  • finish_time

  • runtime_execution_mode

  • status

  • operator

  • package_id

  • package_execution_id

  • failure_message

syscollector_execution_stats_internal

統計情報を格納するためのデータ コレクター テーブルです。このテーブルには、次の列があります。

  • log_id

  • task_name

  • execution_row_count_in

  • execution_row_count_out

  • execution_row_count_errors

  • execution_time_ms

  • log_time

sysssislog

コレクション セットまたはパッケージの開始、警告、エラーなどのイベント情報用の SSIS 定義テーブルです。詳細については、「sysssislog (Transact-SQL)」を参照してください。

重要な注意事項重要

ログ テーブルのデータは変更しないでください。これらのテーブルにあるデータは、ストアド プロシージャを使った特別な方法で挿入、更新、削除する必要があります。テーブル名と定義は実行時に変更できます。これらは、アプリケーションを更新するときには必ず変更してください。テーブル名と定義は、将来のリリースでは変更される可能性がある情報です。インスタンスとアプリケーション データにアクセスするには、テーブルを直接使用する代わりに、データ コレクターで提供される、ドキュメントに記載のストアド プロシージャとビューを使用してください。

ログの保有期間

コレクション セットのログは、管理データ ウェアハウスでコレクション セットのデータが保持されるのと同じ期間保持されます。これは、各コレクション セットに対して構成できる保有期間で定義します。保有期間が経過すると、SQL Server エージェント ジョブがそのデータをログから削除します。

ログ記録レベル

3 つのレベルのログ記録が、発生する可能性のあるさまざまなデータ コレクション シナリオを処理するために用意されています。これにより、必要に応じて、コレクション セットまたはパッケージのトラブルシューティングに必要なデータを利用できるようになります。ログ記録の要件に応じて、異なるログ記録レベルをコレクション セットごとに設定できます。

次の表では、使用可能なログ オプションについて説明します。

レベル

説明

0

既定のログ記録レベル。実行情報と次の SSIS イベントをログに記録します。

  • コレクション セットの開始または停止

  • パッケージの開始または停止

  • エラー情報

1

レベル 0 の情報に加えて、以下のイベントをログに記録します。

  • 実行の統計

  • 継続的に実行されているコレクションの進行状況

  • SSIS からの警告イベント

2

レベル 1 の情報に加えて、詳細な SSIS イベント情報をログに記録します。

既定では、ログ記録レベルは 0 です。レベル 0 は、レベル 1 の情報によって生成される警告イベントなど、過剰なログ メッセージを防ぐために使用されます。これらの警告イベントには、ユーザーが訂正できない SSIS からのパフォーマンス ヒントが含まれている場合があります。

レベル 2 では、高度なトラブルシューティングに使用できる追加のイベント情報が提供されます。

SSIS イベント

すべてのデータ コレクター パッケージは、SQL Server イベント プロバイダーを使用します。次の表では、ログに記録され、表示に使用できるイベントについて説明します。

イベント名

ログ記録レベル

説明

PackageBegin

0

常に生成される標準のイベントです。このイベントは、無効にすることはできません。

PackageEnd

0

常に生成される標準のイベントです。このイベントは、無効にすることはできません。

OnError

0

エラー イベントです。

OnWarning

1

警告イベントです。

PipelineBufferLeak

2

バッファー マネージャーの停止後もバッファーを保持しているコンポーネントに関する情報を提供します。バッファーが保持されたままの場合、バッファー リソースは解放されていないので、メモリ リークが発生する可能性があります。このログ エントリは、コンポーネントの名前とバッファーの ID を含みます。

PipelineExecutionPlan

2

データ フローの実行プランを報告します。この実行プランでは、バッファーをコンポーネントに送信する方法に関する情報を提供します。この情報は、PipelineExecutionTrees ログ エントリと組み合わせて、データ フロー タスク内での実行内容を示します。

PipelineExecutionTrees

2

データ フロー内のレイアウトの実行ツリーを報告します。データ フロー エンジンのスケジューラは、このツリーを使用して、データ フローの実行プランを構築します。

PipelineInitialization

2

タスクに関する初期化情報を提供します。この情報には、バイナリ ラージ オブジェクト (BLOB) データの一時的な保存に使用するディレクトリ、既定のバッファー サイズ、およびバッファー内の行数が含まれます。データ フロー タスクの構成によっては、複数のログ エントリが書き込まれる場合があります。

ExecuteSQLExecutingQuery

2

SQL ステートメントの実行フェーズに関する情報を提供します。タスクがデータベースに接続したとき、SQL ステートメントの準備が開始されたとき、および SQL ステートメントの実行が完了した後に、ログ エントリが書き込まれます。準備フェーズのログ エントリには、タスクで使用される SQL ステートメントが含まれます。

FileSystemOperation

2

タスクで実行される操作を報告します。ログ エントリは、ファイル システム操作の開始時に書き込まれます。これには、操作の基になるファイルと操作対象のファイルに関する情報が含まれます。

ExecuteProcessExecutingProcess

2

タスクで実行するように構成されているプロセスに関する情報を提供します。

2 つのログ エントリが書き込まれます。1 つのエントリには、タスクで実行される実行可能ファイルの名前と場所が含まれ、もう 1 つのエントリは、実行可能ファイルの終了を記録します。

ログ データへのアクセスと表示

用意されている関数およびビューを使用することで、プログラムからデータにアクセスして表示することができます。また、Management Studio のオブジェクト エクスプローラーの [ログ ファイルの表示] を使用してログを表示することもできます。詳細については、「コレクション セットのログを表示する方法」を参照してください。

次の表では、ログ データへのアクセスに使用できる関数およびビューについて説明します。

名前

説明

fn_syscollector_get_execution_details (Transact-SQL)

要求された log_id のコレクション セットとパッケージのログ、およびそのすべての依存ログ エントリに関する詳細情報を返します。

fn_syscollector_get_execution_stats (Transact-SQL)

要求された log_id の一連の統計を返します。統計は、syscollector_execution_stats ビューのエントリから計算されます。

syscollector_execution_log (Transact-SQL)

syscollector_execution_log_internal テーブルのビューを提供します。

syscollector_execution_log_full (Transact-SQL)

syscollector_execution_log_internal テーブルの詳細ビューを提供し、最上位のコレクション ログ エントリからコレクション セットの実行の一部として実行されたすべてのパッケージを含む階層のログ エントリを表示します。

syscollector_execution_stats (Transact-SQL)

syscollector_execution_stats_internal テーブルの 1:1 のビューを提供します。