ページの先頭行へ戻る
Interstage Application Server V12.0.0 Java EE 7 設計・構築・運用ガイド
FUJITSU Software

6.12.2 ジョブリポジトリとして使用するデータベースのディスク容量

バッチジョブのジョブリポジトリとして使用するデータベースに必要なディスク容量の見積もりについて説明します。必要なディスク容量はテーブル容量にインデックス容量を加算したものです。

6.12.2.1 想定する資源量の決定

見積もりにあたり、運用の見積もりに応じて以下の10件のユーザ変数を決定する必要があります。それぞれの変数名はアルファベットでラベル付けしており、後の計算で使用します。

(注) 例えば通常のチャンクステップが1つ、5パーティションで動作するチャンクが1つあれば、1+5=6とします。

6.12.2.2 テーブルのディスク使用量

バッチジョブの管理のため、以下のテーブルを使用します。個々のテーブルごとに必要サイズを見積もり、合計した値をテーブルのディスク使用量とします。

テーブル名

使用目的(格納する情報)

JOBINSTANCEDATA

ジョブインスタンス情報

EXECUTIONINSTANCEDATA

ジョブ実行情報

STEPEXECUTIONINSTANCEDATA

ステップ実行情報

JOBSTATUS

実行しているジョブインスタンスに関する状態

STEPSTATUS

実行しているステップに関する情報

CHECKPOINTDATA

チャンクで使用するチェックポイント情報

見積もりは以下の手順で行います。

  1. テーブルで使用するレコードサイズを算出

  2. 1ブロックに格納可能なレコード数を算出

  3. テーブルの想定レコード数を算出

  4. 必要ブロック数を算出

  5. シリアライズ化オブジェクトのサイズを算出

  6. テーブル必要量の算出

見積もりにあたり、以下の注意事項があります。

1) テーブルで使用するレコードサイズを算出

各テーブルに格納されるレコード(行)のサイズを決定します。

テーブル

変数名

Oracle

SQL Server

Symfoware

(Postgres)

JOBINSTANCEDATA

D1

平均データサイズ(注1)

平均データサイズ(注2)

平均データサイズ(注2)

EXECUTIONINSTANCEDATA

D2

331

313

313

STEPEXECUTIONINSTANCEDATA

D3

493

457

457

JOBSTATUS

D4

11

8

8

STEPSTATUS

D5

11

8

8

CHECKPOINTDATA

D6

155

155

155

(注1) Oracleの場合: (239+263×P+389×F)÷(1+P+F)

(注2) SQL Server、Symfoware(Postgres)の場合: (236+260×P+386×F)÷(1+P+F)

計算結果の小数点以下は切り上げて使用してください。

2) 1ブロックに格納可能なレコード数を算出

1ブロックに格納可能なレコード(行)数を決定します。小数点以下は切り捨ててください。Baはテーブルブロック内のレコード格納可能な領域のサイズで、各データベースおよび設定により変わる場合があります。このため適宜値を読み替えて使用してください(デフォルトではOracle=7291、SQL Server=8096、Symfoware(Postgres)=8168)。

テーブル

変数名

計算式

JOBINSTANCEDATA

P1

Ba÷D1

EXECUTIONINSTANCEDATA

P2

Ba÷D3

STEPEXECUTIONINSTANCEDATA

P3

Ba÷D4

JOBSTATUS

P4

Ba÷D5

STEPSTATUS

P5

Ba÷D6

CHECKPOINTDATA

P6

Ba÷D7

3) テーブルの想定レコード数を決定

最初に想定した変数を用いて、各テーブルに何レコード(行)登録されるかを決定します。

テーブル

変数名

計算式

JOBINSTANCEDATA

R1

J×(1+P+F)

EXECUTIONINSTANCEDATA

R2

R1×E

STEPEXECUTIONINSTANCEDATA

R3

J×(S+P)

JOBSTATUS

R4

R1

STEPSTATUS

R5

R3

CHECKPOINTDATA

R6

J×C×2

4) 必要なブロック数を算出

想定したレコード(行)数を格納するために何ブロック必要かを算出します。結果は小数点以下を切り上げて使用してください。

テーブル

変数名

計算式

JOBINSTANCEDATA

N1

R1÷P1

EXECUTIONINSTANCEDATA

N2

R2÷P2

STEPEXECUTIONINSTANCEDATA

N3

R3÷P3

JOBSTATUS

N4

R4÷P4

STEPSTATUS

N5

R5÷P5

CHECKPOINTDATA

N6

R6÷P6

5) シリアライズ化オブジェクトのサイズを算出

バッチアプリケーション内で使用するオブジェクトについては、別途格納されていると仮定します。テーブルの見積もり結果に別途追加するため、テーブルごとの追加サイズをそれぞれ算出します。

テーブル

変数名

計算式

JOBINSTANCEDATA

L1

0 (無し)

EXECUTIONINSTANCEDATA

L2

Sp×R2

STEPEXECUTIONINSTANCEDATA

L3

Su×R3

JOBSTATUS

