Hitachi

ノンストップデータベース HiRDB Version 9 システム導入・設計ガイド(Windows(R)用)


15.2.2 メモリ所要量の計算式

HiRDB/パラレルサーバの各ユニットが使用するメモリ所要量は,次の表に示すすべての項目を加算した値です。

共用メモリサイズが増加すると,ページフォルトの発生回数が増加し,トランザクション性能に影響を与えるおそれがあります。各オペランドの指定値の目安を参照し,システムに合わせて適切な値を指定することを検討してください。

表15‒7 HiRDB/パラレルサーバの各ユニットが使用するメモリ所要量

項目

メモリ所要量(単位:キロバイト)

プロセス固有領域

ユニットコントローラ全プロセスが使用するプロセス固有領域

●32ビットモードの場合

J+K×ユニット内FES数+L×(ユニット内BES数+ユニット内DS数)+↑{(64+48×(v+1))×(pd_max_server_processの値−w−3)+(64+48×(ab+1))×3+z}÷1024↑

●64ビットモードの場合

J+K×ユニット内FES数+L×(ユニット内BES数+ユニット内DS数)+↑{(64+64×(v+1))×(pd_max_server_processの値−w−3)+(64+64×(ab+1))×3+z}÷1024↑

●プラグインを使用する場合,加算します。

+1400

●非同期READ機能を使用する場合,加算します。

+s

●pd_process_terminatorオペランドにfixedを指定した場合,加算します。

+M×(pd_process_terminator_maxの値−1)

●インメモリデータ処理を行う場合,加算します。

+↑{T×(pd_max_bes_processの値×2+7)×ユニット内BES数}÷1024↑

●通信トレース格納最大数を変更する場合,加算します。

+↑V÷1024↑

各サーバプロセスが使用するプロセス固有領域※1 ※2

フロントエンドサーバ

(N+h+m+p+q+ac)×b+y

●通信トレース格納最大数を変更する場合,加算します。

+↑W÷1024↑

ディクショナリサーバ

pd_work_buff_mode=each指定時

{P+i+m+(a+9)×2+r+t}×b+y+S

●通信トレース格納最大数を変更する場合,加算します。

+↑W÷1024↑

pd_work_buff_mode=pool指定又は省略時

●32ビットモードの場合

(P+i+m+a+↑a÷128×0.1↑+11+n+r+t)×b+y+S

●64ビットモードの場合

(P+i+m+a+↑a÷128×0.1↑+15+n+r+t)×b+y+S

●通信トレース格納最大数を変更する場合,加算します。

+↑W÷1024↑

バックエンドサーバ

pd_work_buff_mode=each指定時

{Q+g+(a+9)×c+i+m+r+t}

×(b+3)+y+S

●インメモリデータ処理を行う場合,加算します。

+↑{T×(b+3)}÷1024↑

●通信トレース格納最大数を変更する場合,加算します。

+↑W÷1024↑

pd_work_buff_mode=pool指定又は省略時

●32ビットモードの場合

(Q+g+a+↑a÷128×0.1↑+11+i+m+n+r+t)×(b×3)+y+S

●64ビットモードの場合

(Q+g+a+↑a÷128×0.1↑+15+i+m+n+r+t)×(b×3)+y+S

●インメモリデータ処理を行う場合,加算します。

+↑{T×(b+3)}÷1024↑

●通信トレース格納最大数を変更する場合,加算します。

+↑W÷1024↑

共用メモリ

ユニットコントローラ用共用メモリ中,ユニットコントローラが使用する領域

↑d÷1024↑

ユニットコントローラ用共用メモリ中,各サーバが使用する領域※1

e

グローバルバッファ用共用メモリ

f

インメモリデータ処理用共用メモリ

U

ユティリティ用共用メモリ

u

セキュリティ監査情報用バッファ用共用メモリ

●システムによる自動計算の場合

↑0.3+MAX{(R+100),(R×1.2)}×0.25↑

●ユーザ指定値(pd_audit_def_buffer_sizeオペランドを指定)にする場合

pd_audit_def_buffer_sizeの指定値

プロセス間メモリ通信用共用メモリ※3

j×k

