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

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

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

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

今回は、DBWRとLGWRの物理I/Oの相違点などについての解説を行う。

********** DBWRとLGWRの物理I/Oの相違点 ***********

「遅延書き込みを行うことにより、データファイルに対する物理I/Oは減らすこ
とができても、結局はその分の物理I/Oが、REDOログ・ファイルに対して発生し
ているのでは?」と疑問に思われる方も多いだろう。結論から言えば、その通
りである。しかし、DBWRがデータファイルに対して行う物理I/Oと、LGWRがREDO
ログ・ファイルに対して行う物理I/Oとでは、大きな違いがある。

以下の図は、その違いを説明したものである。

図の中で大きく異なる点は、以下の2点である。

1.DBWRは複数のデータファイルへ、ランダムに書き込みを行っているのに対
    して、LGWRはカレントのREDOログ・ファイルに対してのみ、シーケンシャ
    ルに書き込みを行う

2.サーバ・プロセスは、データファイルに対しては読み込みを行っているが、
    REDOログ・ファイルに対しては読み込みを行わない
    (インスタンス回復を行う際は、SMONがREDOログ・ファイルの読み込みを
      行うが、通常、REDOログ・ファイルは、「書き込み専用」と考えてよい)

上記の相違点を踏まえた上で、頻繁に更新処理が行われているサイトを思い浮
かべていただきたい。

頻繁に更新処理が行われているということは、データファイル(ディスク)に
対しても頻繁にI/Oが発生しているということになる。つまり、データファイル
に対して頻繁に読み書きが繰り返されているということである。この様な場合、
読み書きが行われる度に、ディスク内でヘッドを目的の位置まで移動する
「シーク・オーバヘッド」が発生してしまう。このシーク・オーバヘッドに要
する時間をトータル的にディスクI/Oとして見た場合、パフォーマンスを悪化さ
せる要因の一つになり兼ねない。

しかし、一方のREDOログ・ファイル(ディスク)に対しての読み込みは一切行
われない(障害発生時のリカバリは別)。つまり、読み込みのためのシーク・
オーバヘッドは発生しないということだ。したがって、REDOログ・ファイルへ
の書き込みはシーケンシャルに行われるため、常にヘッド の存在する場所から
書き込みを始められることになる。このことから、ヘッドを書き込み位置まで
移動するためのシーク・オーバヘッドは一切発生しなくなるので、データファ
イルに対しての書き込みと比べ、REDOログ・ファイルへの書き込みの方が速く
処理できるのである(REDOログ・ファイルが存在するディスクに、他のファイ
ルが混在している場合は別である)。また、REDOログ・ファイルへの書き込み
は、OSファイルのブロックサイズである512バイト単位で、同期書き込みが行わ
れる。このことも、REDOログ・ファイルへの書き込みを速く処理させている要
因の一つになっている。

I/Oの違いについて、ご理解いただけたであろうか?

次回は、REDOログ・バッファ(ファイル)へ書き込まれる情報などについての
解説を行う予定である。

以上 胸騒ぎの茅ヶ崎にて