16.1.2 メモリ所要量の計算式

HiRDB/シングルサーバが使用するメモリ所要量は,次の表に示すすべての項目を加算した値です。

なお,OSのオペレーティングシステムパラメタのshmmax(Solaris版の場合はshmsys:shminfo_shmmax,Linux版の場合はSHMMAX)の指定値については,「21.OSのオペレーティングシステムパラメタの見積もり」を参照してください。

表16-2 HiRDB/シングルサーバが使用するメモリ所要量

項目メモリ所要量(単位:キロバイト)
プロセス固有領域ユニットコントローラ全プロセスが使用するプロセス固有領域●32ビットモードの場合
E+↑{(64+48×(u+1))×(pd_max_server_processの値-b-3)+w}÷1024↑+R
●64ビットモードの場合
E+↑{(64+64×(u+1))×(pd_max_server_processの値-b-3)+w}÷1024↑+R
●プラグインを使用する場合,加算します。
+1400
●非同期READ機能を使用する場合,加算します。
+r
●リアルタイムSANレプリケーションを使用する場合,加算します。
+↑425×(2×b+7)÷1024↑
●pd_process_terminatorオペランドにfixedを指定した場合,加算します。
+F×(pd_process_terminator_maxの値-1)
●インメモリデータ処理を行う場合,加算します。
+↑{K×(pd_max_usersの値×2 + 7)}÷1024↑
●通信トレース格納最大数を変更する場合,加算します。
+ ↑M÷1024↑
シングルサーバプロセスが使用するプロセス固有領域※1pd_work_buff_mode=
each指定時
●32ビットモードの場合
{G+g+(a+9)×c+h+i+m+p+q+s}×(b+3)+↑(64+48×(b+1))÷1024↑×(v+3)+J
●64ビットモードの場合
{G+g+(a+9)×c+h+i+m+p+q+s}×(b+3)+↑(64+64×(b+1))÷1024↑×(v+3)+J
●インメモリデータ処理を行う場合,加算します。
+↑{K×(pd_max_usersの値+3)}÷1024↑
●通信トレース格納最大数を変更する場合,加算します。
+↑P÷1024↑
pd_work_buff_mode=
pool指定又は省略時
●32ビットモードの場合
(G+g+a+9+↑a÷128×0.1↑+11+h+i+m+p+q+s)×(b+3)+n+↑(64+48×(b+1))÷1024↑×(v+3)+J
●64ビットモードの場合
(G+g+a+9+↑a÷128×0.1↑+15+h+i+p+q+s)×(b+3)+n+↑(64+64×(b+1))÷1024↑×(v+3)+J
●インメモリデータ処理を行う場合,加算します。
+↑{K×(pd_max_usersの値+3)}÷1024↑
●通信トレース格納最大数を変更する場合,加算します。
+↑P÷1024↑
共用メモリユニットコントローラ用共用メモリ中,ユニットコントローラが使用する領域↑d÷1024↑
ユニットコントローラ用共用メモリ中,シングルサーバが使用する領域e
グローバルバッファ用共用メモリf
インメモリデータ処理用共用メモリ
ユティリティ用共用メモリt
セキュリティ監査情報用バッファ用共用メモリ●システムによる自動計算の場合
↑0.3+MAX{(H+100),(H×1.2)}×0.25↑
●ユーザ指定値(pd_audit_def_buffer_sizeオペランドを指定)にする場合
pd_audit_def_buffer_sizeの指定値
プロセス間メモリ通信用共用メモリ※2j×k
注※1
プラグインを使用する場合は,1シングルサーバプロセス当たり300を加算してください。
注※2
クライアント環境定義でPDIPC=MEMORYを指定した場合に加算します。プロセス間メモリ通信機能及びクライアント環境定義については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
なお,HiRDBサーバ又はHiRDBクライアントのどちらかが32ビットモードの場合,プロセス間メモリ通信機能で使用する共用メモリは32ビット空間内に確保されます。
a:pd_work_buff_sizeオペランドの値
b:pd_max_usersオペランドの値+pd_max_reflect_process_countオペランドの値
c:最大作業表数
SQL文ごとの作業表数を「表16-3 SQL文ごとの作業表数の求め方」から求めます。表16-3から求めた作業表数のうちで最大のものを最大作業表数とします。
d:「16.1.3 ユニットコントローラが使用する共用メモリの計算式」で求めた値
e:「16.1.4 シングルサーバが使用する共用メモリの計算式」で求めた値
f:「16.1.5 グローバルバッファが使用する共用メモリの計算式」で求めた値
g:SQL実行時に必要なメモリ所要量
計算式については,「16.1.6 SQL実行時に必要なメモリ所要量の計算式」を参照してください。
h:SQL前処理時に必要なメモリ所要量
計算式については,「16.1.7 SQL前処理時に必要なメモリ所要量の計算式」を参照してください。
i:LOBバッファ一括入出力ワークメモリ
グローバルバッファ定義にLOB用グローバルバッファを指定している場合だけ(システム共通定義のpdbufferオペランドに-bを指定している場合),62キロバイトを加算してください。
j:プロセス間メモリ通信機能を使用するクライアントの最大同時実行数
分からない場合は,プロセス間メモリ通信機能を使用する全クライアント数,又はpd_max_usersオペランドの値を代入してください。
k:プロセス間メモリ通信機能を使用する全クライアントのデータ送受信用メモリサイズ(クライアント環境定義のPDSENDMEMSIZEの値+PDRECVMEMSIZEの値)の平均値
m:Java仮想マシンが使用するメモリ所要量
Javaストアドプロシジャ又はJavaストアドファンクションを使用する場合に,Java仮想マシンが使用するメモリ所要量を加算します。Java仮想マシンが使用するメモリ所要量は,Java仮想マシンのオプション(Hewlett-Packard JRE 1.2.2.04の場合は-Xms,-Xmx,-Xmnオプション)やJava仮想マシンのバージョンによって異なります。Java仮想マシンが使用するメモリ所要量については,Java仮想マシンのマニュアルを参照してください。HP-UX版の場合のメモリ所要量の目安を次に示します。
  • Java仮想マシンの起動で8メガバイトの加算が必要です。
  • Java仮想マシンのメモリ最大値(-Xmxオプションの指定値)を加算します。ただし,Java仮想マシンによっては,-Xmxオプション以上のメモリを使用することがあります。
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 8 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文が使用する作業表用ファイルの数の求め方については,「19.3 最大ファイル数の見積もり(pdfmkfs -lコマンド)」を参照してください。
p:BLOB型データ用に必要なメモリ所要量
計算式については,「16.1.8 BLOB型データの検索又は更新時に必要なメモリ所要量の計算式(HiRDB/シングルサーバの場合)」を参照してください。
q:サーバ側でブロック転送又は配列FETCHで必要なメモリ所要量
計算式については,「16.1.9 ブロック転送又は配列FETCHで必要なメモリ所要量の計算式」を参照してください。
r:非同期READ用メモリサイズ
非同期READ機能を使用する場合に加算します。次に示す計算式から求めます(単位:キロバイト)。
(90+
90
Σ RDエリア用HiRDBファイルシステム領域管理用メモリ)
i=1
×pd_max_ard_processの値
RDエリア用HiRDBファイルシステム領域管理用メモリは計算値の大きい順に90領域を計算に使用します。サーバで使用する領域数が90領域に満たない場合,その領域まで計算します。
HiRDBファイルシステム領域管理用メモリはそれぞれの領域の初期設定時のパラメタを使用して,次の計算式から求めます(単位:キロバイト)。
{(ファイル数※1+増分数※2)÷64}×1.5※3
注※1 pdfmkfs -l指定値です。
注※2 pdfmkfs -e指定値です。
注※3 領域サイズ(pdfmkfs -n指定値)が2048以上の場合に乗算します。
s:HiRDBファイルシステム用メモリサイズ
次に示す計算式から求めます(単位:キロバイト)。
347+作業表用HiRDBファイルシステム領域管理用メモリ+
システムログ用HiRDBファイルシステム領域管理用メモリ+
90
ΣRDエリア用HiRDBファイルシステム領域管理用メモリ
i=1
作業表用及びシステムログ用HiRDBファイルシステム領域管理用メモリは,サーバで使用するHiRDBファイルシステム領域で計算値が最大になるものを使用します。RDエリアの場合は計算値の大きい順に90領域を計算に使用します。サーバで使用する領域数が90領域に満たない場合,その領域まで計算します。
HiRDBファイルシステム領域管理用メモリはそれぞれの領域の初期設定時のパラメタを使用して,次の計算式から求めます(単位:キロバイト)。
{(ファイル数※1+増分数※2)÷64}×1.5※3
注※1 pdfmkfs -l指定値です。
注※2 pdfmkfs -e指定値です。
注※3 領域サイズ(pdfmkfs -n指定値)が2048以上の場合に乗算します。
t:pd_utl_exec_modeの値が0の場合:0
pd_utl_exec_modeの値が1の場合:↑{(b×2000+136)÷1024}↑×1024
u:ユニット制御情報定義として有効なpd_module_trace_maxの値
v:シングルサーバ定義として有効なpd_module_trace_maxの値
w:HiRDBの再開始用メモリサイズ
このメモリサイズを確保できないと,HiRDBの再開始に失敗します。次の計算式から求めます(単位:バイト)。
A+B
●pd_dbsync_pointオペランドにcommitを指定している場合,加算します。
+112×((pd_max_usersの値+pd_max_reflect_process_countの値)×2+7)
●pd_inner_replica_controlオペランドに1以上を指定している場合,加算します。
+C
●キャラクタ型スペシャルファイル上に作成されたRDエリアを格納したHiRDBファイルシステム領域数が1001以上の場合に加算します。
+D
HiRDBの再開始用メモリサイズを求める計算に使用する変数を次に示します。
変数
●32ビットモードの場合
246762+4×pd_max_rdarea_noの値
+{48×(pd_max_rdarea_noの値+表数)+304}×((pd_max_usersの値+pd_max_reflect_process_countの値)×2+7)
●64ビットモードの場合
305274+8×pd_max_rdarea_noの値
+{64×(pd_max_rdarea_noの値+表数)+512}×((pd_max_usersの値+pd_max_reflect_process_countの値)×2+7)
表数:62+MAX{pd_max_access_tablesの値,500}
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
C●32ビットモードの場合
(48×pd_inner_replica_controlの値+80)×((pd_max_usersの値+pd_max_reflect_process_countの値)×2+7)
●64ビットモードの場合
(64×pd_inner_replica_controlの値+160)×((pd_max_usersの値+pd_max_reflect_process_countの値)×2+7)
D●32ビットモードの場合
12012×(↑(キャラクタ型スペシャルファイル上に作成されたRDエリアを格納したHiRDBファイルシステム領域数-1000)÷1000↑)
●64ビットモードの場合
16016×(↑(キャラクタ型スペシャルファイル上に作成されたRDエリアを格納したHiRDBファイルシステム領域数-1000)÷1000↑)
E,F,G:固定値
この値はOSによって異なります。OSごとの値を次に示します(単位:キロバイト)。
OSEの値Fの値Gの値
HP-UX(32ビットモード)90,5002,8005,600
HP-UX(32ビットモードのPOSIXライブラリ版)130,0002,8004,900
HP-UX(64ビットモード)92,1002,9006,600
HP-UX (IPF)175,5002,6007,600
AIX(32ビットモード)75,4002,1005,800
AIX(32ビットモードのPOSIXライブラリ版)138,2004,9008,500
AIX(64ビットモード)129,0005,90012,300
Solaris(32ビットモード)79,5001,4003,600
Solaris(32ビットモードのPOSIXライブラリ版)125,1001,7003,300
Solaris(64ビットモード)96,9002,3004,900
Linux(32ビットモード)79,7001,7003,700
Linux (IPF)156,7002,9005,300
Linux (EM64T)132,9006,70010,800
H:セキュリティ監査機能の監査証跡の絞り込み条件で指定したオブジェクトの数
J:シンクポイント出力同期制御情報取得機能使用時に必要なメモリ(単位:バイト)
pd_dbbuff_trace_levelオペランドに1を指定し,かつpd_dfw_awt_processオペランドの指定を省略している場合に,次の値を加算します。
32ビットモードの場合:
320×シングルサーバに定義したグローバルバッファの数
64ビットモードの場合:
640×シングルサーバに定義したグローバルバッファの数
K:pd_max_resident_rdarea_noオペランドに1以上を指定している場合に,次の値を加算します。
1648+16×pd_max_resident_rdarea_noの値+16×pd_max_resident_rdarea_shm_noの値
L:インメモリデータ処理で必要なメモリ所要量
計算式については,「16.1.10 インメモリデータ処理で必要なメモリ所要量」を参照してください。
M:通信トレース処理で必要なメモリ所要量
32ビットモードの場合:
(16×(N-1024)×2)×(pd_max_server_process値-pd_max_users値-3)
64ビットモードの場合:
(32×(N-1024)×2)×(pd_max_server_process値-pd_max_users値-3)
N:ユニット制御情報定義として有効なpd_pth_trace_max値です。オペランド指定値を2のべき乗の値に切り上げた値になります。
P:通信トレース処理で必要なメモリ所要量
32ビットモードの場合:
(16×(Q-1024)×2)×(pd_max_users値+3)
64ビットモードの場合:
(32×(Q-1024)×2)×(pd_max_users値+3)
Q:シングルサーバ定義として有効なpd_pth_trace_max値です。オペランド指定値を2のべき乗の値に切り上げた値になります。
R:シグナルハンドラ用メモリサイズ
HP-UX (IPF)の場合:512
上記以外の場合 :0

表16-3 SQL文ごとの作業表数の求め方

SQL文作業表数の求め方
SELECT文
INSERT文(問合せ指定の場合)
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