eygle.com   eygle.com
eygle.com  
 

« December 21, 2005 | Blog首页 | December 23, 2005 »



December 22, 2005

Oracle HowTo:如何强制刷新Buffer Cache

作者:eygle

出处:http://blog.eygle.com

很多时候,为了排除Cache对于测试的影响,我们常常需要手动刷新Buffer Cache,以促使Oracle重新执行物理访问。我曾经在使用 db_file_multiblock_read_count测试Oracle在不同系统中的IO能力一文中用到这个方法,在Itpub上也有朋友到,今天整理一下并作简要说明。

在Oracle9i里,Oracle提供了一个内部事件,用以强制刷新Buffer Cache,其语法为:

alter session set events 'immediate trace name flush_cache level 1';

或者:

alter session set events = 'immediate trace name flush_cache';

类似的也可以使用alter system系统级设置:

alter system set events = 'immediate trace name flush_cache';

在Oracle10g中,Oracle提供一个新的特性,可以通过如下命令刷新Buffer Cache:

alter system flush buffer_cache;

我们通过试验来看一下刷新Cache的作用:


1.创建测试表

SQL> create table t as select * from dba_objects;
Table created.
SQL> analyze table t compute statistics;
Table analyzed.
SQL> select blocks,empty_blocks from dba_tables 
   2 where table_name='T' and owner='SYS';
    BLOCKS EMPTY_BLOCKS
---------- ------------
        78            1

表T共有79个Block.

2. x$bh

SQL> select count(*) from x$bh;
  COUNT(*)
----------
     14375
SQL> select count(*) from x$bh where state=0;  -- state =0 is free
  COUNT(*)
----------
     13960

SQL> alter system set events = 'immediate trace name flush_cache';
System altered.
SQL> select count(*) from x$bh where state=0;
  COUNT(*)
----------
     14375

我们注意到flush_cache以后,所有Buffer都被标记为free.

3. 观察flush_cache对于查询的影响

SQL> set autotrace trace stat
SQL> select count(*) from t;

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         81  consistent gets
         79  physical reads
          0  redo size
....
SQL> 
SQL> select count(*) from t;

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         81  consistent gets
          0  physical reads
          0  redo size
....
SQL> alter system set events = 'immediate trace name flush_cache';
System altered.
SQL> select count(*) from t;

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         81  consistent gets
         79  physical reads
          0  redo size
....
SQL> 

以上说明仅供参考。

Posted by eygle at 11:29 PM | Comments (0)


一个命题:列举你认为最重要的9个动态性能视图

作者:eygle

出处:http://blog.eygle.com

前几天给小惠惠出了一个命题:列举你认为最重要的9个动态性能视图(view).

为每个视图写一篇文章(不少于5页Word文档),说明从这个视图你能够获得哪些信息.

最后再写一篇文章(不少于20页Word文档),说明联合这些视图你能够获得哪些重要的数据库信息,并辅助数据库优化与诊断. 

其实文章长短我并非在意,关键是你真的对这些知识作了思考,并且能够把这些知识运用到实践中去.

首先要自己思考,看看自己能想到哪些方面,然后再去参考别人的经验,看差距在什么地方. 比较然后学习. 同样的,最忌不作思考,直接去找别人的答案.这就如同我们解数学题一样,如果你偷看了答案,那么就会局限你的思路,很难再做出独立的思考和创新.

这样思考、比较、学习、总结,如是数番,我不相信技术得不到提高.

这个世界并不复杂,最怕你从不认真.

其实这文章、这题目是做给自己看的,而不是别人。

Posted by eygle at 9:51 PM | Comments (3)



CopyRight © 2004-2008 eygle.com, All rights reserved.