Db2 テーブルスペースとインデックスのセカンダリスペース割り当て

Db2 管理のデータセットでは、 Db2 はスライディングスケールアルゴリズムを使用してセカンダリエクステントに割り当てる領域の量を計算します。または、テーブルスペースやインデックスを作成または変更する際に、セカンダリ量を指定することもできます。

変更の開始Db2 スライディングスケールを使用して、データセットのサイズに応じて異なる一定の数に達するまで、各エクステントのシリンダー数を決定します。変更の終わり

変更の開始
  • 128 GB以上のデータセットでは、最初の64エクステントはサイズが増加する形で割り当てられ、それ以降のエクステントは1785シリンダーで割り当てられます。
  • 32~64 GBのデータセットの場合、最初の127エクステントはサイズが増加する形で割り当てられ、それ以降のエクステントは559シリンダーで割り当てられます。
  • 32 GB 未満のデータセットでは、最初の 127 エクステントはサイズが増加する形で割り当てられ、それ以降のエクステントは 127 シリンダーで割り当てられます。
変更の終わり

この方法には、以下のようにいくつかの利点があります。

  • 最初は 2 次エクステントのサイズを徐々に増やすことによって、無駄なスペースの可能性を最小にします。
  • フラグメント化の原因となり得る、残ったエクステント用の大量割り振りを回避します。
  • テーブルスペースおよびインデックススペースの作成や変更時に、SECQTY値を指定する必要がなくなりました。
  • 理論的には、2 次エクステントを使い切ることなく最大データ・セット・サイズに達する可能性があります。

重大な DASD のフラグメント化が生じた場合、論理エクステント要求を満たすために最大で 5 エクステントを使う可能性があります。 この状態でも、データ・セットは理論上のデータ・セット・サイズに達しません。

エクステント制約除去オプションを変更することができます。 SMS データ・クラスの「エクステント制約除去」オプションを「YES」に設定することにより、エクステントの最大数を 7257 まで上げることができます。 ただし、ボリューム当たり 123 エクステント、データ・セット当たりの最大ボリューム・カウントが 59 という制限は有効のままです。 詳細については、「VSAM エクステントの使用 」を参照してください。

以下の表は、相対ページ番号を使用しないテーブルスペースのセカンダリ・エクステントの最大割り当てを示しています。 最初に割り当てられたエクステントのサイズが1つのシリンダーであると仮定しています。

表 1. セカンダリ・エクステントの最大スペース割り当て
最大データセットサイズ(GB) 最大割当(シリンダー) フルサイズに達するまでのエクステント数
1 127 54
2 127 75
4 127 107
8 127 154
16 127 246
32 559 172
64 559 255
変更の開始128変更の終わり 変更の開始1785変更の終わり 変更の開始145変更の終わり
変更の開始256変更の終わり 変更の開始1785変更の終わり 変更の開始254変更の終わり
汎用プログラミングインターフェース情報の開始。Db2は、以下の場合に、表スペースおよび索引の 2 次エクステント割り振りにスライド・スケールを使用します。
  • CREATE TABLESPACE または CREATE INDEX 文の SECQTY 節に値を指定しない
  • ALTER TABLESPACE または ALTER INDEX 文で SECQTY -1 を指定します。

そうでない場合、 Db2 、セカンダリ・エクステントの割り当てに指定されたSECQTY 整数値が明示的に指定されていれば、常にそれを使用する。汎用プログラミングインターフェース情報の終了。

例外: 計算された二次数量の値が十分大きくない状況では、テーブルスペースやインデックスを作成または変更する際に、SECQTYオプションに大きな値を指定することができます。 ただし、SECQTYオプションに値を指定した場合、 Db2 はSECQTYオプションの値を使用して、スライディングスケールアルゴリズムから導出される値よりもSECQTYオプションの値が大きい場合にのみ、セカンダリ・エクステントを割り当てます。 Db2 がこの決定を行う際に使用する計算式は次のとおりです
actual secondary extent size = MAX ( MIN ( ss_extent, MaxAlloc ), SECQTY)
この計算において、 ss_extentはスライディングスケールアルゴリズムから得られる値を表し MaxAlloc はシリンダー単位での最大割り当て量であり、 表1に記載されているように、潜在的なデータセットの最大サイズに依存する。 この方法を使用すると、最大ページ・セット・サイズに早く到達することができます。 それ以外の場合、 Db2 はスライディングスケールアルゴリズムから導き出された値を使用します。
変更の開始

セカンダリスペースの割り当て数量に値を入力しない場合、 Db2 は以下の計算式を使用してセカンダリスペースの割り当て値を決定します。

MAX (ss_extent, MIN ( 0.1 × PRIQTY, MaxAlloc))

つまり、 Db2 は、次のプロセスで二次スペースの割り当て量を決定します

  1. Db2 まず、貸主は以下の2つの値を決定します
    • プライマリスペース割り当て(PRIQTY)の10%の値。
    • シリンダー内の最大割当量( MaxAlloc )、 表1に記述されている。
  2. Db2 次に、前段階の結果をスライディングスケールアルゴリズム (ss_extent) で決定された値と比較し、実際の二次スペース割り当て量として、この2つの値のうち大きい方を採用します。
変更の終わり

2 次スペース割り振り数量は、DSSIZE または PIECESIZE 文節の値を超えません。

Db2 がデータセットを拡張しないようにしたい場合は、テーブルスペースやインデックスを作成または変更する際に、 SECQTY 0 を指定することができます。 この値を指定すると、実際の二次数量は0になります。

SECQTY 0 を指定することは、 DSNDB07 の作業ファイルが膨れ上がるのを防ぐのに有効な方法です。

テーブルスペースに新しいピースが必要な場合、その新しいピースの一次割当数量は、以下の値のうち最大の値を使用して決定されます。
  • スライド制で算出された数量
  • プライマリ空間割当で説明されているように、プライマリ数量値
  • 指定された SECQTY 値