データ コレクタのアーキテクチャと処理

データ コレクタは、SQL Server エージェントと Integration Services に統合されており、この 2 つを広範囲にわたって使用します。したがって、データ コレクタを使用する前に、この 2 つの SQL Server コンポーネントのそれぞれに関連するいくつかの概念を理解しておく必要があります。

SQL Server エージェントは、コレクション ジョブのスケジュールおよび実行のために使用されます。次の概念を理解しておく必要があります。

  • ジョブ

  • ジョブ ステップ

  • ジョブ スケジュール

  • サブシステム

  • プロキシ アカウント

詳細については、「管理タスクの自動化 (SQL Server エージェント)」を参照してください。

Integration Services (SSIS) は、個々のデータ プロバイダからデータを収集するパッケージを実行するために使用されます。以下の SSIS ツールと概念を理解しておく必要があります。

  • SSIS パッケージ

  • SSIS パッケージ構成

詳細については、「Integration Services パッケージ」を参照してください。

データ コレクタのアーキテクチャ

次の図は、データの収集と格納のアーキテクチャ モデルを示しています。

データ コレクターのアーキテクチャ

この図からもわかるように、このモデルのコンポーネントは以下のカテゴリに分類されています。

  • ストレージ コンポーネントは、構成情報と収集されたデータを格納するデータベースです。

  • 実行コンポーネントは、データの収集と格納のために使用されます。

  • API コンポーネントは、ユーザー インターフェイスとデータ コレクタとの対話を実現するために使用されます。

  • クライアント コンポーネントは、データ コレクタのユーザー インターフェイスです。

ここでは、これらのカテゴリおよびコンポーネントに関する詳細を説明します。

ストレージ

データ コレクタは、msdb データベースと管理データ ウェアハウスの 2 か所にデータを格納します。

注意

データ コレクタには、SQL Server 2005 で導入されたユーザーとスキーマの分離が実装されています。詳細については、「ユーザーとスキーマの分離」を参照してください。

msdb システム データベース

データ コレクタは、msdb データベースを使用して、構成情報、実行時情報、監査、および収集履歴の情報を格納します。データ コレクタを実行する SQL Server のインスタンスにこのデータベースが存在する必要があります。msdb を使用することには次のような利点があります。

  • データ コレクタの構成と実行に必要なデータをすべて 1 か所に格納できます。

  • ファイル システムを使用せずにデータ コレクションの構成を複数のサーバーに配置できます。

  • データ コレクタで既存の SQL Server のセキュリティ メカニズムを使用してデータを保護できます。データベース ロールによって、より詳細なセキュリティを実現することもできます。複数データベースの組み合わせ所有権を実装する必要もありません。

  • msdb はリレーショナル データベースなので、構成データと実行時データの参照整合性を確保できます。

msdb は、コレクタ固有の情報の格納だけでなく、SQL Server エージェント ジョブの情報や SSIS パッケージの情報の格納にも使用されます。

データ コレクションの構成

データ コレクションの構成に関連したテーブルとビューには、コレクション セット、コレクタ型、およびコレクション アイテムに関する情報が含まれます。そのほか、データ コレクタのグローバル パラメータ (管理データ ウェアハウスの場所など) も含まれています。また、データ コレクタや管理データ ウェアハウスのデータベース ロールもここに格納されます。各データ コレクション構成ビューの列の詳細については、「データ コレクタのビュー (Transact-SQL)」を参照してください。

重要な注意事項重要

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

SQL Server エージェント ジョブ

SQL Server エージェント ジョブの情報は、別のスキーマを使用して msdb に格納されます。コレクション セットが追加、削除、または変更されるたびにジョブの情報が作成または更新されます。コレクション セットが開始されると、SQL Server エージェントがこの情報を使用してデータ コレクタのジョブを実行します。

SQL Server Integration Services パッケージ

