【问题标题】:How to clear all cached items in Oracle如何清除Oracle中的所有缓存项
【发布时间】:2011-01-09 23:40:33
【问题描述】:

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

alter system flush buffer_cache;
alter system flush shared_pool;

我还有什么需要做的吗,还是足够了?

谢谢!

【问题讨论】:

    标签: sql oracle caching oracle10g


    【解决方案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】:

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

      【讨论】:

        猜你喜欢
        • 2020-03-28
        • 2015-02-13
        • 1970-01-01
        • 2017-09-18
        • 2020-10-02
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        相关资源
        最近更新 更多