我正在调整Oracle数据库上的SQL查询。我想确保在运行每个查询之前清除所有缓存项目,以防止误导性能结果。我清除出共享池(摆脱缓存的SQL /解释计划)和缓冲区高速缓存(摆脱缓存的数据)通过运行以下命令:如何清除Oracle中的所有缓存项目
alter system flush buffer_cache;
alter system flush shared_pool;
是否有更多我应该做的事情,或者这足够吗?
谢谢!
我正在调整Oracle数据库上的SQL查询。我想确保在运行每个查询之前清除所有缓存项目,以防止误导性能结果。我清除出共享池(摆脱缓存的SQL /解释计划)和缓冲区高速缓存(摆脱缓存的数据)通过运行以下命令:如何清除Oracle中的所有缓存项目
alter system flush buffer_cache;
alter system flush shared_pool;
是否有更多我应该做的事情,或者这足够吗?
谢谢!
冲洗共享池应该这样做,但汤姆凯特列出下面为什么你可能不会让你在某些情况下,期待的结果几个原因:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6349391411093
你也应该收集统计信息 - 无论是您模式甚至整个数据库:
begin
dbms_stats.gather_schema_stats('schema_name');
end;
或
begin
dbms_stats.gather_database_stats;
end;
然后清除共享池。
请记住,操作系统和硬件也会执行缓存,从而导致结果偏斜。
是的,即使在清除缓冲区缓存之后,当查询运行速度比平常快时,这绝对是我想知道的。谢谢你的提示! – 2010-01-28 15:53:24
我会争辩说,你会出现误导结果,因为你已经清除了所有的缓存。现实世界中的数据库在其生命中一直处于这种状态。 事实上,当性能测试,它通常是一个公认的惯例运行查询多次,这样您就可以看到缓存(和其他优化)的利益。
哇,这是一个非常好的信息很好的链接。感谢分享! – 2010-01-27 15:00:07