| この記事の要点 |
|
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 行が出ます。レイテンシ調査時に便利です。
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- JP1/FTS(File Transmission Server/FTP)とは|伝送カードとftstranの使い方 NEW 2026-10-02 22:03:11
- 日立 JP1 (Job Management Partner 1) 完全ガイド (AJS3 / IM / Base / PFM) 2026-10-02 22:03:11
- JP1/Baseとは|ユーザー認証・ユーザーマッピング・イベントサービスの仕組みと主要コマンド NEW 2026-10-02 22:03:10
- JP1/IM(JP1/IM2・IM3)とは|JP1イベントによる統合監視の仕組みとJP1/Baseとの関係 NEW 2026-10-02 22:03:10
- JP1/AJS3 コマンド一覧|ajsentry・ajsshow・ajsrerunなど主要コマンドの使い方とオプション NEW 2026-10-02 22:03:09
- JP1/AJS3とは?ジョブネット・スケジュール・Manager/Agent/Viewの構成を初心者向けに解説 NEW 2026-10-02 22:03:09
- クラウドネットワークの記事一覧 2026-10-02 16:08:51
- ルーティングとスイッチング完全ガイド — 静的/動的ルーティング/RIP/OSPF/BGP/VLAN/STP 2026-10-02 16:08:51
- ネットワークのアドレッシング完全ガイド — IP/MAC/ポート/サブネット/CIDR/IPv6/NAT 2026-10-02 16:08:51
- 本番環境のdll内で参照しているdllファイルの置き場所 2026-10-02 16:08:50
- 【Visual Studio】 C#のForm自動生成時に「値が有効な範囲にありません」エラー 2026-10-02 16:08:50
- 【Laravelエラー】does not comply with psr-4 autoloading standard. Skipping. 2026-10-02 16:08:50
- 【Laravelエラー】could not find driver(Windows, MySQL編) 2026-10-02 16:08:49
- The following channel memory did not pass cpu memory test. 2026-10-02 16:08:49
- 【pycharm】connecting to console が終わらない 2026-10-02 16:08:49