LRU将没有使用的块连接起来,按照块访问的频率,热度 排序
LRUW将脏块连接起来,以后DBWn写脏块就从这个队列中找去写,按照块访问的频率,热度 排序,不经常被访问的脏块放在链的冷端,优先写到磁盘上,写完后变成干净块,这时就可挂在LRU上。
CBC链,是按地址排列
我们的脏块不仅挂在LRUW上还挂在checkpoint queue上
将块组织连接起来就是为了方便管理
Checkpoint queue链接脏块,按照块第一次脏的时间排序,也可以说是按LRBA地址连接。
检查点队列按照此方式排序的意义:
RBA : redo block address (修改数据库会产生日志,这就是日志的地址 , 在 checkpoint queue 队列相应的块中记下 RBA ) |
LRBA : 块第一次被脏的那个日志地址。 |
HRBA :块最近一次脏的地址。 |
On disk RBA : current 日志最后一条日志的地址,即数据库多能保存的日志最后的那个地址。在磁盘上 current 上 |
对于每一个脏块来说有一个HRBA,LRBA
CKPT进程:两种工作方式
1、完全检查点,发生时会触发DBWn将所有脏块写到磁盘上。(关闭数据库)
2、增量检查点,将检查点队列中第一个脏块的LRBA地址记录到控制文件中(每隔三秒),发生时会检查检查点队列如果发现队列上脏块太多,并且发现io不是很忙,那么将上边的部分写到磁盘中,触发DBWn写。
Alter system flush buffer_cache;
flush之后RBA变成无穷大了
Select CPDRT,CPLRBA_SEQ||','||CPLRBA_BNO||','||CPLRBA_BOF "LOW RBA", CPODR_SEQ||','||CPODR_BNO||',' ||CPODR_BOF "On disk RBA" ,CPODS,CPODT,CPHBT From x$kcccp;
检查点是数据恢复的起点。
切换日志组生成增量检查点,dbwr可能过一会写active就是说脏块还没写完或者根本就没写。
Alter system checkpoint 全局检查点。dbwr立马写。
关机慢的原因就是生成全局检查点,Buffer中的数据全部写到磁盘中。
==============================================================================
这是部分检查点为什么叫部分就是因为他是一部分,dbwr也要立即写。
======================================================================================================
增量检查点往检查点队列里排,排到他dbwr才写,这就是问什么redo中active
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29990276/viewspace-1364716/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29990276/viewspace-1364716/