是否可以确定SELECT执行时间而不通过网络进行数据传输?
我正在尝试在距离我大约1000英里的远程服务器上优化我们的查询,并且获取即使是少量数据也需要几分钟才能到达。
SQL Developer告诉我包含网络传输时间的执行时间。与“set timing on
”相同的情况。
我对SELECT * FROM v$sql(area)
的结果感到困惑。
即使更改执行的查询,此结果仍然相同。 Oracle文档说明了ELAPSED_TIME列,它包括解析/执行/获取时间,以及这些结果以某种方式累积。
所以这里有一个问题:是否有任何直接的方法来获得服务器上的查询的实际执行时间?没有网络传输时间,无论查询是缓存还是不缓存。没有平均值,没有估计值。正好是具体一次执行查询。
提前谢谢
答案 0 :(得分:3)
Oracle查询执行作为生产者 - 消费者设计模式。如果网络连接“卡住”,那么Oracle会话进程会被操作系统阻止。您必须直接在DB服务器上执行查询(从sqlplus或通过PL / SQL)。
建议:忘记时间作为优化指标 - 查看缓冲区获取和磁盘读取,这将告诉您在评估查询时必须处理多少内存页面。此度量标准对当前数据库服务器负载不变(独立)。
如果网络往返会产生很大的开销,请尝试更改接口。通过使用集合,嵌套表或复杂类型,可以减少网络等待量。
答案 1 :(得分:0)
您可以使用
SELECT COUNT(*) FROM (SELECT * FROM MY_LARGE_TABLE WHERE ...)
嗯,你仍然通过网络传输一个号码,但这应该可以忽略不计。