タイトル: CKPT
SEOタイトル: Oracle CKPT (Checkpoint Process) の役割とパラメータ (リカバリ時間短縮)
| この記事の要点 |
|
Checkpoint とは何か
Oracle のデータは普段 Buffer Cache (メモリ) で書き換えられ、変更内容は Redo Log に逐次記録されます。実データファイルへの反映 (DBWR) は遅延書きです。
このとき、「ある時点までの変更はデータファイルにも書ききった」というマークが必要です。これが チェックポイント (Checkpoint)。インスタンス障害時のリカバリ起点になります。
[Buffer Cache] --(dirty)--> [DBWR] --> [Data Files]
|
v
[LGWR] --> [Redo Log Files]
|
v
[CKPT] --> Control File / Data File Header に
「ここまで書き出した」SCN を記録
CKPT プロセスの役割
- DBWn にダーティバッファの書き出しを指示する (実書きは DBWn が担当)
- Redo Log の現在の SCN (System Change Number) を制御ファイルとデータファイルヘッダに記録
- SHUTDOWN / ログスイッチ / 表領域オフライン化等のイベントで起動
- Incremental Checkpoint (継続的なチェックポイント) を制御
関連パラメータ
| パラメータ | 意味 |
|---|---|
LOG_CHECKPOINT_INTERVAL | Redo Block 数。指定数の Redo を書いたらチェックポイント |
LOG_CHECKPOINT_TIMEOUT | 秒数。指定秒経ったらチェックポイント |
FAST_START_MTTR_TARGET | ★ リカバリ目標時間 (秒)。Oracle が自動で他のパラメータを調整 |
LOG_CHECKPOINTS_TO_ALERT | TRUE にすると Alert Log に CKPT イベントを出力 |
現代の運用では FAST_START_MTTR_TARGET だけ設定するのが定石です (例: 60 秒)。
-- 現在の設定確認
SHOW PARAMETER fast_start_mttr_target;
SHOW PARAMETER log_checkpoint;
-- 推奨: MTTR ベース
ALTER SYSTEM SET fast_start_mttr_target = 60 SCOPE=BOTH;
-- 手動チェックポイント
ALTER SYSTEM CHECKPOINT;
-- ローカルチェックポイント (RAC で 1 インスタンスのみ)
ALTER SYSTEM CHECKPOINT LOCAL;
-- グローバル (全インスタンス)
ALTER SYSTEM CHECKPOINT GLOBAL;
チェックポイント情報の確認
-- 現在の SCN とチェックポイント SCN
SELECT name, current_scn, checkpoint_change#
FROM v$database;
-- インスタンスのチェックポイント状況
SELECT instance_name, status, checkpoint_change#
FROM v$instance;
-- データファイル単位のチェックポイント SCN
SELECT file#, status, checkpoint_change#, last_change#
FROM v$datafile;
-- リカバリ予測時間
SELECT recovery_estimated_ios,
actual_redo_blks,
target_redo_blks,
estimated_mttr -- 秒
FROM v$instance_recovery;
Incremental Checkpoint
古い Oracle はチェックポイント時に大量の I/O が走り、性能が一気に落ちる「Checkpoint storm」が発生していました。現代の Oracle は 常に少しずつダーティバッファを書き続ける Incremental Checkpoint 方式で平準化しています。
FAST_START_MTTR_TARGET を短く設定するほど書き出しが活発になり、リカバリ時間は短いが日常 I/O は増えるトレードオフです。
Checkpoint が走るタイミング
- Log Switch 時 (REDO Log がフル → 次のグループへ切替)
- SHUTDOWN NORMAL / IMMEDIATE / TRANSACTIONAL 時 (フルチェックポイント)
ALTER SYSTEM CHECKPOINT実行時- 表領域を OFFLINE NORMAL / BEGIN BACKUP にしたとき
- パラメータで定めた時間 / 量に達したとき
- Incremental に常時 (FAST_START_MTTR_TARGET ベース)
SHUTDOWN との関係
| SHUTDOWN 種別 | チェックポイント | 備考 |
|---|---|---|
NORMAL | ★ フル実行 | 全セッション終了待ち |
IMMEDIATE | ★ フル実行 | セッション強制ロールバック |
TRANSACTIONAL | ★ フル実行 | トランザクション完了待ち |
ABORT | 実行しない | インスタンスリカバリが次回起動時に必要 |
Fast Recovery とのつながり
クラッシュ後の SMON によるインスタンスリカバリは、最新チェックポイントの SCN から Redo を再適用します。チェックポイントが新しいほど再適用範囲は狭く、起動が速いというロジックです。
[Crash] -> 起動
SMON: 制御ファイルから「最新の checkpoint SCN」を取得
その SCN 以降の Redo を順に適用 (Roll Forward)
コミット未完了トランザクションを Undo (Roll Back)
→ DB Open
FAST_START_MTTR_TARGET を 60 にしておけば
おおむね 60 秒以内に Open するように Oracle が調整する
FAQ
Q: チェックポイントが頻繁すぎると?
A: I/O 負荷が上がります。FAST_START_MTTR_TARGET を大きくする (例: 300 秒) と平準化されますが、リカバリ時間が伸びます。
Q: LOG_CHECKPOINT_INTERVAL は今でも使う?
A: 現代では基本不要 (0 = 無効)。FAST_START_MTTR_TARGET に統一するのが Oracle の推奨です。
Q: Alert Log に何が出る?
A: LOG_CHECKPOINTS_TO_ALERT = TRUE にすると、Beginning/End checkpoint 行が出ます。レイテンシ調査時に便利です。