Cosminexus V9 アプリケーションサーバ 機能解説 互換編
ここでは,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文に指定する,?パラメタのデータ長の総和です。?パラメタに指定する列属性ごとのデータ長を次の表に示します。
表4-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の値となります。
- 列属性ごとのデータ長を次の表に示します。
表4-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) |
|
− |
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オブジェクトサイズ
- (2) Statementオブジェクトサイズ
- (3) ResultSetオブジェクトサイズ
- (4) PreparedStatementオブジェクトサイズ
- (5) CallableStatementオブジェクトサイズ
- (6) ?パラメタの実データサイズ
- (7) 検索データのトータルサイズ
- (8) SQLサイズ
- (9) bufSizeの値によるデータサイズ
- (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
- ?パラメタ数と?パラメタのトータル長は,システム全体で同時に指定する,?パラメタ数と?パラメタのトータル長です。?パラメタのトータル長は,実データの長さの総和です。?パラメタに指定する列属性ごとの実データ長を次の表に示します。
表4-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になります。
列属性ごとの実際のデータ長を次の表に示します。
表4-7 検索する列のデータ長一覧(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 |
上記以外 |
データベースに格納している実データ長 |
(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です。
トレースサイズの計算式(単位バイト)を次に示します。
トレースサイズ=2048×メモリ情報取得量
メモリ情報取得量とは,環境変数DAB_ONMEMNUMの値です。デフォルト値は1000です。
All Rights Reserved. Copyright (C) 2012, 2015, Hitachi, Ltd.