多语言网站建设推广,禅城区网站建站建设,北镇建设局网站,网站公司怎么做检查点(checkpoint) 专栏内容#xff1a; 手写数据库toadb 本专栏主要介绍如何从零开发#xff0c;开发的步骤#xff0c;以及开发过程中的涉及的原理#xff0c;遇到的问题等#xff0c;让大家能跟上并且可以一起开发#xff0c;让每个需要的人成为参与者。 本专栏会定…检查点(checkpoint) 专栏内容 手写数据库toadb 本专栏主要介绍如何从零开发开发的步骤以及开发过程中的涉及的原理遇到的问题等让大家能跟上并且可以一起开发让每个需要的人成为参与者。 本专栏会定期更新对应的代码也会定期更新每个阶段的代码会打上tag方便阶段学习。 开源贡献 toadb开源库 个人主页我的主页 管理社区开源数据库 座右铭天行健君子以自强不息地势坤君子以厚德载物. 文章目录 检查点(checkpoint)前言概述问题解决方法静态检查点非静态检查点总结结尾 前言
随着信息技术的飞速发展数据已经渗透到各个领域成为现代社会最重要的资产之一。在这个大数据时代数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而很多读者可能对数据库理论感到困惑不知道如何选择合适的数据库如何设计有效的数据库结构以及如何处理和管理大量的数据。因此本专栏旨在为读者提供一套全面、深入的数据库理论指南帮助他们更好地理解和应用数据库技术。
数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中数据量呈指数级增长如何高效地处理和管理这些数据成为一个重要的问题。同时随着云计算、物联网、大数据等新兴技术的不断发展数据库理论的重要性日益凸显。
因此本专栏的分享希望可以提高大家对数据库理论的认识和理解对于感兴趣的朋友带来帮助。
概述
本文将通过一个问题来分享什么是检查点检查点可以带来那些好处。
问题
在本专栏的前一篇数据日志中介绍了当系统故障时缓冲区的脏数据就会丢失可以通过redo、undo日志进行恢复使数据达到一致性和完整性。
那么问题就来了 redo和undo日志从数据库创建时就开始记录这些日志数据库一般都会运行很长时间甚至数年如果这么多日志有可能都比数据本身还要大在更新频繁的数据库上日志很容易撑爆磁盘那么如何解决这一问题呢
解决方法
很长时间以前的日志有些事务已经提交而且数据已经都落盘了其实这些日志已经没有用了即使发生系统故障这些日志对应的数据也不需要再恢复了因为它们对应的数据已经持久化了。
所以我们需要找到一个时间点在这个时间点前发生的脏页和所有日志都需要落盘在这个时间点之后的可以不强制落盘那么在这时间点以前的日志就可以清理掉了。
这个时间点就叫做检查点也就是增加了一个分隔点减少日志保存的周期和恢复的范围。
这个检查点如何来做呢 有下面两种方式。
静态检查点
在做检查点的时候需要保证当前的日志和脏页都要落盘为了保证检查点落盘的过程中不会再产生脏页和日志需要在执行检查点动作时数据库不能提供服务做完检查点之后继续提供服务。
这样检查点时对当前所有脏页和日志落盘即可比较简单。
但是检查点在数据库业务繁忙时也是一个相当频繁的动作总不能频繁的中断业务吧这还能不能行
非静态检查点
哎经过发展现代数据库可以在业务运行时做检查点了它的流程是这样的
开始检查点记录当前数据库的快照开始将比快照旧的脏页和日志落盘检查点结束
这里多了一步快照的记录然后落盘时增加了与快照的比较这样就保证了检查点前的都已经落盘。 当然原理这样不同数据库的实现各不相同比如postgresql通过日志的lsn来记录快照比此lsn旧的都需要落盘
总结
检查点机制强制脏页定期落盘缩小了日志保存的周期同时也减少了恢复的周期。当然这个周期需要根据业务产生日志的速率来配置在性能和磁盘空间之间均衡避够刷盘太快。
有菜也有肉的分享下面插一段hello world的代码 以下是一个简单的启动程序示例可以在加电后从指定的加载地址开始执行并输出 “Hello”
ORG 0x7c00 ;指定加载地址为0x7c00start:mov ax, cs ;将cs寄存器的值加载到ax寄存器中mov ds, ax ;将ds寄存器的值设置为cs寄存器的值mov si, msg ;将消息的地址存储在si寄存器中call print ;调用print函数打印消息jmp end ;跳转到程序结束处print:lodsb ;将si指向的字符串中的下一个字符加载到al寄存器中or al, al ;判断al寄存器中的值是否为0jz end ;如果是0跳转到程序结束处mov ah, 0x0e ;将0x0e存储在ah寄存器中表示在屏幕上打印字符int 0x10 ;调用BIOS中断将字符打印到屏幕上jmp print ;继续打印下一个字符end:jmp $ ;无限循环程序结束处msg db Hello, 0 ;消息以0结尾该程序使用汇编语言编写可以在Bochs、QEMU等模拟器上运行。程序加载后将从地址0x7c00开始执行输出 “Hello” 字符串并进入无限循环。
结尾 非常感谢大家的支持在浏览的同时别忘了留下您宝贵的评论如果觉得值得鼓励请点赞收藏我会更加努力 作者邮箱studysenllang.onaliyun.com 如有错误或者疏漏欢迎指出互相学习。