我正在尝试了解我在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中运行了如下代码:
当我在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进行进一步的分析?