注※1

ユニット内に複数のサーバ(システムマネジャを除きます)がある場合は,サーバごとに計算してください。

注※2

プラグインを使用する場合は,1サーバプロセス当たり300を加算してください。

注※3

クライアント環境定義でPDIPC=MEMORYを指定した場合に加算します。プロセス間メモリ通信機能及びクライアント環境定義については,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。

なお,HiRDBサーバ又はHiRDBクライアントのどちらかが32ビットモードの場合,プロセス間メモリ通信機能で使用する共用メモリは32ビット空間内に確保されます。

a:pd_work_buff_sizeオペランドの値

b:pd_max_usersオペランドの値
  • ディクショナリサーバの場合は,pd_max_dic_processオペランドの値となります。

  • バックエンドサーバの場合は,pd_max_bes_processオペランドの値となります。

  • pd_max_dic_process又はpd_max_bes_processオペランドを省略する場合は,pd_max_usersオペランドの値となります。

c:最大作業表数

SQL文ごとの作業表数を表「SQL文ごとの作業表数の求め方」から求めます。表「SQL文ごとの作業表数の求め方」から求めた作業表数のうちで最大のものを最大作業表数とします。

d:「ユニットコントローラが使用する共用メモリの計算式」で求めた値

e:「各サーバが使用する共用メモリの計算式」で求めた値

f:「グローバルバッファが使用する共用メモリの計算式」で求めた値

g:SQL実行時に必要なメモリ所要量

計算式については,「SQL実行時に必要なメモリ所要量の計算式」を参照してください。

h:SQL前処理時に必要なメモリ所要量

計算式については,「SQL前処理時に必要なメモリ所要量の計算式」を参照してください。

i:LOBバッファ一括入出力ワークメモリ

該当するサーバのLOB用RDエリアにLOB用グローバルバッファを指定している場合だけ(システム共通定義のpdbufferオペランドに-bを指定している場合),62キロバイトを加算してください。

j:プロセス間メモリ通信機能を使用するクライアントの最大同時実行数

分からない場合は,プロセス間メモリ通信機能を使用する全クライアント数,又はpd_max_usersオペランドの値を代入してください。

k:プロセス間メモリ通信機能を使用する全クライアントのデータ送受信用メモリサイズ(クライアント環境定義のPDSENDMEMSIZEの値+PDRECVMEMSIZEの値)の平均値

m:Java仮想マシンが使用するメモリ所要量

Javaストアドプロシジャ又はJavaストアドファンクションを使用する場合に,Java仮想マシンが使用するメモリ所要量を加算します。Java仮想マシンが使用するメモリ所要量は,Java仮想マシンのオプションやJava仮想マシンのバージョンによって異なります。Java仮想マシンが使用するメモリ所要量については,Java仮想マシンのマニュアルを参照してください。

n:作業表用増分メモリサイズ

pd_work_buff_expand_limitオペランドを指定する場合に作業表用増分メモリサイズを加算します。作業表用増分メモリサイズは次に示す計算式から求めます。

作業表用増分メモリサイズ(キロバイト)=作業表用増分バッファサイズ+↑(作業表用の増分バッファサイズ÷128)×0.1↑

  • 作業表用増分バッファサイズ(キロバイト)=MAX(0,ハッシュジョイン,副問合せのハッシュ実行による作業表用増分バッファサイズ)+MAX(0,作業表数の増加による作業表用増分バッファサイズ)

  • ハッシュジョイン,副問合せのハッシュ実行による作業表用増分バッファサイズ=MIN{(ハッシュジョイン,副問合せのハッシュ実行をするときの作業表用バッファサイズ−pd_work_buff_sizeオペランドの値),(pd_work_buff_expand_limitオペランドの値−pd_work_buff_sizeオペランドの値)}×ハッシュジョイン,副問合せのハッシュ実行をする同時実行ユーザ数

    ハッシュジョイン,副問合せのハッシュ実行をするときの作業表用バッファサイズの求め方については,マニュアル「HiRDB Version 9 UAP開発ガイド」を参照してください。

  • 作業表数の増加による作業表用増分バッファサイズ=MIN{(使用作業表数×128−pd_work_buff_sizeオペランドの値),(pd_work_buff_expand_limitオペランドの値−pd_work_buff_sizeオペランドの値)}×(使用作業表数がpd_work_buff_sizeオペランドの値÷128以上になるユーザ数)

    使用作業表数=MAX(1SQL文が使用する作業表用ファイルの数,ASSIGN LIST文が使用する作業表用ファイルの数)

    1SQL文が使用する作業表用ファイルの数,及びASSIGN LIST文が使用する作業表用ファイルの数の求め方については,「最大ファイル数の見積もり(pdfmkfs -lコマンド)」を参照してください。