SSIS パッケージは、既存の SSIS ストレージ テーブルを使用して msdb に格納されます。データ コレクタはこれらのパッケージを使用してデータを収集し、管理データ ウェアハウスにアップロードします。

監査および履歴

データ収集の実行の監査と履歴の詳細なレコードを保存するための専用のストレージが用意されています。データ コレクタの実行時コンポーネントと SSIS パッケージによって、データ収集の間にイベントが生成されます。この情報は、収集プロセスの監視およびトラブルシューティングに使用されます。

管理データ ウェアハウス

管理データ ウェアハウスは、保持されているすべてのデータを格納するリレーショナル データベースです。このデータベースは、データ コレクタと同じシステムに配置することも、別のコンピュータに配置することもできます。

実行

実行カテゴリのコンポーネントはメモリ内で実行され、データの収集と格納を行います。

SQL Server エージェント

SQL Server エージェントは、データ コレクタの実行時コンポーネントをホストします。データの収集は、SQL Server エージェント ジョブとしてスケジュールされます。ジョブが実行されると、コレクション セットの作成および実行に必要なパラメータを使用してデータ コレクタの実行時コンポーネントが呼び出されます。

データ コレクタの実行時コンポーネント

データ コレクタの実行時コンポーネントは、Dcexec.exe というスタンドアロン プロセスによってホストされます。このコンポーネントは、コレクション セットに指定されている定義に基づいてデータの収集を管理します。任意のコレクション セットを入力として指定できます。データ コレクタの実行時コンポーネントの役割は、コレクション セットの一部である SSIS パッケージを読み込んで実行することです。

コレクション セットは、次に示す収集とアップロードのモードのいずれかで実行されます。

  • 非キャッシュ モード。データの収集とアップロードは同じスケジュールに従います。パッケージが開始され、構成された頻度でデータを収集してアップロードし、完了するまで実行されます。完了したパッケージは、メモリからアンロードされます。

  • キャッシュ モード。データの収集とアップロードは別々のスケジュールに従います。パッケージは、ループ制御フロー タスクから終了のシグナルを受信するまで、データを収集してキャッシュします。これにより、データ フローを繰り返し実行できるようになり、継続的なデータ収集が可能になります。

注意

データ コレクタの実行時コンポーネントは、データの収集かデータのアップロードのいずれかのみを実行できます。2 つのタスクを同時に実行することはできません。

SSIS の実行時コンポーネント

データ コレクタの実行時コンポーネントは、データ コレクタが使用する SSIS パッケージを呼び出します。これらのパッケージはインプロセスで実行されます。

SSIS パッケージの最も重要なタスクは、データの収集とデータのアップロードの 2 つです。これらはそれぞれ別のパッケージによって実行されます。

  • コレクション パッケージは、データ プロバイダからデータを収集して一時ストレージに保管します。また、構成によっては、収集したデータに追加情報 (スナップショット時刻やデータ ソースに関する情報など) を付加します。

  • アップロード パッケージは、一時ストレージのデータを読み取り、必要に応じて処理 (不要なデータ ポイントの削除、データの正規化、データ集計など) した後、管理データ ウェアハウスにアップロードします。アップロードは、サーバーのパフォーマンスに対する影響を最小限に抑えるため、一括挿入として行われます。

データの収集とデータのアップロードを分離することで、柔軟性と効率性を高めることができます。たとえば、データのスナップショットを頻繁に (15 秒に 1 回など) キャプチャしつつ、収集したデータのアップロードは 1 時間に 1 回だけ行うことが可能になります。データの収集とアップロードの頻度は、インストールされている個々の SQL Server の監視の要件に基づいて決定する必要があります。

一時ストレージ

一時ストレージは、コレクション セットによって公開されたり動的に計算されたりするプロパティ値を格納するために、データ収集時に使用されます。格納される値は、収集プロセスの間に取得される生データの場合もあれば、集計データなどの処理済みデータの場合もあります。

API

