如何清除Oracle中的所有缓存项

时间:2010-01-27 14:11:11

标签: sql oracle caching oracle10g

我在Oracle数据库上调优SQL查询。我想确保在运行每个查询之前清除所有缓存的项目,以防止误导性能结果。我通过运行以下命令清除共享池(以消除缓存的SQL /解释计划)和缓冲区缓存(以摆脱缓存的数据):

alter system flush buffer_cache;
alter system flush shared_pool;

我应该做的还有更多,还是足够?

谢谢!

4 个答案:

答案 0 :(得分:8)

刷新共享池应该这样做,但是Tom Kyte在下面列出了几个原因,为什么在某些情况下你可能无法得到你期望的结果:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6349391411093

答案 1 :(得分:4)

请记住,操作系统和硬件也会进行缓存,这会导致结果出现偏差。

答案 2 :(得分:3)

您还应该收集统计信息 - 无论是您的架构还是整个数据库:

begin
   dbms_stats.gather_schema_stats('schema_name');
end;

begin
   dbms_stats.gather_database_stats;
end;

然后清除共享池。

答案 3 :(得分:1)

我认为你会提出误导性的结果因为你已经清除了所有的缓存。现实世界中的数据库,只有在其生命中曾经存在过一次。 事实上,在进行性能测试时,多次运行查询通常是一种公认​​的做法,这样您就可以看到缓存(和其他优化)的好处。