オーバーヘッド削減のための行ブロッキングの指定
行ブロッキングは、すべてのステートメントおよびデータ・タイプ (LOB データ・タイプを含む) においてサポートされます。行ブロッキングにより、単一の操作で複数の行からなるブロックを取り出して、カーソルにおけるデータベース・マネージャーのオーバーヘッドを削減します。
このタスクについて
行のブロックとは、メモリー内のページ数を表します。 これは、ディスク上のエクステントに物理的にマップされるマルチディメンション・クラスタリング (MDC) 表ブロックや挿入時クラスタリング (ITC) 表ブロックではありません。
行ブロッキングは、BIND コマンドまたは PREP コマンドの以下のオプションによって指定されます。
- BLOCKING ALL
- FOR READ ONLY 節で宣言されているカーソルや、FOR UPDATE として指定されていないカーソルがブロック化されます。
- BLOCKING NO
- カーソルはブロック化されません。
- BLOCKING UNAMBIG
- FOR READ ONLY 節で宣言されているカーソルがブロック化されます。 FOR READ ONLY 節または FOR UPDATE 節で宣言されていない、未確定ではなく読み取り専用であるカーソルはブロック化されます。 未確定カーソルはブロック化されません。
ブロック・サイズ計算の間、以下のデータベース・マネージャー構成パラメーターが使用されます。
- aslheapsz パラメーターでは、ローカル・アプリケーションのアプリケーション・サポート層ヒープのサイズを指定します。 ブロック・カーソルがオープンされているとき、入出力ブロック・サイズを決定するのに 使用されます。
- rqrioblk パラメーターでは、リモート・アプリケーションとデータベース・サーバー上のデータベース・エージェントとの間の通信バッファーのサイズを指定します。 ブロック・カーソルがオープンされているとき、データ・サーバー・ランタイム・クライアントの入出力ブロック・サイズを決定するのにも使用されます。
LOB データ・タイプに対して行データのブロッキングを有効にする前に、システム・リソースに対する影響について理解しておくことは重要です。 LOB 列が戻されたときに、サーバーでは LOB 値への参照を各データ・ブロックに保管するために多くの共有メモリーが消費されます。 このような参照の数は、rqrioblk 構成パラメーターの値によって異なります。
ヒープに割り振るメモリー量を増やすには、以下のようにして database_memory データベース構成パラメーターを変更します。
- その値を AUTOMATIC に設定する。
- 現在、パラメーターがユーザー定義の数値に設定されている場合は、256 ページずつその値を増やす。
LOB 値を参照する既存の組み込み SQL アプリケーションのパフォーマンスを向上させるには、 BIND コマンドを使用し、 BLOCKING ALL 節または BLOCKING UNAMBIG 節のいずれかを指定してブロッキングを要求することにより、アプリケーションを再バインドします。 組み込みアプリケーションは、行のブロックがサーバーから取り出されてから、一度に 1 行ずつ LOB 値を取り出します。 ユーザー定義関数 (UDF) が LOB 結果を戻すと、サーバー上で大量のメモリーが消費されている場合に、 Db2® サーバーが LOB データの単一行検索に戻る可能性があります。
プロシージャー
行ブロッキングを指定するには、次のようにします。