是否可以无需通过网络传输数据来确定 SELECT 执行时间?
我正在尝试优化远程服务器上的查询,该服务器实际上距离我大约 1000 英里,即使获取少量数据也需要几分钟才能到达这里。
SQL Developer 告诉我执行时间,其中包括网络传输时间。与“设置计时
”情况相同。
我对 SELECT * FROM v$sql(area) 的结果感到非常困惑。 即使更改执行的查询,此结果仍然相同。 Oracle 文档提到 ELAPSED_TIME 列,它包括解析/执行/获取时间,并且这些结果以某种方式累积。
那么问题来了:有没有什么直接的方法可以获取服务器上查询的实际执行时间?没有网络传输时间,无论查询是否被缓存。没有平均值,没有估计。只是具体一次查询执行的时间。
提前致谢
最佳答案
Oracle 查询执行采用生产者-消费者设计模式。如果网络连接“卡住”,则 Oracle session 进程会被操作系统阻止。为了避免网络延迟的影响,您必须直接在数据库服务器上执行SQL查询(通过sqlplus或通过PL/SQL)。
建议: 忘记时间作为优化指标 - 查看缓冲区获取和磁盘读取,这将告诉您在评估查询时必须处理多少内存页。该指标对于当前数据库服务器负载是不变的(独立)。
如果网络往返产生大量开销,请尝试更改接口(interface)。通过使用集合、嵌套表或复杂类型,您可以减少网络等待量。
关于sql - Oracle中无网络传输的真实查询执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284135/