2010-01-27 78 views
28

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

alter system flush buffer_cache; 
alter system flush shared_pool; 

是否有更多我应该做的事情,或者这足够吗?

谢谢!

回答

3

你也应该收集统计信息 - 无论是您模式甚至整个数据库:

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

begin 
    dbms_stats.gather_database_stats; 
end; 

然后清除共享池。

4

请记住,操作系统和硬件也会执行缓存,从而导致结果偏斜。

+1

是的,即使在清除缓冲区缓存之后,当查询运行速度比平常快时,这绝对是我想知道的。谢谢你的提示! – 2010-01-28 15:53:24

1

我会争辩说,你会出现误导结果,因为你已经清除了所有的缓存。现实世界中的数据库在其生命中一直处于这种状态。 事实上,当性能测试,它通常是一个公认的惯例运行查询多次,这样您就可以看到缓存(和其他优化)的利益。