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