先ほどの投稿を書き終わった後に拡張イベントでチェックポイントの動作を見ていたら、従来からの自動チェックポイントとインダイレクトチェックポイントでは発生しているイベントに違いがありそうでした。
この内容について軽くまとめてみたいと思います。
■発生するイベントの違い
以下のクエリを実行して、SQL Server 2012 RC0 で使用できるチェックポイントに関する拡張イベントを確認してみます。
SELECT * FROM sys.dm_xe_objects where name LIKE ‘%checkpoint%’ OR description LIKE ‘%checkpoint%’ |
SQL Server 2012 RC0 では名前または説明に checkpoint が含まれているイベントは
- checkpoint_begin
- checkpoint_end
- recovery_catch_checkpoint
- recovery_skip_checkpoint
- recovery_force_oldest_page
- recovery_incremental_checkpoint
- deadlock_monitor_pmo_status
の 7 種類が存在しているようです。
SQL Server 2008 R2 では、3 種類でした。
SQL Server 2012 になると、[recovery_xxxx] というイベントが増えているようですね。
SQL Server 2008 R2 では 547 個の拡張イベント、SQL Server 2012 RC0 では、1132 個の拡張イベントとイベントの数自体も次のバージョンでは大きく増えています。
新規に追加された [recovery_xxxx] というイベントがインダイレクトチェックポイントを使用した場合のアルゴリズム変更に関わっていそうです。
従来までの自動チェックポイントの設定をしているときにデータの更新を行い、チェックポイントのイベントの発生状況を確認してみます。
自動チェックポイントの設定では、定期的に [checkpoint_begin] [checkpoint_end] が発生しています。
それでは、同様のデータの更新をインダイレクトチェックポイントを設定した状態で実施してみます。
ターゲットの復旧時間は 60 秒を設定しています。
[checkpoint_begin] [checkpoint_end] の発生回数は同じになっているのですが、その他に [recovery_xxxx] というイベントが発生しているのが確認できます。
インダイレクトチェックポイントを設定した場合は発生するイベントが変わるようです。
詳細は追えていないのですが、各イベントで取得されているデータは以下のようになるようです。
インダイレクトチェックポイントの詳細を確認する場合、この辺の情報を追ってみると良いのかもしれないですね。