L4

(1219+Sx)×R4

STEPSTATUS

L5

(949+Su)×R5

CHECKPOINTDATA

L6

(345+Sc)×R6

6) テーブル必要量の算出

これまでの結果を用い、テーブルに必要なディスク容量は以下のように計算できます。

Bsはブロックのサイズで通常各データベースで8Kbytesですが、環境に応じて読み替えてください。

6.12.2.3 インデックスのディスク使用量

ここではインデックスの格納にはBツリーを使用しているものと仮定しています。さらに、通常リーフノードが使用量の大部分を占めるため、リーフノードのみの使用量を見積もることとします。

バッチジョブでは以下のインデックスを使用しています。それぞれ格納されるデータが異なるため、個々のインデックスごとに必要サイズを見積もり、それらを合計します。

プライマリキーに○印が付いているカラムは、データベースシステムにより自動でインデックスが作成されます。

No

テーブル名

カラム名

プライマリキー

1

JOBINSTANCEDATA

jobinstanceid

2

EXECUTIONINSTANCEDATA

jobexecid

3

jobinstanceid

4

STEPEXECUTIONINSTANCEDATA

stepexecid

5

jobexecid

6

stepname

7

JOBSTATUS

id

8

STEPSTATUS

id

9

CHECKPOINTDATA

id

見積もりは以下の手順で行います。基本的な考え方はテーブルの場合と同様です。

  1. インデックステーブルで使用するレコードサイズを決定

  2. 1ブロックに格納可能なレコード数を算出

  3. テーブルの想定レコード数を算出(テーブルの場合と同じ値)

  4. 必要なブロック数を算出

  5. インデックス必要量の算出

1) インデックステーブルで使用するレコードサイズを決定

インデックステーブルに格納されるレコードサイズを、各インデックスごとに決定します。

テーブル

カラム

変数名

Oracle

SQL Server

Symfowware

(Postgres)

JOBINSTANCEDATA

jobinstanceid

D1’

26

17

20

EXECUTIONINSTANCEDATA

jobexecid

D2’

26

17

20

jobinstanceid

D3’

27

20

20

STEPEXECUTIONINSTANCEDATA

stepexecid

D4’

26

17

20

jobexecid

D5’

27

20

20

stepname

D6’

147

155

140

JOBSTATUS

id

D7’

26

17

20

STEPSTATUS

id

D8’

26

17

20

CHECKPOINTDATA

id

D9’

174

184

173

2) 1ブロックに格納可能なレコード数を算出

1ブロックに格納可能なレコード(行)数を決定します。小数点以下は切り捨ててください。Ba'はインデックステーブルブロック内のレコード格納可能な領域のサイズで、各データベースおよび設定により変わる場合があります。このため適宜値を読み替えて使用してください(デフォルトではOracle=7243、SQL Server=8096、Symfoware(Postgres)=8152)。

テーブル

カラム

変数名

計算式

JOBINSTANCEDATA

jobinstanceid

P1'

Ba'÷D1

EXECUTIONINSTANCEDATA

jobexecid

P2'

Ba'÷D2

jobinstanceid

P3'

Ba'÷D3

STEPEXECUTIONINSTANCEDATA

stepexecid

P4'

Ba'÷D4

jobexecid

P5'

Ba'÷D5

stepname

P6'

Ba'÷D6

JOBSTATUS

id

P7'

Ba'÷D7

STEPSTATUS

id

P8'

Ba'÷D8

CHECKPOINTDATA

id

P9'

Ba'÷D9

Ba'はブロック内のレコードを格納可能な領域のサイズで、各DBの設定により変わる場合がありますので適宜値を読み替えて使用してください。

3)テーブルの想定レコード数を算出

最初に想定した変数から、各テーブルに何レコード(行)入るかを算出します。テーブルの容量計算で使用したものと同一の値です。

テーブル

変数名

計算式

JOBINSTANCEDATA

R1

J×(1+P+F)

EXECUTIONINSTANCEDATA

R2

R1×E

STEPEXECUTIONINSTANCEDATA

R3

J×(S+P)

JOBSTATUS

R4

R1

STEPSTATUS

R5

R3

CHECKPOINTDATA

R6

J×C×2

4)必要なブロック数を算出

想定レコード(行)数を格納するために何ブロック必要かを算出します。結果は小数点以下を切り上げて使用してください。

テーブル

カラム

変数名

計算式

JOBINSTANCEDATA

jobinstanceid

N1'

R1÷P1'

EXECUTIONINSTANCEDATA

jobexecid

N2'

R2÷P2'

jobinstanceid

N3'

R2÷P3'

STEPEXECUTIONINSTANCEDATA

stepexecid

N4'

R3÷P4'

jobexecid

N5'

R3÷P5'

stepname

N6'

R3÷P6'

JOBSTATUS

id

N7'

R4÷P7'

STEPSTATUS

id

N8'

R5÷P8'

CHECKPOINTDATA

id

N9'

R6÷P9'

5) インデックス必要量の算出

