Oracle で作成したクエリのパフォーマンスを理解しようとしています。現時点では、SQLDeveloper とその実行タイマーにしかアクセスできません。SHOW PLAN は実行できますが、自動トレース機能が使用できません。
作成したクエリは、SQLDeveloper で「クエリの実行」(F9) を押すと、約 1.8 秒で実行されます。これがデフォルトで最初の 50 行のみをフェッチしていることはわかっていますが、少なくとも 1.8 秒には、合計実行時間と最初の 50 行をクライアントに配信する時間を含めることができるでしょうか?
このクエリをストアド プロシージャでラップし (OUT REF CURSOR を介して結果を返す)、外部アプリケーション (SQL Server Reporting Services) から使用しようとすると、クエリの実行に 1 分以上かかります。SQLDeveloper で「スクリプトの実行」(F5) を押すと、同様のパフォーマンスが得られます。ここでの違いは、これら 2 つのシナリオでは、Oracle が最初の 50 行ではなく、すべての行を送り返す必要があることです。これにより、クライアント PC と Oracle インスタンスの間にネットワーク接続の問題があると思われます。
私のクエリは約 8000 行しか返さないため、このパフォーマンスは驚くべきものです。レイテンシに関する上記の理論を証明するために、SQLDeveloper で次のようなコードを実行しました。
declare
tmp sys_refcursor;
begin
my_proc(null, null, null, tmp);
end;
...そして、これは約 2 秒で実行されます。繰り返しますが、SQLDeveloper の実行クロックはクエリの実行時間を正確に示していますか? または、何か不足していますか?実際にチューニングが必要なのは私のクエリである可能性はありますか?
私が利用できる限られたツールに基づいて、誰かがこれについての洞察を提供してもらえますか? それとも、DBA に追加の分析を依頼する必要がありますか?