表の行へのインラインでの LOB の保管

ラージ・オブジェクト (LOB) は通常、参照元の表の行とは異なる場所に保管されます。 ただし、LOB へのアクセスを簡素化するために、基本表の行のインライン (32.673 バイト長) に LOB を組み込むこともできます。

基本表の行にラージ・データ・オブジェクトを組み込むのは実際的ではなく、データによっては不可能です。 図 1 は、行内に LOB を組み込もうとする例と、それが問題になる可能性がある理由を示しています。 この例の行は、長さ 500 KB と 145 KB の 2 つの LOB 列がある行として定義されています。 ただし、 Db2® 表の最大行サイズは 32 キロバイトであるため、そのような行定義を実際に実装することはできません。

図1: 基本表の行に LOB データを組み込むことの問題点
基本行の表内に 32KB を超える 2 つの LOB を保管しようとしたことを示す図

LOB の使用に伴う障害を削減するために、LOB は他のデータ・タイプとは異なる扱いを受けます。 図 2は、LOB 自体ではなく、LOB 記述子のみが基本表の行に配置されることを示しています。 それぞれの LOB 自体は、データベース・マネージャーによって制御される独立した LOB ロケーションに保管されます。 この配置では、バッファー・プールとディスク・ストレージ間での行の移動は、LOB 全体を含む行よりも LOB 記述子だけの行の方が移動時間が短くなります。

ただし、実際の LOB は基本表の行とは異なるロケーションに保管されているため、LOB データの操作は、より難しくなります。

図2: 基本表の行にある LOB 記述子は、独立した LOB ロケーション内の LOB を示します。
基本表の行内で LOB 記述子がどのように使用されるかを示す図。

小さい LOB の操作を簡素化するために、指定するサイズしきい値より小さい LOB データを基本表の行内のインラインに取り込むこともできます。 そのような LOB データ・タイプは、基本表の行の一部として操作でき、バッファー・プール間での移動などの操作が容易になります。 さらに、行圧縮が有効になっている場合は、インライン LOB も行圧縮の対象となります。

CREATE および ALTER TABLE ステートメントの INLINE LENGTH オプションを使用すると、指定する長さ制限より短い LOB データを基本表の行に含めることができます。 デフォルトでは、 INLINE LENGTH で明示的な値を指定していない場合でも、LOB が最大サイズより小さい場合、その列の LOB 記述子は常に基本表の行に組み込まれます。

インライン LOB を使用すると、 図 3に示すように基本表の行を持つことができます。

図3: 基本表の行に組み込まれている小さな LOB
基本表の行にインラインで組み込まれている小さい LOB の図

LOB をインラインに組み込むためのしきい値の選択を検討する際には、データベースの現在のページ・サイズ、およびインライン LOB により行サイズが現在のページ・サイズを上回ることになるかどうかを考慮してください。 表の行の最大サイズは 32,677 バイトです。 しかし、各インライン LOB には 4 バイトの余分なストレージが必要です。 そのため、インラインに保管する LOB ごとに、行で使用可能なストレージが 4 バイトずつ減ります。 したがって、インライン LOB の最大サイズは 32,673 バイトです。

注: LOB をインラインで保管するのと同じ方法で、XML データをインラインで保管することもできます。