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の相違点などについての解説を行う予定である。
以上 日差しが眩しい茅ヶ崎にて