我试图了解我在 Oracle 中编写的查询的性能。此时我只能访问 SQLDeveloper 及其执行计时器。我可以运行 SHOW PLAN 但不能使用自动跟踪功能。
当我在 SQLDeveloper 中按“执行查询”(F9) 时,我编写的查询运行大约 1.8 秒。我知道默认情况下这只是获取前 50 行,但我至少可以确定 1.8 秒包含总执行时间加上将前 50 行交付给我的客户的时间吗?
当我将此查询包装在存储过程中(通过 OUT REF CURSOR 返回结果)并尝试从外部应用程序(SQL Server Reporting Services)中使用它时,查询需要一分钟以上的时间才能运行。当我在 SQLDeveloper 中按“运行脚本”(F5) 时,我得到了类似的性能。似乎这里的区别在于,在这两种情况下,Oracle 必须将所有行传回而不是前 50 行。这使我相信客户端 PC 和 Oracle 实例之间存在一些网络连接问题。
我的查询只返回大约 8000 行,所以这种性能令人惊讶。为了证明我上面关于延迟的理论,我在 SQLDeveloper 中运行了一些类似这样的代码:
declare
tmp sys_refcursor;
begin
my_proc(null, null, null, tmp);
end;
......这大约需要两秒钟。同样,SQLDeveloper 的执行时钟是否准确地指示了查询的执行时间?或者我是否遗漏了一些东西,是否有可能实际上是我的查询需要调整?
任何人都可以根据我可用的有限工具向我提供任何见解吗?还是我应该尝试让 DBA 做一些进一步的分析?