p:BLOB型データ用に必要なメモリ所要量

計算式については,「BLOB型データの検索又は更新時に必要なメモリ所要量の計算式(フロントエンドサーバの場合)」を参照してください。

q:サーバ側でブロック転送又は配列FETCHで必要なメモリ所要量

計算式については,「ブロック転送又は配列FETCHで必要なメモリ所要量の計算式(フロントエンドサーバの場合)」を参照してください。

r:BLOB型データ用に必要なメモリ所要量

計算式については,「BLOB型データの検索又は更新時に必要なメモリ所要量の計算式(バックエンドサーバ又はディクショナリサーバの場合)」を参照してください。

s:非同期READ用メモリサイズ

非同期READ機能を使用する場合に加算します。次に示す計算式から求めます(単位:キロバイト)。

(90+
90
Σ RDエリア用HiRDBファイルシステム領域管理用メモリ)
i=1
×pd_max_ard_processの値

RDエリア用HiRDBファイルシステム領域管理用メモリは計算値の大きい順に90領域を計算に使用します。サーバで使用する領域数が90領域に満たない場合,その領域まで計算します。

HiRDBファイルシステム領域管理用メモリはそれぞれの領域の初期設定時のパラメタを使用して,次の計算式から求めます(単位:キロバイト)。

なお,領域の初期設定時のパラメタはpdfstatfsコマンドに-Aオプションを指定して実行することで確認できます。

{(ファイル数※1+増分数※2)÷64}×1.5※3

注※1 pdfmkfs -l指定値,又はpdfstatfs実行結果の[available file count]に表示される値です。

注※2 pdfmkfs -e指定値,又はpdfstatfs実行結果の[available expand count]に表示される値です。

注※3 領域サイズ(pdfmkfs -n指定値)が2048以上の場合に乗算します。

t:HiRDBファイルシステム用メモリサイズ

次に示す計算式から求めます(単位:キロバイト)。

604+作業表用HiRDBファイルシステム領域管理用メモリ+
システムログ用HiRDBファイルシステム領域管理用メモリ+
90
ΣRDエリア用HiRDBファイルシステム領域管理用メモリ
i=1

作業表用及びシステムログ用HiRDBファイルシステム領域管理用メモリは,サーバで使用するHiRDBファイルシステム領域で計算値が最大になるものを使用します。RDエリアの場合は計算値の大きい順に90領域を計算に使用します。サーバで使用する領域数が90領域に満たない場合,その領域まで計算します。

HiRDBファイルシステム領域管理用メモリはそれぞれの領域の初期設定時のパラメタを使用して,次の計算式から求めます(単位:キロバイト)。

なお,領域の初期設定時のパラメタはpdfstatfsコマンドに-Aオプションを指定して実行することで確認できます。

{(ファイル数※1+増分数※2)÷64}×1.5※3

注※1 pdfmkfs -l指定値,又はpdfstatfs実行結果の[available file count]に表示される値です。

注※2 pdfmkfs -e指定値,又はpdfstatfs実行結果の[available expand count]に表示される値です。

注※3 領域サイズ(pdfmkfs -n指定値)が2048以上の場合に乗算します。

u:pd_utl_exec_modeの値が0の場合:0

pd_utl_exec_modeの値が1の場合:↑{(b×2000+136)÷1024}↑×1024

v:ユニット制御情報定義として有効なpd_module_trace_maxの値

w:ユニット内の全サーバプロセスに対して,(最大起動プロセス数+3)を合計した値

最大起動プロセス数については,マニュアル「HiRDB Version 9 システム定義」を参照してください。

