我正在尝试为我的数据测试新摘要表的效用。
所以我创建了两个过程来获取某个间隔的数据,每个过程使用不同的表源。所以在我的C#控制台应用程序上,我只是调用一个或另一个。当我想重复这几次以获得良好的响应时间模式时,问题就开始了。
我得到的是这样的:1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80
可能我的Oracle 10g正在进行不适当的缓存。
我怎么解决这个问题?
答案 0 :(得分:10)
编辑:请参阅此thread on asktom,其中介绍 以及为何不来执行此操作。
如果您处于测试环境中,则可以将表空间脱机并再次联机:
ALTER TABLESPACE <tablespace_name> OFFLINE;
ALTER TABLESPACE <tablespace_name> ONLINE;
或者你可以尝试
ALTER SYSTEM FLUSH BUFFER_CACHE;
但仅限于测试环境。
当您在“真实”系统上进行测试时,您在第一次调用后获得的时间(使用缓存数据的时间)可能会更有趣,因为您将拥有缓存数据。调用该过程两次,并仅考虑后续执行中获得的性能结果。
答案 1 :(得分:6)
可能我的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.