2.40 CLIENT_PREFETCH_ROWS

CLIENT_PREFETCH_ROWSを使用すると、クライアントは、問合せ結果セットの行のフェッチ中に必要なラウンドトリップ数を減らすことができます。

特性 説明

パラメータ・タイプ

整数

デフォルト値

0 (クライアント側の設定のみが適用されます)

変更可能

ALTER SESSIONALTER SYSTEM

PDBで変更可能

はい

値の範囲

0からUB4MAXVAL (通常は4294967295)

UB4MAXVALは、publicディレクトリにあるoratypes.hヘッダー・ファイルで定義されます。この値は、使用しているオペレーティング・システムによって異なる場合があります。

基本

いいえ

CLIENT_PREFETCH_ROWSは、クライアント・アプリケーションを変更せずに、Oracleクライアント・ドライバによってプリフェッチされる行数を指定します。クライアント・ドライバは、問合せの実行が成功するたび、データベースに送信される後続のフェッチ・リクエストごとに、プリフェッチされた行をバッファリングします。

このパラメータは、Oracle Call Interface (OCI)を使用してデータベースに接続するクライアントにのみ適用されます。

このパラメータは、すべてのプラットフォームでOracle Instant Client/Oracle Database Client 19.17 (以降)および21.8 (以降)にのみ適用されます。

CLIENT_PREFETCH_ROWSパラメータは、ALTER SESSIONまたはALTER SYSTEMで設定できます。ALTER SESSIONを使用してパラメータ値が変更された場合、新しい値は、後続の結果セット・フェッチでその特定のセッションに対して有効になります。ALTER SYSTEMを使用してパラメータ値が変更された場合、新しい値は、ALTER SYSTEMコマンドの後に作成された接続で実行される文に対して有効になります。

たとえば、CLIENT_PREFETCH_ROWSが100に設定され、クライアント・アプリケーションが10行のフェッチを要求した場合、合計110行がクライアント・ドライバに返されます。110行中の最初の10行がアプリケーションに与えられ、クライアント・ドライバは残りの100行を内部的にバッファリングします。クライアント・アプリケーションから次の10行がフェッチされ、フェッチ反復ごとに10行がそれぞれ、クライアント・ドライバによって内部的にバッファされる100行から処理できます。このプロセスにより、データベースとの間の必要なネットワーク・ラウンドトリップの数が削減されます。この例では、11番目のフェッチで、新しいネットワーク・ラウンドトリップが発生し、結果セットが使い果たされておらず、サイクルが繰り返されているかぎり、データベースは110行の次のバッチを返します。

CLIENT_PREFETCH_ROWSの設定に関するノート:

  • CLIENT_PREFETCH_ROWSがゼロ以外の値に設定されている場合、その値はプリフェッチ行数のデフォルトのOCI_ATTR_PREFETCH_ROWS値よりも優先されます。

  • OCI_ATTR_PREFETCH_ROWS値がデフォルト以外の値に設定されている場合、プリフェッチ行数のCLIENT_PREFETCH_ROWS値は無視されます。

  • OCIAttrSet()CLIENT_PREFETCH_ROWSを使用する場合:

    OCI_ATTR_PREFETCH_ROWSは、プリフェッチする最上位行の数を設定します。デフォルト値は1行です。ただし、CLIENT_PREFETCH_ROWSが設定されている場合、プリフェッチされる最上位行の数は、次の優先順位によって決定されます。

    1. OCIAttrSet()関数またはoraaccess.xmlを使用してOCI_ATTR_PREFETCH_ROWS属性を値'1'として設定すると、データベース初期化パラメータのCLIENT_PREFETCH_ROWS値が優先され、プリフェッチされる最上位行の数が決定されます。

    2. OCIAttrSet()関数またはoraaccess.xmlを使用してOCI_ATTR_PREFETCH_ROWS属性を1以外の値'x'として設定すると、'x'個の最上位行がプリフェッチされ、データベース初期化パラメータCLIENT_PREFETCH_ROWSは無視されます。

    3. OCIAttrSet()またはoraaccess.xmlを使用してOCI_ATTR_PREFETCH_ROWS値を設定しない場合、データベース初期化パラメータのCLIENT_PREFETCH_ROWS値が優先され、プリフェッチされる最上位行の数が決定されます。

  • OCIAttrGet()CLIENT_PREFETCH_ROWSを使用する場合:

    関数OCIAttrGet()は、OCI_ATTR_PREFETCH_ROWSoraaccess.xmlおよびデータベース初期化パラメータCLIENT_PREFETCH_ROWSから設定された有効なプリフェッチ行の値を返します。OCI_ATTR_PREFETCH_MEMORY値が設定されている場合、OCIAttrGet()によって返される値は、最終的なプリフェッチ行の値ではない可能性があり、OCI_ATTR_PREFETCH_MEMORY属性で指定されたメモリー値で許可される最大行数に制限される場合があります。

ノート:

このパラメータは、Oracle Database 23ai以降で使用できます。

関連項目:

結果のフェッチおよびプリフェッチ数の設定、OCI_ATTR_PREFETCH_MEMORYおよびOCI_ATTR_PREFETCH_ROWS属性、およびOCIAttrGet()およびOCIAttrSet()関数の詳細は、Oracle Call Interface開発者ガイドを参照してください。