y:ユニット内の各サーバプロセスに対して次の計算式で求めた値の総和

32ビットモードの場合:

↑{(64+48×(pd_module_trace_maxの値+1))×(最大起動プロセス数+3)}÷1024↑

64ビットモードの場合:

↑{(64+64×(pd_module_trace_maxの値+1))×(最大起動プロセス数+3)}÷1024↑

最大起動プロセス数については,マニュアル「HiRDB Version 9 システム定義」を参照してください。

z:HiRDBの再開始用メモリサイズ

このメモリサイズを確保できないと,HiRDBの再開始に失敗します。次の計算式から求めます(単位:バイト)。

(D+E+F)×ディクショナリサーバ数+(D+E+F)×バックエンドサーバ数+ΣH

HiRDBの再開始用メモリサイズを求める計算に使用する変数を次に示します。

変数

D

●32ビットモードの場合

246762+4×pd_max_rdarea_noの値

+{48×(pd_max_rdarea_noの値+表数)+304}×(pd_max_usersの値×2+7)

●64ビットモードの場合

305274+8×pd_max_rdarea_noの値

+{64×(pd_max_rdarea_noの値+表数)+512}×(pd_max_usersの値×2+7)

表数:62+MAX{pd_max_access_tablesの値,500}

E

b1×X+b2×Y

b1:サーバ用ステータスファイルのレコード長<4096の場合

   MAX((↓(3400÷((↓((レコード長−40)−308)÷20↓)

   +(↓(レコード長−40)÷20↓)×(MAX(↓4096÷レコード長↓,2)−1))

   +0.7)↓),1)×MAX(↓4096÷レコード長↓,2)×(レコード長−40)

  4096≦サーバ用ステータスファイルのレコード長<12288の場合

   MAX(↓(3400÷(↓(((レコード長−40)−308)÷20)↓)+0.7)↓,1)

   ×(レコード長−40)

  12288≦サーバ用ステータスファイルのレコード長の場合

   MAX(↓(3400÷(↓(((レコード長−40)−836)÷20)↓)+0.7)↓,1)

   ×(レコード長−40)

X:サーバ内のRDエリア数≦3400の場合:1

  3401≦サーバ内のRDエリア数≦6800の場合:2

  6801≦サーバ内のRDエリア数の場合:3

b2:サーバ用ステータスファイルのレコード長<4096の場合

   (↓(5662310÷((↓((レコード長−40)−308)÷20↓)

   +(↓(レコード長−40)÷20↓)×(MAX(↓4096÷レコード長↓,2)−1))

   +0.7)↓)×MAX(↓4096÷レコード長↓,2)×(レコード長−40)

  4096≦サーバ用ステータスファイルのレコード長<12288の場合

   ↓(5662310÷(↓(((レコード長−40)−308)÷20)↓)+0.7)↓

   ×(レコード長−40)

  12288≦サーバ用ステータスファイルのレコード長の場合

   ↓(5662310÷(↓(((レコード長−40)−836)÷20)↓)+0.7)↓

   ×(レコード長−40)

Y:サーバ内のRDエリア数≦10200の場合:0

  10201≦サーバ内のRDエリア数≦5672510の場合:1

  5672511≦サーバ内のRDエリア数≦11334820の場合:2

  11334821≦サーバ内のRDエリア数の場合:3

F

pd_dbsync_pointオペランドにcommitを指定している場合,加算します。

+112×(pd_max_usersの値×2+7)

H

サーバ内のraw I/O機能を使用したHiRDBファイルシステム領域に作成されたRDエリアを格納したHiRDBファイルシステム領域数が1001以上のバックエンドサーバに対して加算します。

●32ビットモードの場合

12012×(↑(raw I/O機能を使用したHiRDBファイルシステム領域に作成されたRDエリアを格納したHiRDBファイルシステム領域数−1000)÷1000↑)

●64ビットモードの場合

16016×(↑(raw I/O機能を使用したHiRDBファイルシステム領域に作成されたRDエリアを格納したHiRDBファイルシステム領域数−1000)÷1000↑)

注※

