日期:2014-05-17  浏览次数:21408 次

alter system flush buffer_cache 执行时消耗的时间为什么会越来越长
为了测试一个删除sql句的性能,而多次执行了这个删除sql句

在每次执行sql句之前,都发行了以下2个语句:
1.alter system flush buffer_cache;
2.alter system flush shared_pool;

被删除的表里有600万数据,每次执行删除sql句都被删除100万。

为什么每次发行“alter system flush buffer_cache”所消耗的时间越来越长,由开始的1分钟变成了10分钟?
并且删除sql句的执行时间差别也很大,第一次1200秒,第二次1900秒,第三次1600秒?

------解决方案--------------------
.alter system flush buffer_cache
.alter system flush shared_pool

这两语句的作用是清除缓冲区和共享池。
为什么要执行这2个语句,对删除的测试有什么影响吗?

当你删除了100万,这100万会进入缓冲区,所以清理的时间会变长,这很正常。
------解决方案--------------------
执行这个语句的结果是将缓存在library cache和data dictionarycache 中的sql,pl/sql和数据字典定义都从共享池中清除了,在负载很重的生产库里执行flush shared_pool无异于自杀...慎用!