如何清除Oracle中的所有缓存项
Posted
技术标签:
【中文标题】如何清除Oracle中的所有缓存项【英文标题】:How to clear all cached items in Oracle 【发布时间】:2011-01-09 23:40:33 【问题描述】:我正在调整 Oracle 数据库上的 SQL 查询。我想确保在运行每个查询之前清除所有缓存的项目,以防止误导性能结果。我通过运行以下命令清除了共享池(以摆脱缓存的 SQL/解释计划)和缓冲区缓存(以摆脱缓存的数据):
alter system flush buffer_cache;
alter system flush shared_pool;
我还有什么需要做的吗,还是足够了?
谢谢!
【问题讨论】:
【参考方案1】:刷新共享池应该可以做到,但 Tom Kyte 在下面列出了一些原因,说明在某些情况下您可能无法获得预期的结果:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6349391411093
【讨论】:
哇,这是一个很好的链接,提供了一些非常好的信息。感谢分享!【参考方案2】:请记住,操作系统和硬件也会进行缓存,这可能会影响您的结果。
【讨论】:
是的,当查询运行速度比平时更快时,即使在清除缓冲区缓存之后,这绝对是我想知道的问题。感谢您的提示!【参考方案3】:您还应该收集统计信息 - 无论是您的架构还是整个数据库:
begin
dbms_stats.gather_schema_stats('schema_name');
end;
或
begin
dbms_stats.gather_database_stats;
end;
然后清除共享池。
【讨论】:
【参考方案4】:我认为您会提供误导性结果因为您已清除所有缓存。现实世界中的数据库,在其生命中只处于这种状态一次。 事实上,在进行性能测试时,多次运行查询通常是一种公认的做法,这样您就可以看到缓存(和其他优化)的好处。
【讨论】:
以上是关于如何清除Oracle中的所有缓存项的主要内容,如果未能解决你的问题,请参考以下文章