API カテゴリには、データ コレクタの構成、管理、および拡張のために使用されるクラス ライブラリやオブジェクト モデルが含まれます。システム データベースへのクライアント アクセスには API を使用する必要があります。

クラス ライブラリ

データ コレクタは独自の名前空間を持っており、SQL Server 管理オブジェクト (SMO) から独立しています。

ストアド プロシージャとビュー

ストアド プロシージャとビューは、データ コレクタの構成データや管理データ ウェアハウスへの作成、読み取り、更新、および削除のアクセスを提供します。

クライアント

データ コレクタでは、データ コレクタを構成したり使用したりするためのクライアントとして、SQL Server Management Studio と Windows Powershell™ コマンド ライン インターフェイスが使用されます。SQL Server Management Studio を使用して、次のことが行えます。

  • オブジェクト エクスプローラでデータ コレクション構成ウィザードを使用してデータの収集を構成する。

  • オブジェクト エクスプローラを使用して、データ コレクションを有効または無効にする。

  • オブジェクト エクスプローラを使用して、特定のコレクション セットを開始または停止する。

  • オブジェクト エクスプローラを使用して、データ コレクションまたはデータ コレクション セット プロパティを表示または構成する。

  • 管理データ ウェアハウスに格納されている履歴データに基づいてレポートを表示する。このデータベースは、ローカル インスタンスに配置することも、別のサーバーに配置することもできます。後者に配置することをお勧めします。

Windows Powershell コマンド ライン インターフェイスを使用して、次のことが行えます。

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

  • コレクション セットの追加または削除

  • コレクション セットの編集可能プロパティの変更

コンポーネントのやり取りと処理

次の表は、データ コレクタ アーキテクチャのさまざまなコンポーネントの間のやり取りを示しています。

コンポーネント

コンポーネント

説明

SQL Server Management Studio

データ コレクタ API

クライアントは API と通信してデータ コレクタを構成します。

SQL Server Management Studio

管理データ ウェアハウス

クライアントは管理データ ウェアハウスへの読み取りアクセスを許可されており、収集されたデータを取得できます。

SQL Server Management Studio、コンソール クライアント

データ コレクタ API

どちらのクライアントも、API を使用してデータ コレクタをプログラムによって構成できます。

データ コレクタ API

ストアド プロシージャとビュー

API はストアド プロシージャを使用します。ストアド プロシージャには、データ コレクタの構成情報と管理データ ウェアハウスへの読み取りアクセスと書き込みアクセスが許可されています。

msdb - ジョブ定義

SQL Server エージェント

SQL Server エージェントはジョブ定義を読み取ることができます。ジョブ定義には、ジョブのスケジュールと構成情報が含まれています。

SQL Server エージェント

データ コレクタの実行時コンポーネント

SQL Server エージェントは、ジョブ定義に応じてデータ コレクタを呼び出します。

データ コレクタの実行時コンポーネント

msdb - SSIS パッケージ

データ コレクタは SSIS パッケージを読み込みます。その後、SSIS を使用してそれらのパッケージを実行できます。

データ コレクタの実行時コンポーネント

msdb - 監査および履歴

データ コレクタは、msdb のこの部分への書き込みアクセスを許可されているため、データ収集の間に生成されたイベントを記録できます。

SSIS

管理データ ウェアハウス

SSIS パッケージは、管理データ ウェアハウスへの書き込みアクセスを許可されているため、収集されたデータをアップロードすることができます。

SSIS

一時ストレージ

SSIS は、収集プロセスの間に必要に応じて一時ストレージを作成、使用、および削除できます。

msdb - データ コレクションの構成

msdb - ジョブ定義

データ コレクションの構成の情報はジョブ定義にマップされます。詳細については、次の「コレクション セットとジョブのマッピング」を参照してください。

コレクション セットとジョブのマッピング

