ITPub博客

首页 > 数据库 > 数据库开发技术 > 【数据库设计与实现】第七章:缓存与检查点

【数据库设计与实现】第七章:缓存与检查点

原创 数据库开发技术 作者:joshua81 时间:2020-11-08 20:51:06 0 删除 编辑

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 总结与分析

附件:博客布局不利于展示表格等内容,本章节详细内容见附件

数据库设计与实现(第七章).pdf


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69912723/viewspace-2732885/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-03-10

  • 博文量
    12
  • 访问量
    6090