有人可以想象一个简单的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 ......),执行的持续时间必须<=先前的执行时间。
它出了什么问题? 它在相同的环境中执行,在表中具有相同的数据。 我不再考虑硬件配置,因为它发生在同一环境中。我没有看到使用“索引提示”。我找不到关于这个不同执行时间的解释......
答案 0 :(得分:0)
当您的SQL运行查询v$session
以获取sql_id
。
对此sql_id
进行v$sql
查询sql_id
后。
此视图v$sql
提供磁盘读取,缓冲区获取,并发等待时间,用户等待时间,CPU时间,已用时间以及sql执行的许多其他属性。提取此数据并进行比较。这将揭示你的sql花费更多时间的位置。
在执行测试时,还要检查其他数据库活动正在消耗数据库资源。上述观点也可用于此目的。
还要检查您的服务器是否被任何其他数据库或进程使用,而没有正确的最大资源配置。