1. Indirect Checkpointの設定方法
Indirect Checkpointは、データベース単位に設定できるオプションです。SQL Server 2012では、データベースのオプションに復旧時間を指定できるTARGET_RECOVERY_TIMEというオプションが追加されており、Indirect Checkpointを有効にするには、ALTER DATABASEステートメントで、このTARGET_RECOVERY_TIMEの値を0より大きい値に設定します。既定ではこの値は0となっており、従来と変わらないチェックポイント動作を行います。
以下は、MyDBデータベースのTARGET_RECOVERY_TIMEを90秒に設定するときのコマンド例です。
ALTER DATABASE MyDB SET TARGET_RECOVERY_TIME = 90 SECONDS;
これで、Indirect Checkpointは有効になります。Indirect Checkpointが有効になると、Indirect Checkpoint用のスレッド、Background Writerが、指定された復旧時間内に復旧できるかどうかを定期的にチェックしてI/Oを発行してくれるようになります。
2. Indirect Checkpointの動作の監視方法
Indirect Checkpointの設定を有効にしたら、本当に機能しているのか確認したくなりますよね。SQL Server 2012では、Indirect Checkpointの動作の監視するために、パフォーマンスカウンタのSQL Server:Buffer Manager\Background Writer Pages/Secが追加されました。このカウンタは、Background Writerが一秒間に書き込んだページ数を表しますので、Indirect Checkpointが有効になっているかどうかはこのカウンタを監視することで確認できます。
また、トレースフラグ3441を有効にすることで、Indirect Checkpointに関連するアクティビティをエラーログに出力できるようになります。以下は、トレースフラグ3441を有効にして、Indirect Checkpointが発生したときのログ出力例です。
-- トレースフラグ3441を有効にする DBCC TRACEON(3441,-1) -- トレースフラグ3441を無効にする DBCC TRACEOFF(3441,-1) エラーログ出力例 … 2012-01-22 21:38:22.38 spid52 DBCC TRACEON 3441, server process ID (SPID) 52. This is an informational message only; no user action is required. 2012-01-22 21:38:48.13 spid14s Ckpt dbid 6 started 2012-01-22 21:38:48.14 spid14s Ckpt dbid 6 complete …
このトレースフラグは、現在の最新リリース版(SQL Server 2012 RC0の段階)で有効なことを確認していますが、今後のリリースでは出力される内容などが変わってくるかもしれませんのでご了承ください。