在Oracle中没有网络传输的实际查询执行时间

时间:2013-11-29 10:57:47

标签: sql oracle select oracle-sqldeveloper

是否可以确定SELECT执行时间而不通过网络进行数据传输?

我正在尝试在距离我大约1000英里的远程服务器上优化我们的查询,并且获取即使是少量数据也需要几分钟才能到达。

SQL Developer告诉我包含网络传输时间的执行时间。与“set timing on”相同的情况。

我对SELECT * FROM v$sql(area)的结果感到困惑。 即使更改执行的查询,此结果仍然相同。 Oracle文档说明了ELAPSED_TIME列,它包括解析/执行/获取时间,以及这些结果以某种方式累积。

所以这里有一个问题:是否有任何直接的方法来获得服务器上的查询的实际执行时间?没有网络传输时间,无论查询是缓存还是不缓存。没有平均值,没有估计值。正好是具体一次执行查询。

提前谢谢

2 个答案:

答案 0 :(得分:3)

Oracle查询执行作为生产者 - 消费者设计模式。如果网络连接“卡住”,那么Oracle会话进程会被操作系统阻止。您必须直接在DB服务器上执行查询(从sqlplus或通过PL / SQL)。

建议:忘记时间作为优化指标 - 查看缓冲区获取和磁盘读取,这将告诉您在评估查询时必须处理多少内存页面。此度量标准对当前数据库服务器负载不变(独立)。

如果网络往返会产生很大的开销,请尝试更改接口。通过使用集合,嵌套表或复杂类型,可以减少网络等待量。

答案 1 :(得分:0)

您可以使用

SELECT COUNT(*) FROM (SELECT * FROM MY_LARGE_TABLE WHERE ...)

嗯,你仍然通过网络传输一个号码,但这应该可以忽略不计。

相关问题