データ格納の為の記憶域の利用①

データベースOracle

記事内に広告が含まれています。

行の格納方法とブロック管理

行データは、表に割り当てられたデータブロックに格納されます。
ここでは行データが格納される仕組みについて説明します。

データブロックへの行データの格納

ある表に格納された行のデータは、表に割り当てられたデータブロック(以下、単にブロックと表記)内に格納されます。

ブロックは、管理用の領域であるヘッダー領域とデータ格納用の領域に分かれています。
ヘッダー領域の中にはブロックヘッダー、表ディレクトリ、行ディレクトリという領域があり、タイムスタンプやブロック内の行データの位置情報などの
管理情報が格納されています。ヘッダー領域のサイズは可変です。

行のINSERT処理を実行すると、「ブロックのデータ格納用の領域における末端側」から順に行データが格納されます。
通常、1つのブロックには複数の行が格納されます。

INSERT処理を実行してブロックに格納された行データに対して、UPDATEやDELETEなどの変更処理を実行できます。
なお、以下の操作を実行すると、行データと行データの間に空き領域が生まれます。
●既存の行データを小さいサイズの行データに変更するUPDATE
●DELETEによる行の削除

行移行と行連鎖

通常、1つの行のデータはある特定のブロックに格納されます。
しかし、例外的な状況では1つのデータが複数のブロックにまたがって格納されることがあります。

状況 説明
行連鎖 1ブロックに収まりきらないサイズの行データが、複数のブロックに分割して格納された状況。
行移行 拡張された行データが、別のブロックに格納された状況。

●行連鎖
1つの行のデータサイズがブロックのデータ格納用領域よりも大きい場合に、行データを複数の行断片に分割し、それぞれの行断片を別々のブロックに格納する形態です。

●行移行
行のサイズが拡張するようなUPDATE分を実行した際に、拡張したデータがブロックの空き領域に収まらなかった場合の、行データの格納の形態です。
その行のデータは別のブロックにコピーされ、元のブロックには行のポインタ(位置情報)のみが格納されます。

該当行のデータを呼び出すためには、以下を読みだす必要がある為、ストレージI/O回数が増えます。
・行連鎖:その行の行断片が格納されているすべてのブロック
・行移行:行のポインタが格納されているブロック、行のデータが格納されているブロックの2つ

以上、本記事ではOracleデータベースの行の格納方法について、簡単に紹介しました。

参考文献…オラクルマスター教科書 Silver DBA Oracle Database Administration I 第7章

システムトラストでは一緒に働いていただける仲間を募集中です。
株式会社システムトラスト

システムトラストでは、システムエンジニア、プログラマーなどを随時募集中です。気軽にご相談ください。

お問合せ