首页 > 数据库 > 数据库开发技术 > 【数据库设计与实现】第七章:缓存与检查点
7.1设计原则
数据缓冲区与检查点是相辅相成的,所以放在同一个章节介绍。由于CPU与持久化设备之间存在巨大的速度差距,所以在内存中引入缓冲区缩小这个差距。从读的角度来看,将热点数据或预判用户可能读取的数据提前加载到内存中,从而将持久化设备的读时延和带宽提升至内存的时延和带宽。从写的角度来看,直接修改缓冲区中的数据而不是磁盘中的数据,可以带来两方面的优势。其一,将持久化设备的写时延和带宽提升至内存的时延和带宽。其二,将多次数据写合并为一次对持久化设备的写。
数据缓冲区将写缓存在内存中,并通过顺序写的REDO日志确保事务的数据不丢失,即事务的持久性。然而,随着写事务的不断进行,可能带来多方面问题,如日志文件持续增长,系统重启需要恢复的时间不断增加,脏块或脏页持续增多导致内存空间不足等等。这就需要通过检查点机制定期将脏块或脏页写入到持久化设备中,从而降低REDO日志长度。
在设计数据缓冲区和检查点时,有如下几点需要考虑:
缓冲区的效率:在多样性负载(不同数据大小、不同负载类型)、并发和LRU算法方面的效率;
缓冲区的弹性:缓冲区大小的可调节性,即随着负载的变化的调节能力;
检查点的平衡性:体现为脏块或脏页持久化与系统恢复时长之间的平衡能力,写脏块或脏页过于频繁会与正常负载争抢资源,而过于稀少则导致系统恢复时间过长;
7.2 Oracle设计原理
7.2.1 缓冲区与granule
7.2.2 工作集
7.2.3 Hash Chain
7.2.4 LRU/TCH
7.2.5 CR与扫描
7.2.6 Checkpoint
7.2.7 Write链
7.3 MySQL设计原理
7.3.1 缓冲区与Chunk
7.3.2 缓冲区实例
7.3.3 Page Hash
7.3.4 LRU List
7.3.5 Flush List
7.3.6 Checkpoint
7.4 总结与分析
附件:博客布局不利于展示表格等内容,本章节详细内容见附件
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69912723/viewspace-2732885/ ,如需转载,请注明出处,否则将追究法律责任。