第十八讲--检查点队列(checkpoint queue)
来源:互联网 发布:js获取本地file对象 编辑:程序博客网 时间:2024/06/05 06:28
Buffer cache的左边是buffer右边是链,用来记录buffer。
链的类型有LRU、LRUW。LRU是将干净可用的块串起来,将来从buffer cache找可用块的时候就从LRU链中找。LRUW是将脏块链起来,将来DBWR将脏块写入磁盘时就访问LRUW链。
把块链起来的目的就是为了组织和管理buffer块。
Buffer cache中还有一种叫做检查点队列链(checkpoint chint)。检查点队列链和LRUW一样也是挂的脏块。
oracle按照被访问的频率从低到高把脏块挂在LRUW上。
Oracle按照第一次脏的时间依次把脏块挂到检查点队列链上。
RBA:redo block address。Redo日志块的地址。对buffer进行修改会产生日志,日志有自己的地址,这个地址就是RBA。当buffer脏了以后,就在buffer里记下RBA,将来buffer需要恢复时就知道从哪里找日志。
每个buffer保存了有两个地址:LRBA和HRBA。LRBA是buffer第一次被脏的日志的地址。HRBA记录buffer最近一次脏的日志的地址。LRBA和HRBA中间的地址区域描述了buffer被脏的过程。
由此可见检查点队列上的脏buffer是按照其LRBA地址链接起来的。
Oracle数据库起起来后有一个检查点进程:
[oracle@redhat4 ~]$ ps -ef|grep oraroot 9729 9665 0 08:48 pts/2 00:00:00 su - oracleoracle 9730 9729 0 08:48 pts/2 00:00:00 -bashoracle 9759 1 0 08:4 8 ? 00:00:00 ora_pmon_jiagulunoracle 9761 1 0 08:48 ? 00:00:00 ora_psp0_jiagulunoracle 9763 1 0 08:48 ? 00:00:00 ora_mman_jiagulunoracle 9765 1 0 08:48 ? 00:00:00 ora_dbw0_jiagulunoracle 9767 1 0 08:48 ? 00:00:00 ora_lgwr_jiagulunoracle 9769 1 0 08:48 ? 00:00:00 ora_ckpt_jiagulunoracle 9771 1 0 08:48 ? 00:00:00 ora_smon_jiagulunoracle 9773 1 0 08:48 ? 00:00:00 ora_reco_jiagulunoracle 9775 1 0 08:48 ? 00:00:00 ora_cjq0_jiagulunoracle 9777 1 0 08:48 ? 00:00:00 ora_mmon_jiagulunoracle 9779 1 0 08:48 ? 00:00:00 ora_mmnl_jiagulunoracle 9781 1 0 08:48 ? 00:00:00 ora_d000_jiagulunoracle 9783 1 0 08:48 ? 00:00:00 ora_s000_jiagulunoracle 9787 1 0 08:48 ? 00:00:00 ora_p000_jiagulunoracle 9789 1 0 08:48 ? 00:00:00 ora_p001_jiagulunoracle 9791 1 0 08:48 ? 00:00:00 ora_qmnc_jiagulunoracle 9825 1 1 08:48 ? 00:00:00 ora_j000_jiagulunoracle 9827 1 0 08:48 ? 00:00:00 ora_j001_jiagulunoracle 9829 1 0 08:48 ? 00:00:00 ora_j002_jiagulunoracle 9831 1 0 08:48 ? 00:00:00 ora_j003_jiagulunoracle 9833 1 0 08:48 ? 00:00:00 ora_j004_jiagulunoracle 9835 1 0 08:48 ? 00:00:00 ora_j005_jiagulunoracle 9837 1 0 08:48 ? 00:00:00 ora_j006_jiagulunoracle 9843 1 0 08:48 ? 00:00:00 ora_q000_jiagulunoracle 9845 1 0 08:48 ? 00:00:00 ora_q001_jiagulunoracle 9910 9730 0 08:49 pts/2 00:00:00 ps -eforacle 9911 9730 0 08:49 pts/2 00:00:00 grep ora
CKPT进程有两种工作方式:
1. 完全检查点,当完全检查点发生的时候CKPT进程会触发BDWR,将所有脏块写到磁盘上;
2. 增量检查点,当增量检查点发生的时候CKPT将检查点队列的第一个脏块所对应的LRBA地址记录到控制文件上;
关闭数据库的时候oracle会发出一个完全检查点,CKPT触发DBWR,将所有脏buffer写回磁盘。数据库就干净的关闭了。数据库正常情况下只有在关闭时会发生完全检查点。
Oracle正常运行区间发生在了检查点,oracle每隔三秒钟发生一次增量检查点。此时就会把检查点队列的第一个脏块所对应的LRBA地址记录到控制文件上,如果检查点队列太长了,CKPT会通知DBWR把一部分检查点队列上的脏块写回磁盘。这样检查点队列就缩短了。
On disk rba:
LGWR进程每隔三秒钟(或者commit的时候)把redo logbuffer的日志写入redo log。
- 第十八讲--检查点队列(checkpoint queue)
- Oracle 的检查点队列 (checkpoint queue)
- oracle学习笔记 检查点队列(checkpoint queue)
- ORACLE Checkpoint-检查点队列与增量检查点
- 检查点(CHECKPOINT)
- checkpoint 检查点
- 检查点checkpoint
- 检查点checkpoint
- Checkpoint-检查点
- Oracle检查点ckpt (checkpoint)
- oracle 检查点(checkpoint)
- QTP检查点CheckPoint解析
- oracle检查点checkpoint信息
- postgresql之checkpoint(检查点)
- 转 -- ORACLE Checkpoint(检查点)
- ORACLE的检查点(checkpoint)
- 第十八讲
- oracle之检查点(Checkpoint)
- mysql字段类型详解
- 关于free如何知道要释放内存空间的长度问题
- VC10中的C++0x特性 Part 2 :右值引用
- 文本视图 UITextView
- Android 获取字符串高度与宽度
- 第十八讲--检查点队列(checkpoint queue)
- 关于自定义tabbar修改字体颜色及图标选中颜色等方法的总结
- 新手做LeetCode 2 Add Two Numbers
- Create groups和Create folder references的区别
- 什么是swing/SWT与/JFace/RCP/插件开发
- 让服务程序进入demon模式的代码
- mssql与mysql基本语法以及其他的区别
- jsp页面报错,无法定位问题
- 子类覆盖父类的成员变量