スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

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

4.7 ブロック転送機能

<この節の構成>
(1) 機能概要
(2) 使用方法
(3) サーバ,クライアント間の通信バッファサイズの指定
(4) 1回の通信で転送する行数
(5) 注意事項

(1) 機能概要

ブロック転送は,HiRDBシステムからHiRDBクライアントにデータを転送するときに,任意の行数単位で転送する機能です。HiRDBクライアントからHiRDBシステムにアクセスし,大量のデータを検索する場合に有効です。

ブロック転送機能の概要を次の図に示します。

図4-61 ブロック転送機能の概要

[図データ]

(2) 使用方法

ブロック転送機能は,次の条件を両方とも満たす場合に実行されます。

  1. クライアント環境定義PDBLKFに2以上の値を指定している場合,又はPDBLKBUFFSIZEに1以上の値を指定している場合
  2. FETCH文を指定している場合(ただし,次のどれかの条件に該当する場合を除きます)
    • カーソルを使用した更新
    • BLOB型の選択式がある検索
    • クライアント環境定義PDBINARYBLKFがNOで,かつ定義長が32,001バイト以上のBINARY型の選択式がある検索
    • BLOB位置付け子型,又はBINARY位置付け子型の変数を使用して結果を受け取る検索で,かつホールダブルカーソルを使用した検索

(3) サーバ,クライアント間の通信バッファサイズの指定

クライアント環境定義PDBLKBUFFSIZEで,サーバ,クライアント間で使用する通信バッファのサイズを指定できます。

取り出す行数(PDBLKFの指定値)が大きい場合の検索で,PDBLKBUFFSIZEを指定すると,サーバ側が指定値以上に通信バッファメモリを割り当てることを抑止します。ただし,1行転送する分の通信バッファメモリは確保します。

サーバ,クライアント間の通信バッファのメモリ計算式については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」の「ブロック転送又は配列FETCHで必要なメモリ所要量の計算式」を参照してください。

(4) 1回の通信で転送する行数

ブロック転送機能を使用した場合,1回の通信で転送する行数を次に示します。

PDBLKFの指定値 PDBLKBUFFSIZEの指定値
0 1以上
1 ブロック転送機能は適用されません。 行数=MIN(X,4096)

X:
次の条件式を満たすnの最大値(指定したバッファサイズに格納できる行の数)となります。ただし,(a-b)<ciの場合は1となります(iは1)。
     n
(a-b)≧Σci (単位:バイト)
     i=1
ci:FETCH文で受け取る検索結果中の,i行目のデータ長
a:指定したバッファサイズ(PDBLKBUFFSIZEの値×1024)
b:ヘッダ情報など(864+22×d+2×e)
bの計算式中のd及びeの内容を次に示します。
d:SELECT句で指定する検索項目数
e:SELECT句で指定する検索項目での,BINARY型の選択式の数
2以上 行数=PDBLKFの値 行数=MIN(X,Y)
X:指定したバッファサイズに格納できる行の数(上記のXと同じ)
Y:PDBLKFの値

注※
実行するSQLによっては,算出した行数より多く転送することがあります。

(5) 注意事項

  1. 次の事象が発生した場合,検索処理を中断して,それまでに検索したデータを返します。
    • 検索中に警告エラーが発生した場合(警告情報とそれまでに検索したデータを返します)
    • リストを介した検索で,リスト作成時にあった行が削除,又は属性値が削除,更新された場合(該当する事象を示すリターンコードの情報(SQLCODE=+110)とそれまでに検索したデータを返します)
    注※
    警告エラーが発生しても検索処理を中断しない場合があります。中断しない場合,指定行数まで検索処理を続けて,検索中に発生したすべての警告エラーの情報と検索データを返します。
  2. ブロック転送機能では,1回の転送行数を多くすることで通信オーバヘッドが減少するので検索時間を短縮できますが,所要メモリが増加するので使用時には注意が必要です。クライアント環境定義PDBLKBUFFSIZEを指定すると,通信バッファに使用するメモリサイズを一定値以下に抑えられます。ただし,値が小さ過ぎると,通信回数が削減されないため,ブロック転送機能の効果がなくなります。
  3. ブロック転送機能を使用していて,一つのカーソルの検索結果を複数のFETCH文で受け取る場合,それぞれのFETCH文には同じ埋込み変数を指定するか,又は同じ属性の埋込み変数を指定してください。異なる属性の埋込み変数で検索結果を受け取ろうとするとエラーになります。