他の PL/SQL プロシージャ内で呼び出されるストアド Java プロシージャを開発しています。JAVA コードでは、最大 5000 行を返す最大 500 列を選択してデータを処理する必要があります (サイズが最大 8 MB の BLOB に StAX を使用して XML を生成します)。処理の複雑さは線形であり、時間やメモリを消費する操作はありません。
デスクトップでコードを実行してリモート DB サーバーに接続すると、約 3 秒で実行されます。プログラムをストアド Java プロシージャとして DB にデプロイすると、約 14 秒で実行されます。
理由がわかりません。データのラウンドトリップがないため、コードは内部 JDBC ドライバーを使用してデータベース上でより高速に実行されると予想されます。コードで行った唯一の変更は、接続を取得する方法です。
興味深いのは、Oracle DB のコードが消費するメモリが大幅に少ないことですが、メモリ制限を増やしても効果がありませんでした。
どこに問題があるのでしょうか?
私ができないことは次のとおりです。
- 単純な変換ではなく、その背後にいくつかのビジネス ロジックがあるため、標準の DB-XML マッピング ツールを使用します。
- アルゴリズムを純粋な PL/SQL に書き直す
- PL/SQLでのデータ処理の1ステップに過ぎないため、アプリケーション・サーバーにコードを配置します