您的位置:首页 > 数据库 > Oracle

oracle技术之详细论述oracle,增量检查点篇(三)

2013-05-09 09:45 381 查看
oracle写脏块并不一定都从检查点队列中写.在v$sysstat视图中,有两项关于物理写的资料.physical writes 和physical writes non checkpoint.也就是说,oracle将对脏块的写分为两类.一类是通过检查点的写,一类是不通过检查点的写.我把它叫做检查点无关写.比如说:当表空间脱机时,会把隶属于该表空间的所有脏块都写进数据文件,但是不会发生检查点,这个写就是检查点无关写. 还有其他的情况会发生检查点无关写,我会在以后的实验中介绍.一个小实验,证明下检查点无关写:为了避免检查点对实验的影响,将检查点的发生频率设置的低一些.
命令如下:alter system set fast_start_mttr_target=0;alter system set log_checkpoint_timeout=3600;
步骤一:在实验前先观察下当前物理写的值:SQL> select * from v$sysstat where name='physical writes non checkpoint';STATISTIC# NAME CLASS VALUE STAT_ID---------- ------------------------------ ---------- ---------- ----------67 physical writes non checkpoint 8 3738 2602029796
步骤二:随便开始一个事务SQL> update jj_10 set name='aa' where id=20;已更新 1 行。
步骤三:把步骤二中的表脱机:SQL> alter tablespace jj_ts_1 offline;表空间已更改。
步骤四:此时再去查看资料视图:SQL> select * from v$sysstat where name='physical writes non checkpoint';STATISTIC# NAME CLASS VALUE STAT_ID---------- ------------------------------ ---------- ---------- ----------67 physical writes non checkpoint 8 3759 2602029796 --比较后发现,检查点无关写从3738增加到3759.
为了观察到通过检查点队列的写,把检查点频率调的高一点:alter system set log_checkpoint_timeout=10;
步骤一:SQL> select * from v$sysstat where name='physical writes' or name='physical writes noncheckpoint';STATISTIC# NAME CLASS VALUE STAT_ID---------- ------------------------------ ---------- ---------- ----------62 physical writes 8 5822 119046810967 physical writes non checkpoint 8 3829 2602029796用physical writes减去physical writes non checkpoint所得到的结果,将近似于通过检查点队列的写.为什么说近似于呢 因为oracle内部会有很多写,比如说控制文件的写操作,也会被记录进physical writes 资料.
步骤二:发布更新命令SQL> update jj_10 set name='aa' where id=20;已更新 1 行。
步骤三:观察块是否变的不脏.SQL> select dirty,status from v$bh where file#=7 and block#=406 and status='xcur';D STATUS- -------N xcur
步骤四:在块变的不脏后,马上查看资料视图.SQL> select * from v$sysstat where name='physical writes' or name='physical writes noncheckpoint';STATISTIC# NAME CLASS VALUE STAT_ID---------- ------------------------------ ---------- ---------- ----------62 physical writes 8 5851 119046810967 physical writes non checkpoint 8 3832 2602029796--可以看到检查点无关写多了3个字节,这3个字节和我们的更新声明没有关系.我们的更新声明更新了几十个字节.这3个字节应该是属于oracle内部的一些写操作,我们的更新声明,所产生的脏块,是通过检查点队列写出的.physical writes 多了很多.

oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息