データ コレクタの構成で定義されているコレクション セットとジョブ定義のジョブとのマッピングは、データ コレクタ アーキテクチャの重要な要素の 1 つです。

コレクション セットとは、SSIS パッケージを使用して定義されるコレクタ型のインスタンスであるアイテムのグループです。コレクション セットはメモリ内のインスタンスであるため、すべてのコレクション セットに有効期間があります (コレクション セットの有効期間については後ほど詳しく説明します)。各コレクション セットは、SQL Server ジョブによって呼び出されたデータ コレクタの実行時コンポーネントによって実行されます。コレクション セットとジョブのマッピングの例を以下に示します。

コレクション セット

例 1

この例のコレクション セット ("Base Performance Data") には、コレクション パッケージとアップロード パッケージとで異なるスケジュールをサポートするために、独立したコレクション パッケージとアップロード パッケージが含まれています。

コレクション セット : 名前 = "Base Performance Data"

コレクション アイテム : 名前 = "SQL_RE_Active_Requests_History"

コレクション パッケージ : ARH_Collect.dtsx

アップロード パッケージ : ARH_Upload.dtsx

収集頻度 : 1 秒

コレクション アイテム : 名前 = "SQL_RE_Wait_Statistics"

コレクション パッケージ : WS_Collect.dtsx

アップロード パッケージ : WS_Upload.dtsx

収集頻度 : 15 秒

コレクション アイテム : 名前 = "SQL_RE_Performance_Counters"

コレクション パッケージ : PC_Collect.dtsx

アップロード パッケージ : PC_Upload.dtsx

入力 : カウンタ – Locks: Current Latch Waits

収集頻度 : 15 秒

コレクション アイテム : 名前 = "WIN_OS_Performance_Counters"

コレクション パッケージ : OS_PC_Collect.dtsx

アップロード パッケージ : OS_PC_Upload.dts

入力 : カウンタ – Process: % Processor Time

収集頻度 : 15 秒

アップロード スケジュール : 30 分ごと

例 2

この例のコレクション セット ("Server Configuration Data") には、Transact-SQL に基づくスナップショットを取得してその都度管理データ ウェアハウスにアップロードする 1 つのパッケージが含まれています。

コレクション セット : 名前 = "Server Configuration Data"

コレクション アイテム : 名前 = "SQL_RE_TSQL"

コレクション/アップロード パッケージ : TSQL_Upload.dtsx

入力 : データベース サイズの Transact-SQL クエリ

収集頻度 : <none>

コレクション アイテム : 名前 = "SQL_RE_TSQL"

コレクション/アップロード パッケージ : TSQL_Upload.dtsx

入力 : 構成オプションの Transact-SQL クエリ

収集頻度 : <none>

アップロード スケジュール : 24 時間ごと

ジョブ

上の例のコレクション セットが作成されると、データの収集を実行するために SQL Server エージェント ジョブが作成されます。ジョブの作成は次の規則に従って行われます。

  • 別のコレクション セットによるデータ収集は別のジョブとして実行されます。

  • キャッシュ コレクション モードを使用するコレクション セットは、SQL Server エージェントの開始時に開始されるジョブとしてスケジュールされます。これらのジョブは連続的に実行され、データ コレクタの実行時コンポーネントによって制御されます。

  • 非キャッシュ コレクション モードを使用するコレクション セットは、通常の SQL Server エージェント ジョブとしてスケジュールされます。これらのジョブは、コレクション セットに定義されているスケジュールに一致する SQL Server エージェント スケジュールを使用します。実際の実行期間はユーザーがカスタマイズできます。

次に、上記の規則を使用したジョブの例を示します。これらのジョブでは、上記で説明したコレクション セットの例を実行できます。

コレクション セット例 1 のジョブ

このコレクション セットの処理には、収集のためのジョブとアップロードのためのジョブの 2 つのジョブが使用されます。

ジョブ 1、名前 : "Base Performance Data Collection"

カテゴリ : "Data Collector"

