ORACLE:相同的查询,相同的环境,相同的执行计划,相同的服务器,但不同的执行时间

时间:2018-03-29 12:48:06

标签: sql oracle query-performance

有人可以想象一个简单的SELECT如何执行14次,获得不同的执行时间?

我的SQL查询如下:

select count(*) 
from myTable_1 x
left join myTable_2 y ON x.id = y.id
where y.id is null;

这两个表包含超过1.500.000个数据。通过LEFT加入他们我应该少得多。

首次执行时,我强制在40秒后停止。 在第二次执行时,7秒后我得到了一个结果集。 在第三次执行时,10秒后我得到了相同的结果集。 在第4次执行时,我强制在> 600秒后停止。 从第4次到第19次执行,我只是强制停止,因为它持续超过1分钟,没有结果。

据我所知:只要查询完全执行(第二次执行),一些“数据”就会保存在缓存中。在下一次执行时(第3,第4 ......),执行的持续时间必须<=先前的执行时间。

它出了什么问题? 它在相同的环境中执行,在表中具有相同的数据。 我不再考虑硬件配置,因为它发生在同一环境中。我没有看到使用“索引提示”。我找不到关于这个不同执行时间的解释......

1 个答案:

答案 0 :(得分:0)

当您的SQL运行查询v$session以获取sql_id

对此sql_id进行v$sql查询sql_id后。

此视图v$sql提供磁盘读取,缓冲区获取,并发等待时间,用户等待时间,CPU时间,已用时间以及sql执行的许多其他属性。提取此数据并进行比较。这将揭示你的sql花费更多时间的位置。

在执行测试时,还要检查其他数据库活动正在消耗数据库资源。上述观点也可用于此目的。

还要检查您的服务器是否被任何其他数据库或进程使用,而没有正确的最大资源配置。