第3回 データベースの物理アーキテクチャ:初めてのSQL Server 2000(2/3 ページ)
最終的にDBはOSのファイルとして保存されるが、高いパフォーマンスを得るため、MSSQLは独自の管理メカニズムを備えている。。
ページ(page):データ管理の基本ユニット
次は、SQL Server 2000がデータを実際にどのような形式でファイル内部に保存するのかを見てみよう。
SQL Server 2000のデータ管理の基本ユニットは、「ページ(page)」と呼ばれる8Kbytes単位のデータ・ブロックである。外から見れば1つのファイルでしかないが、SQL Server 2000は、データ・ファイルの内部で、テーブルの行データやテキスト/ビットマップのデータをこのページ単位に管理している。例えば1Mbytesのデータなら、単純計算では128ページ(8Kbytes×128=1024Kbytes)で構成されることになる。ただしログ・ファイルは、このようなページ形式ではなく、一連のログ・レコードの連続としてデータが記録される。
データ・ページ
SQL Server 2000は、8Kbytesのページを基本ユニットとしてデータを管理する。図に示したページ内部の構成は「データ」タイプのもの。ただしテーブルの割り当ては、基本的に8個のページ(64Kbytes)をまとめたエクステント(extent)を単位として行われる。
図は、データベース・ファイルの中身をのぞいてみたところだ。各ページの先頭には、96bytesのページ・ヘッダが存在している。このヘッダには、そのページに保存されているデータの型を表すページ・タイプ、ページ中に残されている未使用データ・サイズ、そのページを所有しているオブジェクトのIDなど、ページを管理するためのシステム情報が記録される。
ページ・タイプには次の8種類がある。
ページ・タイプ | 内容 |
---|---|
データ | text型、ntext型、image型のデータを除くすべてのデータが格納されたデータ行 |
インデックス | テーブルのデータに高速にアクセスするためのインデックス用データ |
テキスト/イメージ | text型、ntext型、image型のデータ |
GAM(Global Allocation Map)/SGAM(Secondary GAM) | エクステント(後述)の管理用データ。GAM、SGAMの値から未使用エクステントを割り出し、テーブルやインデックスの格納用に割り当てる |
ページ空き領域 | このページ上で利用可能な空き領域の情報 |
IAM(Index Allocation Map) | 割り当て済みのテーブル(ヒープ)またはインデックスをリンク・リストによって追跡可能にするデータ |
一括変更マップ | ログ・データからデータベースを復元する際に使用するデータ |
差分変更マップ | 差分バックアップ時に、前回のバックアップ時から修正されたエクステントを特定可能にするデータ。すべてのエクステントをスキャンしなくて済むので、差分バックアップを高速に実行できるようになる |
ページ・タイプ |
text型、ntext型、image型は、大量の文字データやビットマップなどの画像データをデータベースに格納するためのデータ・タイプである。具体的には、8000文字を超える文字列からなるデータを扱うのがtext型、4000文字を超えるUnicode文字列を扱うのがntext型、8000bytesを超えるバイナリ・データを扱うのがimage型である。text、ntext、image型は、1つの値として最大2Gbytesのデータを保持できる。SQL Server 2000では、これらのデータについては通常の行データとは別に独立したページを割り当て、行データ中にはこのページへのポインタ(ページがある場所を示すアドレス情報)を格納するようになっている。
これらのテキスト/イメージ・データを除くテーブルの行データは、「データ」タイプのページに保存される。前出の図「データ・ページ」に示したページの内容は、このデータ・タイプのページを示したものだ。
データ・ページでは、text、ntext、image型以外のテーブルのすべてのデータ行が保存される。データ行は、ページ・ヘッダのすぐ次から、順にページ内に記録される。ページの最後には、行オフセット・テーブルがある。行オフセット・テーブルには、各行データの先頭バイト(「行データ1」「行データ2」…)がどこに存在するかを、ページの先頭から数えたオフセット値が保存されている。この行オフセット・テーブルを見れば、目的の行データに素早くアクセスできる。図にあるとおり、行オフセット・テーブルは、行データとは逆順にページの後ろから前に向かって伸びるように配置される。
インデックスは、データベース内部のデータに高速にアクセスするために作成されるもので、その名のとおり、書籍の最後にある索引(index)のようなものだと考えればよい。エクステントを管理するGAM/SGAMやIAMについては、追って詳細を解説する。
SQL Server 2000データ・ファイル内のページには、ファイルごとのIDと、ファイル内の最初のページを0としたユニークなページ番号が振られている。これにより、ファイルIDとページ番号を指定すれば、特定のページを一意に識別できるようになっている。
ファイルIDとページ番号
データベースを構成する物理ファイルにはそれぞれファイルIDが、ファイル内のページには0から始まるページ番号が割り当てられている。ファイルIDとページ番号を指定すれば、特定のページを識別できる。
Copyright© Digital Advantage Corp. All Rights Reserved.