これまでの結果を用い、インデックスに必要なディスク容量は以下のように計算できます。

Bsはブロックのサイズで、通常各データベースで8Kbytesですが、環境に応じて読み替えてください。格納されるデータやその他の状況によってインデックスの使用率が変わってくるため、結果には安全係数(1.5以上)を掛けたものを使用してください。

テーブル使用量とインデックス使用量を加えたものをディスクの見積もり量としてください。

これらテーブルおよびインデックスの計算式は各可変長のカラムに最大長を設定した値を用いた概算のため、実際よりもおおむね大きな値が得られますが、実運用では充分に余裕をとった値を使用してください。

インデックスは運用に伴い肥大するため、適宜再構築等が必要になる場合があります。詳しくは各データベース製品のドキュメントを参照してください。

6.12.2.4 ディスク容量計算例

ここでは、以下の値を想定します。データベースはOracleを使用しているものとします。

No

項目

変数名

想定値

1

実行するジョブインスタンス数

J

1000

2

1インスタンスあたりのジョブ実行数

E

1

3

ジョブ定義中のステップ数

S

8

4

ステップパーティション数

P

5

5

スプリット内フロー数

F

5

6

チャンクステップ+チャンクパーティション数

C

6

7

パラメータオブジェクトのサイズ

Sp

512

8

ユーザパーシステントデータのサイズ

Su

512

9

チェックポイントデータのサイズ

Sc

128

10

ジョブXMLのサイズ

Sx

4096

まず、JOBINSTANCEDATAのレコード平均サイズを求めます(小数点以下切り上げ)。

(239+263×P+389×F)÷(1+P+F) = 319

ここでブロック使用可能領域サイズ(Ba)を7291とします(Oracleのデフォルト値)。それらからブロックあたりの格納可能レコード数を求めます。結果について小数点以下は切り捨てます。

P1=7291÷319=22

P2=7291÷331=22

P3=7291÷493=14

P4=7291÷11=662

P5=7291÷11=662

P6=7291÷155=47

次に各テーブルに格納される行数を算出します。

R1=J×(1+P+F)=11000

R2=R1×E=11000

R3=J×(S+P)=13000

R4=R1=11000

R5=R3=13000

R6=J×C×2=12000

これらの結果から、各テーブルの必要ブロック数を算出します。結果について小数点以下は切り上げます。

N1=R1÷P1=11000÷22=500

N2=R2÷P2=11000÷22=500

N3=R3÷P3=13000÷14=929

N4=R4÷P4=11000÷662=17

N5=R5÷P5=13000÷662=20

N6=R6÷P6=12000÷47=256

次にシリアライズ化オブジェクトサイズを算出します。

L1=0

L2=Sp×R2=512×11000= 5632000

L3=Su×R3=512×13000= 6656000

L4=(1219+Sx)×R4=(1219+4096)×11000= 58465000

L5=(949+Su)×R5=(949+512)×13000 = 18993000

L6=(345+Sc)×R6=(345+128)×12000 = 5676000

これまでの結果から、以下のテーブル必要量が算出できます。ここではブロックサイズBsを8192として計算しています。

(N1+N2+N3+N4+N5+N6)×Bs + L1+L2+L3+L4+L5+L6

=(500+500+929+17+20+256)×8192 + 5632000+6656000+58465000+18993000+5676000

=113624624

次にインデックスの見積もりを行います。

以下のように、各インデックスについてブロックに格納可能なレコード数を見積もります。結果の小数点以下は切り捨てます。ここでBa'はOracleのインデックスブロック空き領域サイズのデフォルト値7243を使用しています。

P1'=7243÷26=278

P2'=7243÷26=278

P3'=7243÷27=268

P4'=7243÷26=278

P5'=7243÷27=268

P6'=7243÷147=49

P7'=7243÷26=278

P8'=7243÷26=278

P9'=7243÷174=41

次に必要ブロック数の見積もりを行います。想定行数(R1~R6)はテーブルの計算に使用したものと同一です。結果は小数点以下を切り上げて使用します。

N1'=R1÷P1'=11000÷278=40

N2'=R2÷P2'=11000÷278=40

N3'=R2÷P3'=11000÷268=42

N4'=R3÷P4'=13000÷278=47

N5'=R3÷P5'=13000÷268=49

N6'=R3÷P6'=13000÷49=266

N7'=R4÷P7'=11000÷278=40

N8'=R5÷P8'=13000÷278=47

N9'=R6÷P9'=12000÷41=293

ここまでの計算結果から、インデックス必要量を算出します。ここで、テーブルサイズBsは8192とします。また、安全係数を2とします。

(N1'+N2'+N3'+N4'+N5'+N6'+N7'+N8'+N9')×Bs×安全係数

= (40+40+42+47+49+266+40+47+293)×8192×2

= 14155776

ディスクの必要量は、テーブルとインデックスを合わせて

113624624+14155776 = 127780400 = 約122MB

となります。ここで算出した値は概算であり実際は条件により異なる場合がありますので、使用する場合は充分な余裕を持った値としてください。