4.2 バルク・フェッチを使用したデータ転送の最適化
バルク・フェッチを使用してデータ転送を最適化できます。
アプリケーションで異機種間サービスを使用してOracle以外のシステムからデータをフェッチする場合、データは次のように転送されます。
- Oracle以外のシステムからエージェント・プロセスへ
- エージェント・プロセスからOracle Databaseへ
- Oracle Databaseからアプリケーションへ
Oracle Databaseでは、図4-1に示すように3つのデータ転送がすべて最適化されます。
- OCI、Oracleプリコンパイラまたは他のツールを使用した配列フェッチ
アプリケーションとOracle Database間のデータ転送は、配列フェッチを使用して最適化できます。 - Oracle Databaseとエージェント間の配列フェッチの制御
Oracle DatabaseがOracle以外のシステムからデータを取得する場合、異機種間サービスのHS_RPC_FETCH_SIZE
初期化パラメータにより、エージェントとOracle Database間のフェッチごとに送信されるバイト数が定義されます。 - エージェントとOracle以外のシステム間の配列フェッチの制御
Oracle以外のシステムから取得される行数は、HS_FDS_FETCH_ROWS
初期化パラメータにより決定されます。 - 配列フェッチの再ブロック化の制御
エージェントは、HS_RPC_FETCH_SIZE
初期化パラメータの値により定義されたサイズ単位で、エージェントとOracle Database間のデータを再ブロック化します。
親トピック: 異機種間サービス・エージェントの使用
4.2.1 OCI、Oracleプリコンパイラまたは他のツールを使用した配列フェッチ
アプリケーションとOracle Database間のデータ転送は、配列フェッチを使用して最適化できます。
配列フェッチの詳細と、各ネットワーク・ラウンドトリップで送信されるデータ量の指定方法は、アプリケーション開発ツールのマニュアルを参照してください。
親トピック: バルク・フェッチを使用したデータ転送の最適化
4.2.2 Oracle Databaseとエージェント間の配列フェッチの制御
Oracle DatabaseがOracle以外のシステムからデータを取得する場合、異機種間サービスのHS_RPC_FETCH_SIZE
初期化パラメータにより、エージェントとOracle Database間のフェッチごとに送信されるバイト数が定義されます。
エージェントは、次のいずれかが発生するまでOracle以外のシステムからデータをフェッチします。
- Oracle Databaseへの送信分として指定のバイト数が累積された場合。
- Oracle以外のシステムから結果セットの最終行がフェッチされた場合。
親トピック: バルク・フェッチを使用したデータ転送の最適化
4.2.3 エージェントとOracle以外のシステム間の配列フェッチの制御
Oracle以外のシステムから取得される行数は、HS_FDS_FETCH_ROWS
初期化パラメータにより決定されます。
エージェントでは配列フェッチがサポートされる必要があることに注意してください。エージェント固有のマニュアルを参照し、エージェントで配列フェッチがサポートされることを確認してください。
親トピック: バルク・フェッチを使用したデータ転送の最適化
4.2.4 配列フェッチの再ブロック化の制御
エージェントはOracle Databaseとの間で、HS_RPC_FETCH_SIZE
初期化パラメータの値により定義されたサイズ単位でデータを再ブロック化します。
デフォルトでは、エージェントはシステムへの送信分として十分なデータを取得するまで、Oracle以外のシステムからデータをフェッチします。つまり、Oracle以外のシステムからフェッチされたバイト数がHS_RPC_FETCH_SIZE
初期化パラメータの値以上になるまで、フェッチが続行されます。
Oracle以外のシステムで配列フェッチがサポートされる場合は、配列フェッチによりOracle以外のシステムからフェッチしたデータを、HS_RPC_FETCH_SIZE
初期化パラメータの正確な値に達するまで待たずにOracle Databaseに即時に送信できます。Oracle以外のシステムからOracle Databaseにデータをストリームし、HS_RPC_FETCH_REBLOCKING
初期化パラメータの値をOFF
に設定して再ブロック化を無効にできます。
たとえば、HS_RPC_FETCH_SIZE
を64 KB、HS_FDS_FETCH_ROWS
を100行に設定するとします。また、各行のサイズが約600バイトであるとすると、100行では約60 KBになります。HS_RPC_FETCH_REBLOCKING
初期化パラメータをON
に設定すると、エージェントはOracle以外のシステムから100行のフェッチを開始します。
エージェントにはデータが60KBしかないため、データはOracle Databaseに送信されません。かわりに、エージェントはOracle以外のシステムから次の100行をフェッチします。これでエージェントにあるデータが120KBになったため、最初の64KBをOracle Databaseに送信できます。
この時点で、エージェントには56 KBのデータが残っています。エージェントはOracle以外のシステムからさらに100行をフェッチした後、次の64KBのデータをOracle Databaseに送信します。HS_RPC_FETCH_REBLOCKING
初期化パラメータをOFF
に設定すると、最初の100行がOracleデータベース・サーバーに即時に送信されます。
親トピック: バルク・フェッチを使用したデータ転送の最適化