ディクショナリサーバの場合はpd_max_dic_processの値となります。バックエンドサーバの場合はpd_max_bes_processの値となります。ただし,pd_max_dic_process又はpd_max_bes_processを省略する場合は,pd_max_usersの値となります。

J,K,L,M,N,P,Q:固定値

この値はOSによって異なります。OSごとの値を次に示します(単位:キロバイト)。

OS

Jの値

Kの値

Lの値

Mの値

Nの値

Pの値

Qの値

Windows (x86)

134,300

27,600

35,500

7,600

14,300

13,000

13,200

Windows (x64)

170,300

39,200

52,500

13,000

13,400

12,900

14,000

R:余裕を持って見積もる場合は監査対象イベントの数(CREATE AUDITの実行回数),詳細に見積もる場合はセキュリティ監査情報用バッファのエントリ数

S:シンクポイント出力同期制御情報取得機能使用時に必要なメモリ(単位:バイト)

pd_dbbuff_trace_levelオペランドに1を指定し,かつpd_dfw_awt_processオペランドの指定を省略している場合に,次の値を加算します。

32ビットモードの場合:

320×シングルサーバに定義したグローバルバッファの数

64ビットモードの場合:

640×シングルサーバに定義したグローバルバッファの数

T:pd_max_resident_rdarea_noオペランドに1以上を指定している場合に,次の値を加算します。

1648+16×pd_max_resident_rdarea_noの値+16×pd_max_resident_rdarea_shm_noの値

U:インメモリデータ処理で必要なメモリ所要量

計算式については,「インメモリデータ処理で必要なメモリ所要量」を参照してください。

V:通信トレース処理で必要なメモリ所要量
32ビットモードの場合:

(16×(Z−1024)×2)×(pd_max_server_processの値−w)

64ビットモードの場合:

(32×(Z−1024)×2)×(pd_max_server_processの値−w)

W:通信トレース処理で必要なメモリ所要量

ユニット内の各サーバプロセスについて算出した次の値です。

32ビットモードの場合:

(16×(aa−1024)×2)×(最大起動プロセス数+3)

64ビットモードの場合:

(32×(aa−1024)×2)×(最大起動プロセス数+3)

最大起動プロセス数については,マニュアル「HiRDB Version 9 システム定義」を参照してください。

Z:ユニット制御情報定義として有効なpd_pth_trace_maxの値です。

オペランドの指定値を2のべき乗に切り上げた値になります。

aa:各サーバ定義として有効なpd_pth_trace_maxの値です。

オペランドの指定値を2のべき乗に切り上げた値になります。

ab:システム共通定義,又はユニット制御情報定義にpd_module_trace_maxオペランドを指定している場合:pd_module_trace_maxの値

それ以外の場合:16383

ac:フロントエンドサーバで使用するSQL実行用通信メモリ所要量

4×システム内BES数

表15‒8 SQL文ごとの作業表数の求め方

SQL文

作業表数の求め方

SELECT文

INSERT(-SELECT)文

1.〜8. の指定がない場合:0

1.〜8. の指定がある場合:該当する作業表数をすべて加算した値

  1. 複数の表を結合して検索する場合

    増加作業表数=(結合表数−1)×2+1

  2. ORDER BY句を指定する場合

    増加作業表数=2

  3. GROUP BY句を指定する場合

    増加作業表数=GROUP BY句指定数

  4. DISTINCT句を指定する場合

    増加作業表数=DISTINCT句指定数

  5. UNION句,UNION ALL句又はEXCEPT[ALL]句を指定する場合

    増加作業表数=(UNION又はUNION ALL句指定数)×2+1

  6. 探索条件中にインデクスを定義した列がある場合

    増加作業表数=探索条件中のインデクスを定義した列数

  7. FOR UPDATE句又はFOR READ ONLY句を指定する場合

    増加作業表数=1

  8. 副問合せ(限定述語)を指定する場合

    増加作業表数=副問合せ指定数

UPDATE文

DELETE文

探索条件中のインデクスを定義した列数+1

DROP SCHEMA文

DROP TABLE文

DROP INDEX文

CREATE INDEX文

REVOKE文でアクセス権限を取り消す場合

2