Hitachi

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


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オブジェクトサイズ(単位バイト)の計算式を次に示します。

  1. 接続先のデータベースがOracle8i以降で,BLOB,CLOBの列属性がある表を検索した場合

    ResultSetオブジェクトサイズ=

    2400※1+{3400※1+MIN(ROW_SIZEの値※2×1024×1024, BLOBおよびCLOBの実データ長)×2}×ResultSetインスタンス数※3

  2. 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になります。

列属性ごとの実際のデータ長を次の表に示します。

表18‒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です。