keyword 11 論理構造と物理構造
通常、マシン上で保存されるデータはすべてファイルとなります。ファイルはOSによって管理され、OSがメモリ上にキャッシュしたり、ディスクに書き込んでいます。
例えばWindowsの「メモ帳」を考えてみると、ファイルはディスク上に保存されていて、メモ帳を起動して「ファイルを開く」ことにより、OSのカーネルと呼ばれる機能がメモリ上に該当データを持ってきます。その後に、文書作成などの作業を行ないます。またメモ帳で「保存する」という行為を行なうと、OSのカーネルがディスク上に書き込みます。つまりメモ帳は、そのプログラムの中ではディスクの読み込みや書き込みを行なっていないことになります。
RDBMSもOSから見た場合には、メモ帳と同様のプログラムになります。つまりRDBMSでもデータの読み込みや書き込みはOSが行ないます。OSで管理しているデータの構成を「物理構造」と呼びます。
OSで管理している物理構造は、入出力単位がブロック(OSブロック)で格納単位がファイル(データファイル)となります。この構成でデータベースのデータを管理しようとすると、必ずしも複雑な構成を持つRDBMSにとって効率良く管理できるとは限りません。
では、どうしたらRDBMSでデータを効率良く取り扱えるだろうかということが考えられ、論理的な構造をRDBMS側で持ち、そのルールで管理することになりました。これが論理構造です。この考え方もデータベース製品によって異なりますが、Oracleを例に説明すると次のようになります。
まず、論理構造としての最大単位がデータベースになります。表などのデータベースオブジェクトを格納する場所を「表領域」と言います。表領域を作成するときに、合わせて物理構造としてデータファイルを割り当てます。表領域は目的に応じて複数個作成できます。また、1つの表領域に対して複数のデータファイルを割り当てることができます。
セグメントとエクステント
表領域に格納されるオブジェクトを「セグメント」とも呼びます。1つの表領域に複数のセグメントを格納できます。セグメントは複数のエクステントから成ります。エクステントは、データベースの領域割り当てにおける論理単位になります。論理的にエクステントを割り当てると、物理構造側のデータファイルにそのサイズ分の場所が割り当てられます。例えば、1MBサイズの社員表(セグメント)を表領域に作るためにCREATE TABLE文を実行したとします。すると、社員表のデータを入れるための場所が1MB分物理構造のデータファイルの中に確保されます。その確保した部分を「エクステント」と言います。
ディスク(データベース)とメモリ(インスタンス)の間をやり取りする単位を「データブロック」と言います。エクステントは複数のデータブロックから成り立ちます。なお、実際に入出力を行なっているのは先ほど説明したとおり、OSのカーネルの機能となりますが、この単位を「OSブロック」と言います。データブロックのサイズが8KBでOSブロックのサイズが2KBだった場合、1個のデータブロックの入出力時に4個のOSブロックの入出力が行なわれることになります。
最後にデータブロックは最小単位の行から構成されます。特定の行を検索すると、その行を含むデータブロックがディスクからメモリにキャッシュされるという仕組みです(図23、図24)。


