18.2.3 DABroker Libraryのメモリ所要量
ここでは,DABroker Libraryのメモリ所要量の計算式について説明します。
DABroker Libraryのメモリ所要量の計算式を次に示します。
メモリ所要量=128+データベース同時接続数 ×〔386+A×{20+B+定義列数×2+C×2+D×E+F×(G+H)}〕+I
- (凡例)
-
- A:並列に使用しているカーソル数
-
並列に使用しているカーソル数は,一つのConnectionオブジェクトから派生して,同時に使用するStatementインスタンス数,PreparedStatementインスタンス数,CallableStatementインスタンス数,ResultSetインスタンス数の総和です。
- B:bufSizeの値
-
JDBCを使用してデータベースに接続するときに指定するbufSizeの値です。
- C:SQLのサイズ
-
SQLのサイズは,KB(キロバイト)単位に切り上げて算出してください。
- D:?パラメタのサイズ
-
?パラメタのサイズは,一つのSQL文に指定する,?パラメタのデータ長の総和です。?パラメタに指定する列属性ごとのデータ長を次の表に示します。
表18‒4 パラメタ長一覧(ネイティブライブラリ内) データベース種別
列属性
データ長(バイト)
備考
HiRDB
INTEGER
12
−
SMALLINT
8
−
LARGE DECIMAL(m, n)
↓(M/2)↓+7
-
Mは指定した値の精度を表します。
-
4バイト単位で切り上げます。
FLOATまたはDOUBLE PRECISION
16
−
SMALLFLTまたはREAL
12
−
CHAR(n),MCHAR(n),NCHAR(n),VARCHAR(n),MVARCHAR(n),NVARCHAR(n)
指定した実データ長+8
4バイト単位で切り上げます。
DATE
16
−
TIME
16
−
TIMESTAMP(p)
p=0,p=2の場合:28
p=4,p=6の場合:32
−
BINARY(n)またはBLOB(n)
指定した実データ長+4
−
ORACLE,Oracle8i
FLOAT
56
−
DATE
64
−
その他のデータ型
指定した実データ長+54
4バイト単位で切り上げます。
-
- E:配列更新の配列数
-
配列更新の配列数は,HiRDBの「配列を使用したINSERT機能」,「配列を使用したUPDATE機能」,または「配列を使用したDELETE機能」を使用する場合はaddBatchメソッドの実行回数,そのほかの場合は1となります。
- F:検索データのサイズ
-
検索データのサイズは,検索する列のデータ長の総和(1行分)です。
ただし,接続するデータベースがOracleであり,CLOB,NCLOB,BLOB,BFILE,LONG LAW,LONGのどれかの列を一つ以上含む検索の場合,検索データのサイズはほかの列に関係なく,bufSizeの値となります。
列属性ごとのデータ長を次の表に示します。
表18‒5 検索する列のデータ長一覧(ネイティブライブラリ内) データベース種別
列属性
データ長(バイト)
備考
HiRDB
INTEGER
4
−
SMALLINT
2
−
LARGE DECIMAL(m, n)
m+2
−
FLOATまたはDOUBLE PRECISION
8
−
SMALLFLTまたはREAL
4
−
CHAR(n)またはMCHAR(n)
n+1
−
NCHAR(n)
n×2+1
−
VARCHAR(n)またはMVARCHAR(n)
n+2
−
NVARCHAR(n)
n×2+2
−
DATE
11
−
TIME
9
−
TIMESTAMP(p)
-
p=0の場合:20
-
p=0以外の場合:21+p
−
BINARY(n)またはBLOB(n)
HiRDBの位置付け子機能を使用する場合
12
−
HiRDBの位置付け子機能を使用しない場合
(nとbufSizeの値を比較してより小さい方の値)+8
bufSizeの値とは,JDBCを使用してデータベースに接続するときに指定するbufSizeの値です。
ORACLE,Oracle8i
NUMBER
44
−
VARCHAR2(n),CHAR(n),VARCHAR2(n)またはNCHAR(n)
n+1
−
MLSLABEL(n)またはRAW(n)
n
−
ROWID
9
−
FLOAT
8
−
DATE
20
−
-
- G:FETCHサイズ
-
FETCHサイズは,Statement,またはResultSetクラスのsetFetchSizeメソッドの指定値です。ただし,指定値が0,または指定を省略した場合は,次のようになります。
-
指定値が0または指定を省略した場合のFETCHサイズ=64KB/検索データのサイズ
計算の結果0になる場合は,1に繰り上げられます。
-
- H:データベース用データ領域
-
データベース用データ領域は,接続データベースがHiRDBの場合は0,そのほかのデータベースの場合は1となります。
- I:JDBCのメモリサイズ
-
JDBCのメモリサイズは,次の値です。
-
JDBCのメモリサイズ=(Connectionオブジェクトサイズ
+Statementオブジェクトサイズ
+ResultSetオブジェクトサイズ
+PreparedStatementオブジェクトサイズ
+CallableStatementオブジェクトサイズ
+?パラメタの実データサイズ
+検索データのトータルサイズ
+SQLサイズ
+bufSizeの値によるデータサイズ
+トレースサイズ)/1,024
-
JDBCのメモリサイズの計算式に使用するデータのサイズについて,(1)から(10)で説明します。
- 〈この項の構成〉
(1) Connectionオブジェクトサイズ
Connection オブジェクトサイズ(単位バイト)の計算式を次に示します。
Connectionオブジェクトサイズ=1223500※1+(80364※1+bufSizeの値※2×1024)×Connectionインスタンス数※3
- 注
-
Connectionオブジェクトサイズとして,次のどちらかのタイミングで「bufSizeに指定した値 × 生成したコネクション数分のメモリ」をJavaヒープ領域に確保します。
-
コネクションプールのウォーミングアップ機能使用時
-
初回getConnection()発行時
bufSizeに必要以上に大きな値を設定すると,Connectionオブジェクトサイズ分のメモリを確保したときにJavaヒープを使い切り,OutOfMemoryErrorが発生するおそれがあります。
HiRDBのBLOB型データやBINARY型データへアクセスする場合は,bufSizeに大きな値を指定しないで,HiRDBの位置付け子機能を使用することを検討してください。HiRDBの位置付け子機能については,マニュアル「HiRDB 解説」を参照してください。
-
- 注※1
-
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。
- 注※2
-
bufSizeのデフォルト値は64です。
- 注※3
-
Connectionインスタンス数とは,同時接続数のことです。
(2) Statementオブジェクトサイズ
Statementオブジェクトサイズ(単位バイト)の計算式を次に示します。
Statementオブジェクトサイズ=1000※1+1400※1×Statementインスタンス数※2
- 注※1
-
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。
- 注※2
-
Statementインスタンス数とは,システム全体で同時に使用するStatement数です。システム全体でStatementオブジェクトを使用しないときは0になります。
(3) ResultSetオブジェクトサイズ
ResultSetオブジェクトサイズは,接続先のデータベースがOracle8i以降で,BLOB,CLOBの列属性がある表を検索した場合と,それ以外の処理を実行した場合で異なります。それぞれの場合の,ResultSetオブジェクトサイズ(単位バイト)の計算式を次に示します。
-
接続先のデータベースがOracle8i以降で,BLOB,CLOBの列属性がある表を検索した場合
ResultSetオブジェクトサイズ=
2400※1+{3400※1+MIN(ROW_SIZEの値※2×1024×1024, BLOBおよびCLOBの実データ長)×2}×ResultSetインスタンス数※3
-
1.以外の処理を実行した場合
ResultSetオブジェクトサイズ=2400※1+3400※1×ResultSetインスタンス数※3
- 注※1
-
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。
- 注※2
-
デフォルト値は16です。
- 注※3
-
ResultSetインスタンス数とは,システム全体で同時に使用するResultSet数です。システム全体で,検索SQLを実行しない,またはResultSetオブジェクトを生成しないときは0になります。
(4) PreparedStatementオブジェクトサイズ
PreparedStatementオブジェクトサイズ(単位バイト)の計算式を次に示します。
PreparedStatementオブジェクトサイズ=
79900※1+4700※1×PreparedStatementインスタンス数※2
- 注※1
-
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。
- 注※2
-
PreparedStatementインスタンス数とは,全体で同時に使用するPreparedStatement数です。システム全体でPreparedStatementオブジェクトを使用しないときは0になります。
(5) CallableStatementオブジェクトサイズ
CallableStatementオブジェクトサイズ(単位バイト)の計算式を次に示します。
CallableStatementオブジェクトサイズ=
65000※1+4700※1×CallableStatementインスタンス数※2
- 注※1
-
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。
- 注※2
-
CallableStatementインスタンス数とは,全体で同時に使用するCallableStatement数です。システム全体でCallableStatementオブジェクトを使用しないときは0になります。
(6) ?パラメタの実データサイズ
?パラメタの実データサイズ(単位バイト)の計算式を次に示します。
?パラメタの実データサイズ=
9000※1+180※1×?パラメタ数※2+?パラメタのトータル長※2
- 注※1
-
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。
- 注※2
-
?パラメタ数と?パラメタのトータル長は,システム全体で同時に指定する,?パラメタ数と?パラメタのトータル長です。?パラメタのトータル長は,実データの長さの総和です。?パラメタに指定する列属性ごとの実データ長を次の表に示します。
表18‒6 パラメタ長一覧(JDBC内) データベース種別
列属性
データ長(バイト)
HiRDB
INTEGER
4
SMALLINT
2
LARGE DECIMAL(m, n)
↓(m/2)↓+1
FLOATまたはDOUBLE PRECISION
8
SMALLFLTまたはREAL
4
上記以外
指定した実データ長
ORACLE,Oracle8i
NUMBER
指定した実データを数値文字列で表現したときの実際の長さ
FLOAT
8
上記以外
指定した実データ長
(7) 検索データのトータルサイズ
検索データのトータルサイズ(単位バイト)は,実際のレコード長+4×(取得する列数+1)を1件のレコード長とし,検索した件数の総和になります。実際のレコード長は列属性ごとの実際のデータ長の総和です。
なお,検索データのトータルサイズは,ResultSetのタイプがスクロール可能のときだけ必要です。それ以外は0になります。
列属性ごとの実際のデータ長を次の表に示します。
データベース種別 |
列属性 |
データ長(バイト) |
---|---|---|
HiRDB |
INTEGER |
4 |
SMALLINT |
2 |
|
LARGE DECIMAL(m, n) |
↓(m/2)↓+1 |
|
FLOATまたはDOUBLE PRECISION |
8 |
|
SMALLFLTまたはREAL |
4 |
|
上記以外 |
データベースに格納している実データ長 |
|
ORACLE,Oracle8i |
NUMBER |
データベースに格納している実データを数値文字列で表現したときの実際の長さ |
FLOAT |
8 |
|
上記以外 |
データベースに格納している実データ長 |
(8) SQLサイズ
実際のSQLのサイズがbufSizeの値×1024バイト以上のときだけ必要です。それ以外は0になります。なお,bufSizeのデフォルト値は64です。
(9) bufSizeの値によるデータサイズ
bufSizeの値によるデータサイズ(単位バイト)の計算式を次に示します。なお,計算式は,受信バッファプール数指定機能の使用の有無によって異なります。
-
受信バッファプール数指定機能を使用しない場合
データサイズ=bufSizeの値※×1024
×(同一コネクション内に存在する,検索SQL以外を実行するStatementインスタンス数
+同一コネクション内に存在する,検索SQL以外を実行するPreparedStatementインスタンス数
+同一コネクション内に存在する,CallableStatementインスタンス数
+同一コネクション内に存在する,ResultSetインスタンス数)
-
受信バッファプール数指定機能を使用する場合
データサイズ=bufSizeの値※×1024
×(同一コネクション内で同時に使用する,検索SQL以外を実行するStatementインスタンス数
+同一コネクション内で同時に使用する,検索SQL以外を実行するPreparedStatementインスタンス数
+同一コネクション内で同時に使用する,CallableStatementインスタンス数
+同一コネクション内で同時に存在する,ResultSetインスタンス数)
注※ bufSizeのデフォルト値は64です。
(10) トレースサイズ
トレースサイズの計算式(単位バイト)を次に示します。
トレースサイズ=2048×メモリ情報取得量
メモリ情報取得量とは,環境変数DAB_ONMEMNUMの値です。デフォルト値は1000です。