Cosminexus V9 アプリケーションサーバ 機能解説 互換編

[目次][用語][索引][前へ][次へ]

4.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文に指定する,?パラメタのデータ長の総和です。?パラメタに指定する列属性ごとのデータ長を次の表に示します。

表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)
  • 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オブジェクトサイズ
(2) Statementオブジェクトサイズ
(3) ResultSetオブジェクトサイズ
(4) PreparedStatementオブジェクトサイズ
(5) CallableStatementオブジェクトサイズ
(6) ?パラメタの実データサイズ
(7) 検索データのトータルサイズ
(8) SQLサイズ
(9) bufSizeの値によるデータサイズ
(10) トレースサイズ

(1) Connectionオブジェクトサイズ

Connection オブジェクトサイズ(単位バイト)の計算式を次に示します。

Connectionオブジェクトサイズ=12235001+(803641+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オブジェクトサイズ=10001+14001×Statementインスタンス数2

注※1
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。

注※2
Statementインスタンス数とは,システム全体で同時に使用するStatement数です。システム全体でStatementオブジェクトを使用しないときは0になります。

(3) ResultSetオブジェクトサイズ

ResultSetオブジェクトサイズは,接続先のデータベースがOracle8i以降で,BLOB,CLOBの列属性がある表を検索した場合と,それ以外の処理を実行した場合で異なります。それぞれの場合の,ResultSetオブジェクトサイズ(単位バイト)の計算式を次に示します。

  1. 接続先のデータベースがOracle8i以降で,BLOB,CLOBの列属性がある表を検索した場合
    ResultSetオブジェクトサイズ=
    24001+{34001+MIN(ROW_SIZEの値2×1024×1024, BLOBおよびCLOBの実データ長)×2}×ResultSetインスタンス数3
  2. 1.以外の処理を実行した場合
    ResultSetオブジェクトサイズ=24001+34001×ResultSetインスタンス数3
    注※1
    オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。
    注※2
    デフォルト値は16です。
    注※3
    ResultSetインスタンス数とは,システム全体で同時に使用するResultSet数です。システム全体で,検索SQLを実行しない,またはResultSetオブジェクトを生成しないときは0になります。

(4) PreparedStatementオブジェクトサイズ

PreparedStatementオブジェクトサイズ(単位バイト)の計算式を次に示します。

PreparedStatementオブジェクトサイズ=

799001+47001×PreparedStatementインスタンス数2

注※1
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。

注※2
PreparedStatementインスタンス数とは,全体で同時に使用するPreparedStatement数です。システム全体でPreparedStatementオブジェクトを使用しないときは0になります。

(5) CallableStatementオブジェクトサイズ

CallableStatementオブジェクトサイズ(単位バイト)の計算式を次に示します。

CallableStatementオブジェクトサイズ=

650001+47001×CallableStatementインスタンス数2

注※1
オブジェクトを構成する大きさであり,実行するプラットフォームおよびJDKのバージョンにより若干値が異なる場合があります。

注※2
CallableStatementインスタンス数とは,全体で同時に使用するCallableStatement数です。システム全体でCallableStatementオブジェクトを使用しないときは0になります。

(6) ?パラメタの実データサイズ

?パラメタの実データサイズ(単位バイト)の計算式を次に示します。

?パラメタの実データサイズ=

90001+1801×?パラメタ数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の値によるデータサイズ(単位バイト)の計算式を次に示します。なお,計算式は,受信バッファプール数指定機能の使用の有無によって異なります。

(10) トレースサイズ

トレースサイズの計算式(単位バイト)を次に示します。

トレースサイズ=2048×メモリ情報取得量

メモリ情報取得量とは,環境変数DAB_ONMEMNUMの値です。デフォルト値は1000です。