6.8.1 クライアントライブラリのメモリ容量の見積もり方法
クライアントライブラリのメモリ容量の見積もりについて説明します。
1接続当たりでのSQL実行時に使用するクライアントライブラリのメモリ容量を次に示します。
クライアントライブラリのメモリ容量(単位:バイト)= クライアントライブラリの管理情報長 +複数接続機能のハンドル情報長 +送信バッファ長 +受信バッファ長 +ブロック転送機能の管理バッファ長 +カーソルの管理バッファ長
それぞれの項目について,以降で説明します。
- 〈この項の構成〉
(1) クライアントライブラリの管理情報長
次の値を加算します。
-
32ビットモードの環境の場合:10970
-
64ビットモードの環境の場合:11390
(2) 複数接続機能のハンドル情報長
複数接続機能を使用する場合,次の値を加算します。
-
32ビットモードの環境の場合:2620
-
64ビットモードの環境の場合:2856
(3) 送信バッファ長
送信バッファ長の見積もり式を次に示します。
なお,複数のSQL文を実行する場合は,SQL文ごとに送信バッファ長を求め,その最大値を使用します。
送信バッファ長=↑送信電文長÷4096↑×4096
- 送信電文長
-
見積もり式を次に示します。
送信電文長は最大2ギガバイト(2,147,483,647バイト)まで指定できます。
(a) CONNECT実行時
送信電文長= ↑(896+(106×ユーザ任意接続情報の指定数) +一時表用RDエリア情報長)÷4↑×4
- ユーザ任意接続情報の指定数
-
CONNECT文の実行前にDECLARE AUDIT INFO SETでユーザ任意接続情報を設定した場合に加算します。
- 一時表用RDエリア情報長
-
クライアント環境変数PDTMPTBLRDAREAを指定した場合に加算します。
見積もり式を次に示します。
一時表用RDエリア情報長= 6+↑PDTMPTBLRDAREA指定長÷2↑×2
(b) そのほかのSQL実行時
送信電文長= ↑(920+(106×ユーザ任意接続情報の指定数) +SQL文長 +入力パラメタ情報長 +出力パラメタ情報長 +入力文字集合名記述領域長 +出力文字集合名記述領域長 )÷4↑×4
- ユーザ任意接続情報の指定数
-
SQL文の実行前にDECLARE AUDIT INFO SETでユーザ任意接続情報を設定した場合に加算します。
- SQL文長
-
SQL文長です。文字コード変換機能を使用する場合は,文字コード変換後の長さとなります。ただし,クライアント環境定義PDCLTCNVMODEにUOCを指定した場合は,SQL文長にPDCLTCNVBYTERATIOの値を乗算した値を加算します。
- 入力パラメタ情報長
-
入力パラメタがある場合に加算します。
クライアント環境定義PDCURSORLVLに2を指定した場合で,SELECT文にWHERE句を指定しているときは,カーソルオープン後の1回目のFETCH実行時にWHERE句に指定した入力パラメタ情報長を加算してください。
見積もり式を次に示します。
入力パラメタ情報長= 入力パラメタ数 (16 + Σ (16+入力データ長i )) i=1 ×配列数 +標識変数長
- 入力パラメタ数
-
入力したパラメタの個数です。
- 入力データ長
-
入力データがある場合に,入力データの定義長を加算します。各データの定義長については,「SQLのデータ型とデータ記述」を参照してください。
なお,文字コード変換機能を使用する場合で,入力データのデータ型がCHAR,VARCHAR,NCHAR,NVARCHAR,MCHAR,又はMVARCHARのときは,次の表に示す値を加算します。
PDCLTCNVMODE
加算する値
UTF8_TXT,UTF8MS_TXT
ユーザ定義長
UOC
ユーザ定義長×PDCLTCNVBYTERATIOの指定値
上記以外
ユーザ定義長×3
- 配列数
-
配列を使用したSQLを実行する場合に乗算します。
- 標識変数長
-
標識変数を指定したパラメタ数分を加算します。値は入力データのデータ型によって異なります。
-
BLOB,BINARY,BLOB位置付け子,又はBINARY位置付け子の場合:4
-
上記以外の場合:2
また,配列を使用したSQLを実行する場合は,配列数分を乗算します。
-
- 出力パラメタ情報長
-
出力パラメタがある場合に加算します。
見積もり式を次に示します。
出力パラメタ情報長= 16+16×出力パラメタ数
- 出力パラメタ数
-
検索系SQL実行時の検索列数,又はOUTパラメタとINOUTパラメタの合計数となります。
- 入力文字集合名記述領域長
-
入力パラメタに対する文字集合名記述領域の指定がある場合に加算します。
見積もり式を次に示します。
入力文字集合名記述領域長= 32+2×文字集合名記述領域のSQLCVARNの指定値 +64×文字集合名記述領域のSQLCSNDの指定値
- 出力文字集合名記述領域長
-
出力パラメタに対する文字集合名記述領域の指定がある場合に加算します。
見積もり式は,入力文字集合名記述領域長の見積もり式と同じです。
(4) 受信バッファ長
受信バッファ長の見積もり式を次に示します。
なお,複数のSQL文を実行する場合は,SQL文ごとに受信バッファ長を求め,その最大値を使用します。
受信バッファ長=↑受信電文長÷4096↑×4096
- 受信電文長
-
受信電文長は最大2ギガバイト(2,147,483,647バイト)まで指定できます。
見積もり式を次に示します。
(a) CONNECT実行時
受信電文長:836
(b) DISCONNECT実行時
受信電文長:1388
(c) そのほかのSQL実行時
受信電文長= ↑(196+↑(656 +入力パラメタ情報格納長 +出力パラメタ情報格納長 +入力文字集合名記述領域情報格納長 +出力文字集合名記述領域情報格納長 +列名記述領域情報格納長 +型名記述領域情報格納長 )÷36864↑×36864※ )÷4↑×4
- 注※
-
アクセスパス情報又は中間結果情報を取得する場合は36キロバイトで切り上げます。
- 入力パラメタ情報格納長
-
入力パラメタ情報を受け取る場合に加算します。
見積もり式を次に示します。
入力パラメタ情報格納長= 16+16×入力パラメタ情報格納数
- 入力パラメタ情報格納数
-
DESCRIBE INPUT文又はPREPARE文のINPUT句に指定したSQL記述領域の入力?パラメタ数(SQL記述領域のSQLDの指定値)となります。
- 出力パラメタ情報格納長
-
出力データ又は出力パラメタ情報を受け取る場合に加算します。
見積もり式を次に示します。
出力パラメタ情報長= 出力パラメタ数 (16 + Σ (16+出力データ長i )) i=1 ×配列数 +標識変数長
- 出力パラメタ数
-
検索系SQL実行時の検索列数,OUTパラメタ及びINOUTパラメタの合計数,DESCRIBE OUTPUT文又はPREPARE文のOUTPUT句に指定したSQL記述領域の出力?パラメタ数(SQL記述領域のSQLDの指定値)となります。
- 出力データ長
-
出力データがある場合に,出力データの定義長を加算します。各データの定義長については,「SQLのデータ型とデータ記述」を参照してください。
なお,文字コード変換機能を使用する場合で,出力データのデータ型がCHAR,VARCHAR,NCHAR,NVARCHAR,MCHAR,又はMVARCHARのときは,次の表に示す値を加算します。
PDCLTCNVMODE
加算する値
UTF8_TXT,UTF8MS_TXT,
UCS2_UJIS,UCS2_UJIS2,UCS2_UTF8
ユーザ定義長
UJIS,UJIS2,
UTF8,UTF8MS,UTF8_EX,UTF8_EX2
ユーザ定義長×3
UOC
ユーザ定義長×PDCLTCNVBYTERATIOの指定値
- 配列数
-
配列を使用したSQLを実行する場合に乗算します。
- 標識変数長
-
標識変数を取得するパラメタ数分を加算します。値は出力データのデータ型によって異なります。
-
BLOB,BINARY,BLOB位置付け子,又はBINARY位置付け子の場合:4
-
上記以外の場合:2
また,配列を使用したSQLを実行する場合は,配列数分を乗算します。
-
- 出力パラメタ情報格納長(ブロック転送機能使用時)
-
ブロック転送機能を使用する場合は,次に示す見積もり式で出力パラメタ格納情報長を算出します。
出力パラメタ情報格納長(ブロック転送機能使用時)= (4×1回の通信で転送する行数×検索列数) +MAX(出力パラメタ情報格納長×PDBLKF,PDBLKBUFFSIZE×1024)
- 1回の通信で転送する行数
-
「1回の通信で転送する行数」を参照してください。
- 検索列数
-
検索系SQL実行時の検索列数です。
- 出力パラメタ情報格納長
-
前述の「出力パラメタ情報格納長」の見積もり式で算出します。
- PDBLKF
-
クライアント環境変数PDBLKFの指定値です。指定していない場合は1となります。
- PDBLKBUFFSIZE
-
クライアント環境変数PDBLKBUFFSIZEの指定値です。指定していない場合は0となります。
- 入力文字集合名記述領域情報格納長
-
入力パラメタ情報の文字集合名記述領域情報を受け取る場合に加算します。
見積もり式を次に示します。
入力文字集合名記述領域情報格納長= 32+2×文字集合名記述領域のSQLCVARNの指定値 +64×文字集合名記述領域のSQLCSNDの指定値
- 出力文字集合名記述領域情報格納長
-
出力パラメタ情報の文字集合名記述領域情報を受け取る場合に加算します。
見積もり式は,入力文字集合名記述領域情報格納長の見積もり式と同じです。
- 列名記述領域情報格納長
-
列名記述領域情報を受け取る場合に加算します。
見積もり式を次に示します。
列名記述領域情報格納長= 2+32×SQL記述領域のSQLNの指定値
- 型名記述領域情報格納長
-
型名記述領域情報を受け取る場合に加算します。
見積もり式を次に示します。
型名記述領域情報格納長= 2+42×SQL記述領域のSQLNの指定値
(5) ブロック転送機能の管理バッファ長
ブロック転送機能を使用する場合に加算します。
見積もり式を次に示します。
ブロック転送機能の管理バッファ長= (ブロック転送機能の管理情報 +出力パラメタ情報長 +出力文字集合名記述領域長 +受信電文長) ×カーソル数
- ブロック転送機能の管理情報
-
次の値を加算します。
-
32ビットモードの環境の場合:156
-
64ビットモードの環境の場合:184
-
- 出力パラメタ情報長
-
「送信バッファ長」の「そのほかのSQL実行時」の「出力パラメタ情報長」の見積もり式で算出します。
- 出力文字集合名記述領域長
-
「送信バッファ長」の「そのほかのSQL実行時」の「出力文字集合名記述領域長」の見積もり式で算出します。
- 受信電文長
-
「受信バッファ長」の「そのほかのSQL実行時」の受信電文長の見積もり式で算出します。
- カーソル数
-
同時にオープンするカーソル数です。
(6) カーソルの管理バッファ長
クライアント環境定義PDCURSORLVLに1,又は2を指定した場合に加算します。
見積もり式を次に示します。
カーソルの管理バッファ長= (カーソルオープン及びカーソルクローズの管理情報 +入力パラメタ情報長 +入力文字集合名記述領域長 +SQL文(SELECT文)長) ×カーソル数
- カーソルオープン及びカーソルクローズの管理情報
-
次の値を加算します。
-
32ビットモードの環境の場合:200
-
64ビットモードの環境の場合:216
-
- 入力パラメタ情報長
-
「送信バッファ長」の「そのほかのSQL実行時」の「入力パラメタ情報長」の見積もり式で算出します。
- 入力文字集合名記述領域長
-
「送信バッファ長」の「そのほかのSQL実行時」の「入力文字集合名記述領域長」の見積もり式で算出します。
- SQL文(SELECT文)長
-
SQL文(SELECT文)長です。文字コード変換機能を使用する場合でも,文字コード変換前の長さとなります。
- カーソル数
-
同時にオープンするカーソル数です。