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

Sql 如何清除Oracle中的所有缓存项,sql,oracle,caching,oracle10g,Sql,Oracle,Caching,Oracle10g,我正在调整Oracle数据库上的SQL查询。我希望确保在运行每个查询之前清除所有缓存项,以防止产生误导性的性能结果。我通过运行以下命令清除共享池(以清除缓存的SQL/explain计划)和缓冲区缓存(以清除缓存的数据): alter system flush buffer_cache; alter system flush shared_pool; 我还应该做更多的事吗,还是这就足够了 谢谢 刷新共享池应该可以做到这一点,但Tom Kyte在下面列出了在某些情况下无法获得预期结果的几个原因:

我正在调整Oracle数据库上的SQL查询。我希望确保在运行每个查询之前清除所有缓存项,以防止产生误导性的性能结果。我通过运行以下命令清除共享池(以清除缓存的SQL/explain计划)和缓冲区缓存(以清除缓存的数据):

alter system flush buffer_cache;
alter system flush shared_pool;
我还应该做更多的事吗,还是这就足够了


谢谢

刷新共享池应该可以做到这一点,但Tom Kyte在下面列出了在某些情况下无法获得预期结果的几个原因:


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

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


然后清除共享池。

请记住,操作系统和硬件也会进行缓存,这可能会扭曲您的结果。

我认为您会给出误导性的结果,因为您已清除了所有缓存。在现实世界中,数据库在其生命周期中只有一次处于这种状态。
事实上,在进行性能测试时,通常可以多次运行查询,以便看到缓存(和其他优化)的好处

哇,这是一个很好的链接,有一些非常好的信息。谢谢分享!是的,当查询运行得比平时快时,甚至在清除缓冲区缓存之后,我肯定会想知道这一点。谢谢你的提示!
begin
   dbms_stats.gather_database_stats;
end;