バルク・フェッチを使用したデータ転送の最適化

バルク・フェッチを使用すると、データ転送を最適化できます。

アプリケーションで異機種間サービスを使用してOracle以外のシステムからデータをフェッチする場合、データは次のように転送されます。

  • Oracle以外のシステムからエージェント・プロセスへ

  • エージェント・プロセスからOracle Databaseへ

  • Oracle Databaseからアプリケーションへ

Oracle Databaseでは、図4-1に示すように3つのデータ転送がすべて最適化されます。

図4-1 データ転送の最適化



OCI、Oracleプリコンパイラまたは他のツールを使用した配列フェッチ

アプリケーションとOracle Database間のデータ転送は、配列フェッチを使用して最適化できます。

配列フェッチの詳細と、各ネットワーク・ラウンドトリップで送信されるデータ量の指定方法は、アプリケーション開発ツールのマニュアルを参照してください。

Oracle Databaseとエージェント間の配列フェッチの制御

Oracle DatabaseがOracle以外のシステムからデータを取得する場合、異機種間サービスのHS_RPC_FETCH_SIZE初期化パラメータにより、エージェントとOracle Database間のフェッチごとに送信されるバイト数が定義されます。

エージェントは、次のいずれかが発生するまでOracle以外のシステムからデータをフェッチします。

  • Oracle Databaseへの送信分として指定のバイト数が累積された場合。

  • Oracle以外のシステムから結果セットの最終行がフェッチされた場合。

エージェントとOracle以外のシステム間の配列フェッチの制御

Oracle以外のシステムから取得される行数は、HS_FDS_FETCH_ROWS初期化パラメータにより決定されます。

エージェントでは配列フェッチがサポートされる必要があることに注意してください。エージェント固有のマニュアルを参照し、エージェントで配列フェッチがサポートされることを確認してください。

配列フェッチの再ブロック化の制御

デフォルトでは、エージェントはシステムへの送信分として十分なデータを取得するまで、Oracle以外のシステムからデータをフェッチします。つまり、Oracle以外のシステムからフェッチされたバイト数がHS_RPC_FETCH_SIZE初期化パラメータの値以上になるまで、フェッチが続行されます。エージェントはOracle Databaseとの間で、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データベース・サーバーに即時に送信されます。