REDOログに関する検証 その2

< REDOログに関する検証 その2 > ペンネーム つけまい

— 内部構造を理解し
パフォーマンスの向上に役立てる —

前回は、障害発生時のリカバリ部分をつかさどる「REDOログ」についての、基
本的な処理の流れの説明を行った。

今回は、REDOログ・ファイルへの書き込みを行うLGWRプロセスの働きについて
の解説を行う。

*** オンラインREDOログ・ファイルへの書き込みプロセス -LGWR- ***

LGWRの主な役割は、障害発生時のリカバリのための情報として、コミットある
いはロールバック情報をログ・バッファからREDOログ・ファイルに掃き出すこ
とであり、更新系の多いサイトではLGWRが休むことなくフル稼動して掃き出し
作業を行っている。したがって、REDOログ・ファイルへの掃き出しに対するI/O
パフォーマンスはレスポンスのキーとなる。

以下に、LGWRがシグナルによって起こされるタイミングを示す。

1.前回の書き込みから3秒間経過したとき
2.トランザクションがコミットされたとき
3.REDOログ・バッファが3分の1に達したとき
4.DBWRがデータファイルへ書き戻しを行う直前
5.チェックポイントが発生したとき

上記の内容をご覧になれば、LGWRはOracleの中で最も忙しいプロセスであるこ
とがお分かりいただけるだろう。

以前にも述べたが、パフォーマンスのチューニングとは、いかにしてディスク
に対する物理I/Oを削減できるかにかかっている。

それでは、頻繁にディスクに対して書き込み処理を行うLGWRを、いっそのこと
止めてしまえば、物理I/Oを大幅に削減できるのではないだろうか?

<LGWRは止められない>

パフォーマンスのキーであるREDOログ・ファイルへの書き込み処理は、障害が
発生しリカバリ機能が稼動して、初めて意味のあるものとなる。しかし、いく
ら障害に万全を期したからと言って、障害など滅多に発生するものではない
(厳密には発生させてはならない)。そこで、「LGWRを止めてパフォーマンス
を向上させたい」と思われる方も少なくないだろうが、LGWRはリカバリ情報を
蓄積する以外にも大きな役割を担っているため、止めることはできない。

前述した様に、LGWRが起こされるタイミングの一つに、「DBWRがデータファイ
ルへ書き戻しを行う直前」がある。DBWRは、LGWRが正常にREDOログ・ファイル
への書き込みを終了した時点でデータファイルへの書き戻し作業を行っている。

以下の図は、なぜこの様な処理を行っているかを説明したものである。

https://www.insight-tec.com/jp/html/ora3/reference/ref64_01.html

DBWRは、ユーザがコミットを行った直後はデータファイルへの書き戻し作業を
行わずに「遅延書き込み」を行っている。遅延書き込みを行うことによって、
更新がある度に、その都度データファイルへの書き戻しを行うのではなく、あ
る程度まとまった更新データを、一度に書き戻し、データファイルに対する物
理I/Oを減らしている。この遅延書き込みを可能にしているのが、いざというと
き(データベース・バッファ上の更新されたブロックの書き戻し作業が完了し
ていない段階での障害発生)のデータの整合性をREDOログ・ファイルが保証し
ているため、LGWRを止めることができないのである。

ご理解いただけたであろうか?
次回は、DBWRとLGWRの物理I/Oの相違点などについての解説を行う予定である。

以上 日差しが眩しい茅ヶ崎にて