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

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

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

前回は、REDOに関する統計情報についての解説を行った。

今回は、REDOに関する2つのラッチ「REDOアロケーション・ラッチ」と
「REDOコピー・ラッチ」の役割についての解説を行う。

************ REDOに関するラッチ *************

REDOログ・バッファへREDO情報を書き込むために、Oracleは以下の2つのラッチ
を取得する必要がある。

<REDOアロケーション(割り当て)・ラッチ>

REDOログ・バッファ内にコピーされるREDOエントリに対しての領域を割り当て
るためのラッチ。

<REDOコピー・ラッチ>

REDOエントリが大きすぎて、REDOアロケーション・ラッチでコピーすることが
できない場合に、REDOアロケーション・ラッチに代わってコピーを行うための
ラッチ。

これら2つのラッチの役割を説明したものが、以下の図である。

図中で、REDOエントリの大小について触れているが、この境を決めているのが
初期設定パラメータ「LOG_SMALL_ENTRY_MAX_SIZE」である。

このパラメータのデフォルト値は80(Oracle7.2以前は800)である。つまり、
80バイト以下のREDOエントリに対してはREDOアロケーション・ラッチがコピー
を行い、80バイトを超えるREDOエントリに対しては、全てREDOコピー・ラッチ
がコピーを行う構造となっている。

なぜ、この様な構造になっているかというと、REDOアロケーション・ラッチは
1つしか存在しないからである。つまり、サイズの大きいREDOエントリをREDOア
ロケーション・ラッチでコピーしている最中に、次のREDOエントリが発生して
しまうと、そのREDOエントリはREDOアロケーション・ラッチが解放されるまで
の間、待たなければならなくなってしまうからである。

したがって、複数存在するREDOコピー・ラッチにコピー部分を任せることによっ
て、REDO情報のコピーに対する停滞を防ぐことが可能になるのである。

なお、REDOコピー・ラッチの数を決めているのが初期設定パラメータ
「LOG_SIMULTANEOUS_COPIES」である。このパラメータのデフォルト値は、実装
されているCPU数であり、CPUの2倍まで増やすことができる(ここで言うCPUとは、
初期設定パラメータの「CPU_COUNT」が動的に設定したものである)。

また、シングルCPU環境では、このパラメータの値は0に設定されるため、REDO
コピー・ラッチは1つも存在しなくなる。

したがって、REDOエントリの大きさに関わらず、全ての領域確保及びコピーを
REDOアロケーション・ラッチが担うことになる(LOG_SIMULTANEOUS_COPIESが
1以上の時にLOG_SMALL_ENTRY_MAX_SIZEが有効になる)。

次回は、ラッチ・タイムアウトの検出および、REDOアロケーション・ラッチ、
REDOコピー・ラッチの競合の低減方法などについての解説を行う予定である。

以上 秋がますます加速した茅ヶ崎にて