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


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 non
checkpoint';
STATISTIC# NAME                                CLASS      VALUE    STAT_ID
---------- ------------------------------ ---------- ---------- ----------
62 physical writes                         8       5822 1190468109
67 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 non
checkpoint';
STATISTIC# NAME                                CLASS      VALUE    STAT_ID
---------- ------------------------------ ---------- ---------- ----------
62 physical writes                         8       5851 1190468109
67 physical writes non checkpoint          8       3832 2602029796
--可以看到检查点无关写多了3个字节,这3个字节和我们的更新声明没有关系.我们的更新声明更新了几十个字节.这3个字节应该是属于oracle内部的一些写操作,我们的更新声明,所产生的脏块,是通过检查点队列写出的.physical writes 多了很多.


oracle视频教程请关注: http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

你可能感兴趣的:(oracle,oracle增量检查点)