
ASSM - 日本エクセム株式会社 Oracle 技術情報
目次[非表示]
- 1.基本情報
- 1.1.フリーブロックの意味
- 1.2.3段階ビットマップブロック
- 1.3.RACとASSM
- 1.4.ASSMとFBロック競合
基本情報
ASSM(Automatic Segment Space Management)は、FLMとは異なり、フリーリストを使用してのフリーブロックを管理していません。FLMを使用する場合はフリーリスト、フリーリストのグループなどの属性を利用して、管理者が手動(Manual)による管理が可能な反面、ASSMを使用している場合には、さらに、これらの属性をサポートしていない管理者がセグメント領域管理手法を変更することができません。この意味で、すなわち、手動で管理が不可能だという意味での自動化されたセグメント領域管理手法として名前が付けられました。
ASSMで使用されるフリーブロック管理手法は、非常に複雑で、インテリジェントなのものになります。個々の重要な概念と性能の観点から有利な点だけを集中的に調べるものとなります。
フリーブロックの意味
ASSMでのフリーブロックの意味は、FLMのと同じです。つまり、INSERT操作のために使用可能な空きブロックを意味します。しかし、フリーブロックを判断する基準は、新たに定義されて、さらに洗練された方式のブロックスペース管理の概念を使用します。ASSMも、特定のブロックがフリー(Free)状態であるかフル(Full)状態であるかの区別は存在しますが、ブロックがどのような余裕があるかを判断するための新しい基準を使用します。これ余裕状態(Freeness Status。FS)と呼びます。余裕度の状態は、次の4種類の値を持ちます。
ブロックがフリーかどうかは、まずPCTFREE属性の値を用いて判断しますが、フリーブロックがどのように余裕があるかを再度FS値を用いて判断することになります。これにより、Oracleが最大限のブロックを効率的に利用できるように保証します。Oracleは、PCTFREE属性とFS値を利用して、次のような基準でフリーブロックをするかどうかを決定します。
Oracleが提供するDBMS_SPACEパッケージを使用すると、セグメント領域に関するさまざまな情報を得ることができます。特にDBMS_SPACE.SPACE_USAGEプロシージャを使用すると、特定のセグメントのFS1、FS2、FS3、FS4、Full、Unformatted状態のブロック数とサイズ(バイト)の情報を得ることができます。以下は、DBMS_SPACE.SPACE_USAGEプロシージャを使用する簡単な例です。
3段階ビットマップブロック
ASSMを使用するセグメントは、フリーブロックのリストを管理するために、もはやフリーリスト(Freelist)を使用していません。代わりに、3段階のビットマップブロック(Bitmap Block)を利用して、より効率的で立体的にセグメント領域を管理します。
L1BMB(Level1 Bitmap Block)は、各ブロックの余裕も状態(Freeness Status。FS)を管理する役割をします。一つのL1BMBがセグメントのサイズに応じて16〜1024個のブロックの状態を管理します。次の例は、システムの1つのL1BMBをダンプにダウンロードしたもので、合計64個のブロックの状態を管理することを確認することができます。ブロックの状態は「Unformatted、FULL、0-25%free、25-50%free、50-75%free、75-100%free」のいずれかの値になります。
L2BMB(Level2 Bitmap Block)は、L1BMBのリストを管理します。一つのL2BMBが複数のL1BMBを管理することになります。次の例は、単一のL2BMBをダンプにダウンロードしたもので、合計20個のL1BMBを管理していることがわかります。
L2BMBはL1BMBに対して次のような情報を管理します。
L3BMBはL2BMBのリストを管理します。一つのL3BMBが複数のL2BMBを管理することができます。L3BMBは、ほとんどの場合、別の物理的なブロックに存在せず、セグメントヘッダブロックの内部に存在します。セグメントのサイズが非常に大きく、単一のL3BMBで管理が不可能にのみ、別のL3BMBが物理的に分離されます。次の例は、L3BMB(セグメントヘッダ)をダンプにダウンロードしたもので、L2BMBの付加的な情報(L2 Hint for inserts)とL2BMBのDBA値を確認することができます。
OracleはL3BMB、L2BMB、L1BMBを順次移動しながら、新しいデータを追加する最も理想的なフリーブロックを探します。ASSMで使用する3段階のビットマップブロック構造は、以前フリーリスト構造に比べてかなり柔軟で自動化されていて、FLMを使用するときのような外部的なチューニングや設定が不要です。パフォーマンスもよくチューニングされたFLMを使用する場合とほぼ同じです。ただし、大量のDMLが発生する場合には、ビットマップブロックを管理するためのオーバーヘッドが発生するため、これによる若干のパフォーマンスの低下が発生することがあります。
RACとASSM
ASSMはRACのためのセグメント管理手法といっても過言ではないほどRAC環境に最適化されています。ASSMが提供する次のような特徴を見ると、OracleはRACに最適化されたセグメントの管理手法を提供するために努力した跡を見つけることができるのです。
ASSMの空間管理は、RACシステムでは、各ノードの処理能力を最大限に引き出すことができます。
ASSMとFBロック競合
ASSMを使用するセグメントの大量DML操作時にFBロック競合が発生する場合がしばしばあります。FBロックはFormatting Block Lockを意味します。FBロックの意味を理解するには、ASSMを使用しているセグメントは、二つのHWM(High Water Mark)が存在するという事実を理解する必要があります。
ASSMでは、1つのエクステントが複数のL1BMBによって分けて管理することができます。もし、特定のエクステントの前の部分と後の部分はL1BMBによって管理され、中間部分はまだL1BMBが割り当てられていない場合、中間の穴(Hole)が生じることになります。すなわち、セグメントの途中でまったく使用されていない非フォーマット状態のブロックが多数存在することになるのです。このような現象は、FLMでは見られないASSMだけの固有な領域の管理手法によってもたらされます。これらの理由から、Oracleは、Low HWMとHigh HWMという二つのHWMを管理します。Low HWM以下のブロックはすべてのフォーマット状態のブロックで「現在使用中」であるブロックです。High HWM以上のブロックは、すべての非フォーマット状態のブロックであり、「まだ使用されていない」ブロックでです。Low HWMとHigh HWMの間には、まだ使用されていない非フォーマット状態のブロックが存在することになります。これらの非フォーマット状態のブロックは、後日INSERT操作で使用される時にフォーマットされ、この過程でFBロックを獲得します。多くのプロセスが同時に同じ領域の非フォーマットブロックを使用する場合FBロック競合が発生することになり、enq:FB – contentionイベントの待機が観察されます。FBロック競合はASSM環境では避けられない現象であり、性能に与える影響もわずかです。以下のサンプルでは、セグメントヘッダブロックのダンプファイルにセグメントヘッダブロック内でLow HWMとHigh HWMを共に管理することを確認することができます。
次のスクリプトは、ASSMを使用するセグメントについて、同時多発的な大量INSERT操作を実行する場合にどのような種類の競合が発生するかをテストした結果、HWロック競合、バッファロック競合、FBロック競合などが主に目撃されていることを知ることができます。
HWロック競合は、セグメントの拡張に応じてHWMを移動する過程で発生すると、enq:HW – contention待機イベントで観察されます。FBロック競合はLow HWMとHigh HWMの間の穴(Hole)に対応するブロックをフォーマットする過程で発生しenq:FB – contentionイベント待機中に観察されます。バッファロック競合はブロックの余裕も状態の変更により、ビットマップブロックの情報を変更する過程で発生し、ブロッククラスの値が8または9のbuffer busy waitsイベント待機で観察されます。FLMを使用する場合には、FREELISTS属性やFREELIST GROUPS属性、あるいは_BUMP_HIGHWATER_MARK_COUNTパラメータの値を変更することにより、これらの競合者のチューニングが可能でしたが、ASSMは、これらの外部的なチューニングを行うことができません。したがって、問題が発生した原因に基づいて、アプリケーションの動作を改善する方法のチューニングのアプローチに従うほかないのです。