ジョブ ステップ 1:

コレクション セット : 名前 = "Base Performance Data"

コレクション モード : 収集のみ、連続実行

実行されるパッケージ : ARH_Collect、WS_Collect、PC_Collect、OS_PC_Collect

スケジュール : エージェントの開始時

ジョブ 2、名前 : "Base Performance Data Upload"

カテゴリ : "Data Collector"

ジョブ ステップ 1:

コレクション セット : 名前 = "Base Performance Data"

コレクション モード : アップロードのみ、1 回の実行

実行されるパッケージ : ARH_Upload、WS_Upload、PC_Upload、OS_PC_Upload

スケジュール : 午前 12:00 (PST) から 30 分ごと

コレクション セット例 2 のジョブ

このコレクション セットの処理では 1 つのジョブが作成されます。

ジョブ 3、名前 = "Server Configuration Data"

カテゴリ = "Data Collector"

ジョブ ステップ 1:

コレクション セット、名前 = "Server Configuration Data"

コレクション モード : 収集とアップロード、1 回の実行

実行されるパッケージ : TSQL_Upload、TSQL_Upload

スケジュール : 毎日午前 12:00 (PST)

注意

上の例では、ジョブのコレクション モードがそれぞれ指定されています。この情報は、コレクション セットの実行時に収集とアップロードの処理を管理するために使用されます。

データ コレクタとコレクション セット

データ コレクタとコレクション セットは、操作するデータ収集の要素であるため、その有効な状態と、コレクション セットの有効期間の概念を理解しておく必要があります。

有効な状態

データ コレクションのオン/オフを切り替えるには、データ コレクションを有効にしたり無効にしたりします。管理データ ウェアハウスの接続文字列の変更など、コレクタ全体のパラメータに影響する変更は、データ コレクションを無効にしてから行う必要があります。

コレクション セット構成の変更は、コレクション セットを停止してから行う必要があります。

コレクション セットの実行中にデータ コレクションを無効にすると、それらのコレクション セットは一時停止状態になります。データ コレクションを再度有効にすると、コレクション セットの実行が再開されます。データ コレクションを無効にしたときに実行されていなかったコレクション セットは停止したままです。データ コレクションが無効になっている間に任意のコレクション セットを開始できますが、データ コレクションを有効にするまでは実行されません。

コレクション セットの有効期間

コレクション セットが開始されると、その有効期間の間にいくつかの遷移が発生します。それらの遷移と、その間に発生するアクションを以下に示します。

  1. 構築

    • コレクション セット オブジェクトがメモリ内に作成されます。

    • すべてのプロパティを自由に設定および変更できます。

  2. コレクタ型の追加

    • コレクション セットに新しいコレクション アイテムが追加されます。

    • すべてのコレクション アイテムが同じ対象ルートを参照しているかどうかが確認されます。

  3. コレクタ型の削除

    • 既存のコレクション アイテムがコレクション セットから削除されます。
  4. 作成

    • コレクション セットにコレクション アイテムが少なくとも 1 つ含まれているかどうかが確認されます。

    • すべてのコレクション アイテムとそのプロパティ、収集頻度、およびコレクション セットのすべてのプロパティに関する情報が、データ コレクタの構成のストレージに挿入されます。

    • コレクション セットの初期状態が非アクティブに設定されます。

    • コレクション セットを実行する SQL Server エージェント ジョブが作成され、コレクション セットに関連付けられます。

    • SQL Server エージェント ジョブの初期状態が非アクティブに設定されます。

  5. 開始

    • コレクション セットの状態が実行中に変わります。

    • 関連付けられている SQL Server エージェント ジョブが有効になります。

    • エージェントの開始時に実行するように設定されている場合は、ジョブが直ちに開始されます。

  6. 停止

    • コレクション セットの状態が停止に変わります。

    • コレクション セットの実行中のジョブがすべて停止され、無効になります。

    • コレクション セットに関連付けられているすべてのジョブが非アクティブに設定されます。

  7. 削除

    • コレクション セットに関連付けられているすべてのジョブがメモリから削除されます。

    • コレクション セットに関連付けられているデータ コレクタの構成のオブジェクト (コレクション アイテムやコレクション セットなど) がすべて削除されます。

