【问题标题】:How to disable oracle cache for performance tests如何为性能测试禁用 oracle 缓存
【发布时间】:2011-01-11 21:05:19
【问题描述】:

我正在尝试为我的数据测试新汇总表的实用性。

所以我创建了两个过程来获取特定间隔的数据,每个过程都使用不同的表源。所以在我的 C# 控制台应用程序上,我只是调用一个或另一个。当我想重复几次以获得良好的响应时间模式时,问题就开始了。

我得到这样的东西:1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80

可能我的 Oracle 10g 进行了不适当的缓存。

我该如何解决这个问题?

【问题讨论】:

    标签: oracle caching oracle10g performance


    【解决方案1】:

    编辑:thread on asktom,它描述了如何为什么不这样做。

    如果您在测试环境中,您可以将您的表空间离线并再次在线:

    ALTER TABLESPACE <tablespace_name> OFFLINE;
    ALTER TABLESPACE <tablespace_name> ONLINE;
    

    或者你可以试试

    ALTER SYSTEM FLUSH BUFFER_CACHE;
    

    但同样仅限于测试环境。

    当您在“真实”系统上进行测试时,您在第一次调用后获得的时间(那些使用缓存数据的)可能会更有趣,因为您将拥有缓存数据。两次调用该过程,只考虑在后续执行中获得的性能结果。

    【讨论】:

    • 在通话前冲洗我得到了一些有趣的结果,例如:1370,354,391,375,352,511,390,375,326,335,435,334,334,328,337,314,417,377,384,367,393。明天我会研究更多,我会说我的结果。谢谢!
    • 你好@Peter Lang,我的表在系统表空间,所以我不能离线。但是我不明白为什么我应该这样做?你能解释或建议一个好的讲座吗?谢谢。
    【解决方案2】:

    可能我的 Oracle 10g 正在制作一个 缓存不当。

    实际上,Oracle 似乎正在做一些完全合适的缓存。如果这些表将被大量使用,那么您希望大部分时间都将它们放在缓存中。

    编辑

    在评论彼得的回应时,路易斯说

    在我接到一些电话之前冲洗 有趣的结果,例如: 1370,354,391,375,352,511,390,375,326,335,435,334,334,328,337,314,417,377,384,367,393。

    这些发现是“有趣的”,因为刷新意味着调用花费的时间比行在数据库缓存中的时间长一点,但没有第一次调用的时间长。这几乎可以肯定是因为服务器已将物理记录存储在其物理缓存中。要避免这种情况,真正针对空缓存运行的唯一方法是在每次测试之前重新启动服务器

    或者学习正确调整查询。了解how the database works 是一个好的开始。 EXPLAIN PLAN 是比挂钟更好的调音辅助工具。 Find out more.

    【讨论】:

    • 好的,我理解在这种情况下缓存的重要性,但在我的情况下,这些表不会以相同的间隔多次重复。我只想查看没有缓存的响应时间,无论是否使用我的汇总表。不过,谢谢,我很感激。 +1
    • 我阅读了您的编辑,这是一个问题。您对我的使用普通表的程序和使用汇总表的程序之间有更好的比较解决方案有什么建议吗?
    • 我在调用过程之前重复了刷新buffer_cache的测试,我得到:407,342,413,364,431,354,351,356,344,368,328,341,334,370,333,330,327,401,421,333(第一个结果不是更大)。有什么功能可以查看物理缓存的状态吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2010-10-24
    • 2012-12-16
    • 1970-01-01
    • 2018-07-30
    • 2013-04-15
    相关资源
    最近更新 更多