論理記憶域構造この章では、論理記憶域構造の性質と論理記憶域構造間の関係について説明します。Databaseによって作成されて認識されるものであり、オペレーティング・システムでは認識されません。この章の構成は、次のとおりです。Databaseでは、データベース内のすべてのデータに対して論理領域が割り当てられます。データベース領域の論理単位は、データ・ブロック、エクステント、セグメントおよび表領域です。物理レベルでは、データはディスク上のデータ・ファイル内に格納されます。データファイル内のデータは、オペレーティング・システムのブロックに格納されます。次の図に、物理記憶域と論理記憶域のエンティティ関係ダイアグラムを示します。線の末端の分岐は、1対多の関係を表しています。セグメントには、それぞれが複数のデータ・ブロックを含む1つ以上のエクステントが含まれます。次の図に、表領域内のデータ・ブロック、エクステントおよびセグメント間の関係を示します。この例では、1つのセグメントに対して、異なるデータファイルに格納された2つのエクステントがあります。Databaseのデータ記憶域の最小論理単位です。1つの論理データ・ブロックは、一定のバイト数(たとえば2KB)の物理ディスク領域に対応します。Databaseで使用または割当て可能な記憶域の最小単位です。エクステントとは、論理的に連続する一連のデータ・ブロックで、特定のタイプの情報を格納するために割り当てられます前の図では、24KBのエクステントには12のデータ・ブロックが存在し、72KBのエクステントには36のデータ・ブロックが存在しています。セグメントとは、表などの特定のデータベース・オブジェクトのために割り当てられるエクステントの集合です。employees表のデータはそれぞれ専用のデータ・セグメントに格納されており、employeesの各索引はそれぞれ専用の索引セグメントに格納されています。記憶域を使用する各データベース・オブジェクトは、1つのセグメントを構成します。表領域は、1つ以上のセグメントが含まれるデータベース記憶域単位です。各セグメントは、1つの表領域にのみ属しています。このため、1つのセグメントのすべてのエクステントは、同じ表領域に格納されます。前の図に示すように、表領域内のセグメントには、複数のデータファイルのエクステントが含まれている場合があります。セグメントのあるエクステントはusers01.dbfに格納され、他のセグメントはusers02.dbfに格納されます。1つのエクステントが複数のデータファイルにまたがることはありません。Databaseでは、表領域内でエクステントの追跡および割当てを行うために論理領域管理を使用する必要があります。データベース・オブジェクトでエクステントが必要な場合、データベースには、エクステントを検索および提供する手段が必要です。同様に、オブジェクトでエクステントが不要になった場合、データベースに空きエクステントを使用可能にする手段が必要です。Databaseでは、作成する表領域のタイプに基づいて、表領域内の領域が管理されます。次のいずれかのタイプの表領域を作成できます。ローカル管理表領域(デフォルト)エクステントの管理に、表領域自体にあるビットマップが使用されます。したがって、ローカル管理表領域の一部には、ビットマップ用の表領域があります。表領域内のセグメントは、自動セグメント領域管理(ASSM)または手動セグメント領域管理(MSSM)を使用して管理できます。ディクショナリ管理表領域エクステントの管理に、データ・ディクショナリが使用されます。図12-3に、表領域の論理領域管理の方法を示します。関連項目:「データ・ディクショナリの概要」ローカル管理表領域ローカル管理表領域では、データファイル・ヘッダー内に、データファイル本体の空き領域および使用済領域を追跡するためのビットマップが保持されています。各ビットは、1ブロック・グループに対応します。Databaseでは、ビットマップの値がブロックの新しい状態を反映する値に変更されます。ビットマップ管理記憶域を概念的に表現すると、次の図のようになります。ヘッダー内の1は使用済領域を表し、0は空き領域を表します。ビットマップ管理記憶域」の説明ローカル管理表領域には、次のような利点があります。エクステントの管理にデータ・ディクショナリを使用する必要がありません。ディクショナリ管理表領域では、エクステント内の領域を使用または解放することにより、データ・ディクショナリ表やUNDOセグメントの領域を使用または解放する他の操作が行われた場合、再帰的な操作が発生することがあります。隣接する空き領域が自動的に追跡されます。これにより、データベースで空きエクステントを結合する必要がなくなります。ローカル管理エクステントのサイズが自動的に決定されます。ローカル管理表領域内では、すべてのエクステントを同じサイズにすることもでき、さらにオブジェクト記憶域オプションがオーバーライドされます。注意:ローカル管理表領域と自動セグメント領域管理を使用することをお薦めします。セグメント領域管理は、セグメントを含む表領域から継承される属性です。ローカル管理表領域内では、セグメントは自動または手動で管理できます。表領域users内はセグメントを自動で、表領域tools内のセグメントは手動で管理できます。自動セグメント領域管理(ASSM)方式では、ビットマップを使用して表領域の領域が管理されます。ビットマップには、次の利点があります。管理の簡素化ASSMでは、多数の記憶域パラメータの設定を手動で厳密に決定する必要がありません。唯一の重要なSQLパラメータPCTFREEによって、領域割当てが制御されます。このパラメータは、将来の更新用にブロック内に予約する領域の割合を指定します(「データ・ブロック内の空き領域の割合」を参照)。複数のトランザクションで別々の空きデータ・ブロックのリストを検索できるため、競合や待機時間が減少します。多数の標準的なワークロードでは、適切にチューニングされた、MSSMを使用するアプリケーションよりも、ASSMを使用するアプリケーションの方が高いパフォーマンスを示します。RAC)環境における、インスタンスへの領域の動的アフィニティASSMは永続的なローカル管理表領域に対するデフォルトであり、より効率的です。注意:この章では、論理記憶域のすべての説明において、ASSMを使用することを前提としています。従来の手動セグメント領域管理(MSSM)方式では、空きリストと呼ばれるリンク・リストを使用して、セグメントの空き領域が管理されます。空き領域が存在するデータベース・オブジェクトでは、空きリストによって、使用済のセグメント領域と未使用のセグメント領域を分割するラインである最高水位標(HWM)より下のブロックが追跡されます。ブロックが使用済になると、データベースは必要に応じて、空きリストにブロックを登録したり、空きリストからブロックを削除したりします。GROUPSなどのSQLパラメータを使用して、領域割当てを制御する必要があります。PCTUSEDでは、現在使用されているブロックが空きリストに登録されるためには、どの程度の空き領域が必要なのかの割合を設定します。TABLE文でPCTUSEDを40に設定すると、ブロックの使用済領域の割合が40%未満になるまでは、セグメント内のブロックに行を挿入できません。表に行を挿入するとします。データベースは表の空きリストを参照し、最初の空き領域がどこなのかをチェックします。行がブロックに格納し切れず、ブロック内の使用済領域がPCTUSED以上になっている場合、そのブロックはリストから削除され、別のブロックが検索されます。ブロックから行を削除した場合は、ブロック内の使用済領域がPCTUSED未満になったかどうかがチェックされます。その場合は、そのブロックが空きリストの先頭に登録されます。1つのオブジェクトに対して、空きリストを複数にすることもできます。しておくと、表に対してDMLを実行している複数のセッションが別々のリストを使用できるため、競合を回避できます。各データベース・セッションがセッション中に使用する空きリストは1つです。図12-5に示すように、1つ以上の空きリスト・グループ(空きリストの集合)が存在するオブジェクトを1つ作成することもできます。各グループにはマスター空きリストがあり、グループ内の各プロセス空きリストを管理します。空きリストに必要な領域は、特に空きリスト・グループの場合、大きくなることがあります。空きリスト・グループ」の説明セグメント領域を手動で管理する手順は複雑です。行の移行を少なくし、領域を無駄にしないようにするには、PCTFREEおよびPCTUSEDを調整する必要があります。セグメント内のどの使用済ブロックも半分の領域が一杯になっており、PCTUSEDが40になっている場合は、これらのブロックのいずれにも挿入できません。領域割当てパラメータの詳細なチューニングは難しいため、ASSMの使用をお薦めします。ASSMでは、ブロックに新しい行を挿入可能かどうかを判断するためにPCTFREEが使用されますが、空きリストは使用されず、PCTUSEDは無視されます。