実行時の処理

次の図は、コレクション セットが開始されてデータが収集およびアップロードされるときの実行時の処理を大まかにまとめたものです。この図では、データの収集とデータのアップロードが 2 つの独立したジョブ プロセスとして示されていますが、前の例で示したように 1 つのジョブにすることもできます。

収集とアップロードの処理の手順

データ収集

上の図で、先頭に "C" が付いているのがデータ収集プロセスの手順です。この処理の手順は次のとおりです。

  1. ストアド プロシージャがコレクション セットを開始し、msdb のコレクション セットの状態が "実行中" に変わります。この状態の変化により、コレクション セットに関連付けられている SQL Server エージェント ジョブが有効になります。

  2. SQL Server エージェントが次の方法でジョブを開始します。

    • コレクション セットがキャッシュ モードに設定されている場合は、直ちにコレクション ジョブが開始されます。

    • コレクション セットが非キャッシュ モードに設定されている場合は、構成されているスケジュールに従ってコレクション ジョブが開始されます。

  3. ジョブが開始されると、データ コレクタの実行時コンポーネント (Dcexec.exe) を実行するプロセスが生成され、コレクション セットに関連付けられているコレクション パッケージを実行するように指示されます。

  4. 開始された Dcexec.exe は、msdb のデータ コレクタの構成を読み取り、使用するコレクション モード (キャッシュまたは非キャッシュ) を特定します。

  5. データ コレクタの実行時コンポーネントが、SSIS の実行時コンポーネントを使用して、コレクション セットに対して定義されているコレクション パッケージを実行します。

  6. コレクション パッケージは、停止のシグナルを受信するか、定義済みのエンドポイントに到達するまで実行されます。収集されたデータは、アップロードされるまでステージング領域に保存されます。

    注意

    使用されるステージング領域の種類は、コレクション セットのコレクタ型の設計によって決まります。たとえば、共有メモリ領域、一時ファイル、メッセージ キューなどが使用されます。

データのアップロード

上の図で、先頭に "U" が付いているのがデータ アップロード プロセスの手順です。この処理の手順は次のとおりです。

  1. アップロードが要求されると、ストアド プロシージャがジョブを開始します。ジョブは SQL Server エージェントによって処理されます。

  2. SQL Server エージェントが次の方法でジョブを開始します。

    • ユーザーによってオンデマンドのアップロード要求が送信された場合は、直ちにアップロード ジョブが開始されます。

    • オンデマンドのアップロード要求がない場合は、コレクション セットに対して構成されているスケジュールに従ってアップロード ジョブが開始されます。

  3. ジョブが開始されると、データ コレクタの実行時コンポーネント (Dcexec.exe) を実行するプロセスが生成され、コレクション セットに関連付けられているアップロード パッケージを実行するように指示されます。

  4. 開始された Dcexec.exe は、msdb のデータ コレクタの構成を読み取り、アップロードの処理方法 (管理データ ウェアハウスへの接続文字列や必要なデータ処理など) を特定します。

  5. データ コレクタの実行時コンポーネントが、SSIS の実行時コンポーネントを使用して、コレクション セットに対して定義されているアップロード パッケージを実行します。

  6. アップロード パッケージが、ステージング領域に保持されているデータを読み取り、必要な変換 (正規化やサンプリングなど) を行います。変換が終了すると、管理データ ウェアハウスに接続してデータを挿入します。

  7. アップロードが終了した後、プロセスは終了しますが、コレクション セットの状態は変わりません。コレクション セットのスケジュールに従って次のアップロードが開始されます。