checkpoint技术
现象:如果每次一个页发生变化,都将新页的版本刷新到磁盘中,那么开销将会相当大;如果将热点数据集中在某几个页中,那么数据库的性能将会变得非常差;如果从缓冲池中将页的新版本刷新到磁盘时发生宕机,那么数据就不能恢复
应对方案:为了避免发生数据丢失,数据库普遍采用write Ahead log【先写日志】策略,当事务提交时,先写重做日志,再修改页;当发生宕机导致数据丢失时,通过重做日志来完成数据的恢复【这也是事务的ACID中的D要求(Durability持久性)】
注释:
1、当数据库发生宕机时,数据库不需要重做所有的日志;因为checkpoint之前的页都已经刷新回磁盘;数据库只需要对checkpoint后的重做日志进行恢复,这样就可以缩短恢复的时间
2、当缓冲池不够用时,根据LRU算法溢出最近最少使用的页,若此页为脏页,那么需要强制执行checkpoint,将脏页刷新到磁盘
3、通过LSN【Log Sequence Number】来标记版本,LSN是8字节的数字,单位是字节,每个页都有LSN,重做日志也有LSN,Checkpoint也有LSN
1、如果重做日志可以无限的增大,同时缓冲池也足够大,能够缓存所有数据库的数据,是否还需要将缓冲池中的数据刷新到磁盘?
1、缓冲池可以缓存数据库中所有的数据:数据库刚创建时,没有任何数据,缓冲池的确可以缓存所有的数据库文件,但是随着用户量,数据量的增加,缓冲池的内存难以保障;目前Oracle一体机最大只有2TB内存
2、重做日志无限做大,对成本要求较高,同时不便维护;当发生宕机时,恢复时间较长
2、Checkpoint技术解决的问题
a、缩短数据库的恢复时间
b、缓冲池不够用时,将脏页刷新到磁盘s
c、重做日志不可用时,刷新脏页
3、重做日志不可用的情况
1、重做日志出现不可用的情况是因为当前事务数据库对重做日志的设计都是循环使用的,并不是无限增大的
2、重做日志可以被重用的部分是指这些重做日志已经不再需要,当数据库发生宕机时,数据库恢复操作不需要这部分的重做日志,因此这部分重做日志可以被覆盖重用
3、当数据库发生宕机时,如果重做日志还需要使用,需要强制产生Checkpoint,将缓冲池中的页至少刷新到当前重做日志的位置
4、Che
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java全新整理八股文 + 场景题 + 算法 精心设计,面试命中率超过80% 专栏优势: 1、问题和答案已经整理到位,答案更专业,可以直接回答,不需要额外总结! 2、场景题讲解清晰,适用于大部分场景的项目,并且持续更新中 3、分享学习心得【知识点的广度和深度,算法有哪些坑,如何准备面试等等】