ちょっとメモとして残しておきたいと思います。
SQL Server 2008 以降ではデータ コレクションというパフォーマンス情報を定期的に取得できる仕組みが搭載されています。
デフォルトで作成されているシステム データ コレクション セットでは以下の 3 種類が定義されています。
- クエリ統計
- サーバーの利用状況
- ディスク使用量
- (ユーティリティ情報)
SQL Server 2008 R2 で搭載されている UCP (ユーティリティ コントロール ポイント) もシステム データ コレクションの一種として作成さがされているようで、2008 R2 だと [ユーティリティ情報] というシステムデータコレクションが作成されています。
今回はこのデータ コレクションをユーザー独自に定義してカスタムしたデータ コレクションを作成してみたいと思います。
SQL Server の自習書だと、[監視ツールの基本操作] にこのあたりの手順はまとめられています。
■データ コレクションの構成
データコレクションですが以下の情報で構成されています。
- コレクション セットのスケジュール
- コレクション セット
- コレクション アイテム
[コレクション セットのスケジュール]
スケジュールに関しては作成したデータ コレクションをどのようなタイミングでアップロードするかを定義したものになります。
デフォルトでは以下のアップロードスケジュールが事前に定義されています。
- CollectorSchedule_Every_5min
- CollectorSchedule_Every_10min
- CollectorSchedule_Every_15min
- CollectorSchedule_Every_30min
- CollectorSchedule_Every_60min
- CollectorSchedule_Every_6h
これ以外の間隔アップロードする場合にはユーザーが独自にスケジュールを作成する必要があります。
このスケジュールはコレクション セットを [キャッシュ モード] で設定した場合に使用します。
[非キャッシュ モード] の場合にはデータを取得したタイミングで情報をアップロードしますので、この場合はスケジュールを作成する必要はありません。
[コレクション セット]
コレクションセットはスケジュールとキャッシュの設定 / データの保存日数 / スケジュールを定義したものになります。
[コレクション アイテム]
コレクション アイテムは取得するデータと取得のタイミングを定義したものになります。
この 3 種類を独自に定義することで、ユーザー独自の カスタム データ コレクションを作成することが可能となります。
それでは、各設定について見ていきたいと思います。
■スケジュールの設定
定義されているスケジュールは [sysschedules_localserver_view] で確認をすることが可能です。
GUI から確認をする場合の操作は以下の技術情報に記載されています。
スケジュールの作成とジョブへのアタッチ
楽な管理は SSMS で GUI を使った方ですので今回はこちらで。
現在設定されているスケジュールを管理するためには、
[SQL Server エージェント] → [ジョブ] → 右クリック → [スケジュールの管理] をクリックします。
設定されているスケジュールをこのように確認することが可能です。
スケジュールはキャッシュ モードの場合に使われます。そのため、データ収集のタイミングとは独立しています。
データ コレクションのデータを頻繁に見るということは少ないかと思います。
# 頻繁に見る場合は DMV や、パフォーマンスモニタを直接見てしまうのではないでしょうか
大体の場合はデフォルトで定義されているアップロード間隔で賄えてしまうかと。
週次や月次でアップロードしたい場合には新規にスケジュールを作ることがあるかもしれないですね。
■コレクションセットの設定
データをアップロードするスケジュールが決まったら次に [sp_syscollector_create_collection_set] を使用してコレクションセットを作成します。
クエリの形式は以下のようになります。
USE [msdb] |
必須の OUTPUT として、collection_set_id を戻しますので、INT の変数を定義してから実行する必要があります。
この戻り値をコレクション アイテムを作成するときに使用します。
collection_set_id を改めて確認したい場合は、[syscollector_collection_sets_internal] を参照することで確認することができます。
スケジュールに関しては schedule_name で名称を直接指定していますが、[sysschedules_localserver_view] を参照して、schedule_uid を取得して schedule_uid を指定することでもスケジュールを設定することができます。
この状態のコレクション セットですが、コレクション アイテムは設定されていないためどのようなアイテムを取得するかは定義されていません。
■コレクションアイテムの設定
最後に、どのような情報を取得するかというコレクション アイテムを設定します。
コレクションアイテムでは、[コレクタ型] を使用して様々な情報を取得することが可能です。
使用するコレクタ型が決まったら [sp_syscollector_create_collection_item] を使用して、コレクション セットにコレクション アイテムを設定します。
USE [msdb] DECLARE @params XML = EXEC sp_syscollector_create_collection_item |
今回は、[ジェネリック T-SQL Query コレクター型] を使用しているので、[syscollector_collector_types] から [Generic T-SQL Query Collector Type] の uid を取得して、設定をしています。
設定が終わると先ほど作成したコレクション セットにコレクション アイテムが設定されます。
これで準備は完了です。
SSMS で作成したデータ コレクションを右クリックして [データ コレクション セットの開始] をクリックします。
データコレクションを開始したタイミングで、SQL Server Agent のジョブとして作成したデータ コレクションのジョブが作成され、起動されます。
作成したデータ コレクションを [今すぐ収集してアップロード] をクリックして実行します。
正常に実行されていると、データ コレクション用に設定しているデータベースに [custom_snapshots] というスキーマのテーブルとして [OutputTable] で設定したテーブルが作成されています。
作成したデータ コレクションのレポートを自動で作成してくれるような機能は無いので帳票とするためには SSRS を使用するか、SSMS のカスタムレポートを使用する必要があります。
SQL Server 2008 R2 までの SSMS のカスタムレポートは Report Builder 1.0 や SQL Server 2005 の BIDS で作成しないといけないのでちょっと使いまわしがよくなかったりします…。
# Denali CTP1 であれば Report Builder 2.0 が使えるのですが出来れば SSRS と同じバージョンで作成できるとうれしいのですが…。
簡単ではありますがユーザー独自のカスタム データ コレクションを作成するための一連の流れをまとめてみました。