都内で働くSEの技術的なひとりごと / Technical soliloquy of System Engineer working in Tokyo

都内でサラリーマンやってます。SQL Server を中心とした (2023年からは Azure も。) マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。英語の勉強のため、英語の

新しいチェックポイント ( 間接チェックポイント ) について調べてみた

 去年の終わりに下記のような記事を投稿しました。

データベース チェックポイント (SQL Server) を参考にしています。
 
 SQL Server 2012 以前のチェックポイントの仕様は下記の通りです。

name Transact-SQL インターフェイス 説明
自動 EXEC sp_configure 'recovery interval','seconds' recovery interval サーバー構成オプションに指定された期限に合わせて、バックグラウンドで自動的に発行されます。 自動チェックポイントは、最後まで実行されます。 自動チェックポイントは、未処理の書き込み数と、20 ミリ秒を超える書き込み待機時間の上昇をデータベース エンジンが検出したかどうかに応じて調整されます。詳細については、「recovery interval サーバー構成オプションの構成」を参照してください。
手動 CHECKPOINT [ checkpoint_duration ] Transact-SQL CHECKPOINT コマンドを実行すると発行されます。 接続している現在のデータベースで手動チェックポイントが作成されます。 既定では、手動のチェックポイントは最後まで実行されます。 調整は自動チェックポイントの場合と同様に行われます。 必要に応じて、checkpoint_duration パラメーターを使用し、チェックポイントを完了するのに必要な時間を秒単位で指定します。詳細については、「CHECKPOINT (Transact-SQL)」を参照してください。
内部 なし ディスク イメージがログの現在の状態と一致することを保証するために、バックアップやデータベース スナップショット作成など、さまざまなサーバー操作によって発行されます。

 SQL Server 2012 以降では、『間接』が追加されました。

name Transact-SQL インターフェイス 説明
自動 EXEC sp_configure 'recovery interval','seconds' recovery interval サーバー構成オプションに指定された期限に合わせて、バックグラウンドで自動的に発行されます。 自動チェックポイントは、最後まで実行されます。 自動チェックポイントは、未処理の書き込み数と、20 ミリ秒を超える書き込み待機時間の上昇をデータベース エンジンが検出したかどうかに応じて調整されます。詳細については、「recovery interval サーバー構成オプションの構成」を参照してください。
間接 ALTER DATABASE … SET TARGET_RECOVERY_TIME =target_recovery_time { SECONDS , MINUTES } 所定のデータベースのユーザーが指定したターゲット復旧時間に合わせて、バック グラウンドで発行されます。 既定のターゲット復旧時間は 0 です。この場合、自動チェックポイント ヒューリスティックがデータベースで使用されます。 ALTER DATABASE を使用して TARGET_RECOVERY_TIME を >0 に設定した場合、サーバー インスタンスに指定された復旧間隔ではなく、この値が使用されます。詳細については、「データベースのターゲットの復旧時間の変更 (SQL Server)」を参照してください。
手動 CHECKPOINT [ checkpoint_duration ] Transact-SQL CHECKPOINT コマンドを実行すると発行されます。 接続している現在のデータベースで手動チェックポイントが作成されます。 既定では、手動のチェックポイントは最後まで実行されます。 調整は自動チェックポイントの場合と同様に行われます。 必要に応じて、checkpoint_duration パラメーターを使用し、チェックポイントを完了するのに必要な時間を秒単位で指定します。詳細については、「CHECKPOINT (Transact-SQL)」を参照してください。
内部 なし ディスク イメージがログの現在の状態と一致することを保証するために、バックアップやデータベース スナップショット作成など、さまざまなサーバー操作によって発行されます。

 下記の記事に設定方法等が記載されています。

 上記のブログにも、以下の通り利点・欠点が記載されています。

  • Advantages of Indirect Checkpoints
    They can reduce the overall recovery time for a specific database.You can control the database recovery time by factoring in the I/O cost during the REDO phase.They also reduce potential I/O spiking issues during the checkpoint process by continually writing to disk.
  • Disadvantages of Indirect Checkpoints
    One thing to be aware of is that there could be a performance hit if you enable indirect checkpoints on a very busy OLTP database, because of the increased IO load by the background writer operation. So make sure you test this in a Test environment before enabling in Production.

 リカバリ時間をある程度制御できるのは、運用面からして非常に大きな利点でしょう。欠点は、設定する値や使用環境によってはIOが現状より悪化してしまうことがあるということです。実際に使用する場合には、実際のIOなど加味した上で十分なテストが必要ですね。