【数据库】数据库中的检查点Checkpoint,数据落盘的重要时刻

news2025/1/19 20:17:13

检查点(checkpoint)

专栏内容

  • 手写数据库toadb
    本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。
    本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方便阶段学习。

开源贡献

  • toadb开源库

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 检查点(checkpoint)
  • 前言
  • 概述
  • 问题
  • 解决方法
  • 静态检查点
  • 非静态检查点
  • 总结
  • 结尾

在这里插入图片描述

前言

随着信息技术的飞速发展,数据已经渗透到各个领域,成为现代社会最重要的资产之一。在这个大数据时代,数据库理论在数据管理、存储和处理中发挥着至关重要的作用。然而,很多读者可能对数据库理论感到困惑,不知道如何选择合适的数据库,如何设计有效的数据库结构,以及如何处理和管理大量的数据。因此,本专栏旨在为读者提供一套全面、深入的数据库理论指南,帮助他们更好地理解和应用数据库技术。

数据库理论是研究如何有效地管理、存储和检索数据的学科。在现代信息化社会中,数据量呈指数级增长,如何高效地处理和管理这些数据成为一个重要的问题。同时,随着云计算、物联网、大数据等新兴技术的不断发展,数据库理论的重要性日益凸显。

因此,本专栏的分享希望可以提高大家对数据库理论的认识和理解,对于感兴趣的朋友带来帮助。

概述

本文将通过一个问题,来分享什么是检查点,检查点可以带来那些好处。

问题

在本专栏的前一篇数据日志中,介绍了当系统故障时,缓冲区的脏数据就会丢失,可以通过redo、undo日志进行恢复,使数据达到一致性和完整性。

那么问题就来了:
redo和undo日志从数据库创建时,就开始记录这些日志,数据库一般都会运行很长时间,甚至数年,如果这么多日志,有可能都比数据本身还要大,在更新频繁的数据库上,日志很容易撑爆磁盘,那么如何解决这一问题呢?

解决方法

很长时间以前的日志,有些事务已经提交,而且数据已经都落盘了,其实这些日志已经没有用了,即使发生系统故障,这些日志对应的数据也不需要再恢复了,因为它们对应的数据已经持久化了。

所以我们需要找到一个时间点,在这个时间点前发生的脏页和所有日志都需要落盘,在这个时间点之后的可以不强制落盘,那么在这时间点以前的日志就可以清理掉了。

这个时间点就叫做检查点,也就是增加了一个分隔点,减少日志保存的周期和恢复的范围。

这个检查点如何来做呢? 有下面两种方式。

静态检查点

在做检查点的时候,需要保证当前的日志和脏页都要落盘,为了保证检查点落盘的过程中,不会再产生脏页和日志,需要在执行检查点动作时,数据库不能提供服务,做完检查点之后继续提供服务。

这样检查点时,对当前所有脏页和日志落盘即可,比较简单。

但是检查点在数据库业务繁忙时,也是一个相当频繁的动作,总不能频繁的中断业务吧,这还能不能行?

非静态检查点

哎,经过发展,现代数据库可以在业务运行时做检查点了,它的流程是这样的:

  • 开始检查点
  • 记录当前数据库的快照
  • 开始将比快照旧的脏页和日志落盘
  • 检查点结束

这里多了一步快照的记录,然后落盘时增加了与快照的比较,这样就保证了检查点前的都已经落盘。
当然原理这样,不同数据库的实现各不相同,比如postgresql,通过日志的lsn来记录快照,比此lsn旧的都需要落盘;

总结

检查点机制强制脏页定期落盘,缩小了日志保存的周期,同时也减少了恢复的周期。当然这个周期,需要根据业务产生日志的速率来配置,在性能和磁盘空间之间均衡,避够刷盘太快。

有菜也有肉的分享,下面插一段hello world的代码;
以下是一个简单的启动程序示例,可以在加电后从指定的加载地址开始执行,并输出 “Hello”:

ORG 0x7c00    ;指定加载地址为0x7c00

start:
    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寄存器中的值是否为0
    jz end      ;如果是0,跳转到程序结束处
    mov ah, 0x0e ;将0x0e存储在ah寄存器中,表示在屏幕上打印字符
    int 0x10     ;调用BIOS中断,将字符打印到屏幕上
    jmp print   ;继续打印下一个字符

end:
    jmp $         ;无限循环,程序结束处

msg db 'Hello', 0 ;消息以0结尾

该程序使用汇编语言编写,可以在Bochs、QEMU等模拟器上运行。程序加载后,将从地址0x7c00开始执行,输出 “Hello” 字符串,并进入无限循环。

结尾

非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1239022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

天空分割技术解决方案

图像处理技术已经成为企业提升用户体验、优化产品和服务的重要工具。美摄科技,作为全球领先的AI图像处理技术提供商,一直致力于研发和应用最先进的技术,以满足企业的各种需求。今天,我们很高兴地向大家介绍我们的新一代产品——美…

git中的分支管理:git branch,git checkout,解决git中的分支冲突的方法【Git学习三】

😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:Git等软件工具技术的使用 👐学习格言:成功不是终点,失败也并非末日,最重要…

2023感恩节大促:跨境卖家如何借助海外网红营销赢得市场关注

随着全球贸易的日益发展,跨境电商行业变得愈发竞争激烈,各家卖家纷纷寻找新的营销策略以在大促期间脱颖而出。在2023年感恩节即将来临之际,海外网红营销成为许多卖家关注的热点。本文Nox聚星将和大家探讨跨境卖家如何充分利用海外网红营销&am…

《C++ Primer》第9章 顺序容器(三)

参考资料: 《C Primer》第5版《C Primer 习题集》第5版 9.5 额外的string操作(P320) 9.5.1 构造string的其他方法 const char *cp "hello, world!"; char arr[] { h,\0,i,\0 }; string s1(cp); // s1 "hello, world!…

什么是索引下推

索引下推介绍 索引下推(INDEX CONDITION PUSHDOWN,简称 ICP)是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的…

CSS伪类选择器详细讲解

前言 伪类选择器在CSS中起到的作用可以说是至关重要的,如果CSS没有伪类选择器,有很多效果都要借助js来完成,这样不仅代码量增加,维护起来你难度也大。这样程序员的工作量大,也违背了CSS诞生的作用,就是提高…

在Spring Boot中使用ECharts绘制数据图表

使用ECharts来完成一些花里胡哨的图表吧,一般这种需求我们在我们的客户端不太常见,但是,我们在后端进行各种数据统计的时候就会发现ECharts的优点了,比如我们常常做的柱状图,折线图,雷达图等可视化形式&…

阿里云发送短信

官方代码如下: // This file is auto-generated, dont edit it. Thanks. package com.aliyun.sample;import com.aliyun.tea.*;public class Sample {/*** 使用AK&SK初始化账号Client* param accessKeyId* param accessKeySecret* return Client* throws Excep…

windows系统安装ubuntu22.04虚拟机

镜像文件准备 镜像文件 官网 企业开源和Linux | Ubuntu 镜像下载地址 https://cn.ubuntu.com/download/server/step1 选择合适的版本下载 虚拟机安装 文件-- 新建虚拟机 选择镜像 修改安装路径 修改大小,最好60g,大一点 设置用户信息 设置虚拟机网络…

【NLP】培训LLM的不同方式

在大型语言模型(LLM)领域,存在多种具有不同手段、要求和目标的培训机制。由于它们有不同的用途,因此重要的是不要将它们相互混淆并了解它们适用的不同场景。 在本文中,我想概述一些最重要的训练机制,包括预…

技术or管理?浅谈测试人员的未来职业发展

我们在工作了一段时间之后,势必会感觉到自己已经积累了一些工作经验了,会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的,由于其入门门槛不高,不用学习太多技术性知识即可入行,所…

RH850 G3KH异常处理简述

目录 1.概述 2.异常处理后现场恢复 3.异常处理地址识别 4.小结 1.概述 我们首先来看,G3KH的关键寄存器,PSW PSW--Program status word PSW寄存器里有表征程序状态的flag,CPU操作状态的flag。如下 UM---是否是user mode;0--…

Java Spring

文章目录 SpringSpring 是什么?从Spring中获取Beanxml获取注解存储类注解⽅法注解bean命名规则类注解之间的关系 注解获取bean属性注⼊缺点 构造⽅法注⼊Setter 注⼊三种注⼊优缺点分析Resource:另⼀种注⼊关键字同⼀类型多个 Bean 报错处理 获取bean对象…

谈一谈什么是接口测试?怎样做接口测试?

扫盲内容: 1.什么是接口? 2.接口都有哪些类型? 3.接口的本质是什么? 4.什么是接口测试? 5.问什么要做接口测试? 6.怎样做接口测试? 7.接口测测试点是什么? 8.接口测试都要掌…

​极氪,中国传统汽车品牌电动化的样板间

这篇文章早就想写了,因为太忙的原因就一直跳票,正好最近两件事的出现,又触发了想写这篇文章的冲动。 两件事主要是: 一,10 月份各家陆续公布了单月销量以及累计销量; 二,极氪在北京正式发布了 …

CTF靶场搭建及Web赛题制作与终端docker环境部署

♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ ♡ ♥ 写在前面 ╔═══════════════════════════════════════════════════…

OSG文字-渐变文字(4)

渐变文字(osgText::FadeText类)继承自osgText::Text类继承关系图如图9-6所示 图9-6 osgText::FadeText的继承关系图 从继承关系图中可以看出,它继承自osgText::Text类,因此,它具备一般文字属性的设置方法这里不再重复说明。创建渐变文字与一般…

Python通过selenium调用IE11浏览器报错解决方法

前提 正常安装Python 工具,selenium 包可以正常导入。IE浏览器驱动 IEDriverServer.exe 已经正确放置到已经添加path目录的文件下。 报错现象: 解决方法 打开浏览器进入 internet 选项 切换到安全页签 ,去除“应用保护模式” 再次调用验证…

进程API

linux下进程的api forkwaitexec fork #include <stdio.h> #include <stdlib.h> #include <unistd.h>/* linux环境运行 子进程并不是完全拷贝了父进程。具体来说&#xff0c;虽然它拥有自己的 地址空间&#xff08;即拥有自己的私有内存&#xff09;、寄存器…

2018-2022年富时罗素 ESG评分数据

2018-2022年富时罗素 ESG评分数据 1、时间&#xff1a;2018-2022年 2、指标&#xff1a;证券代码、证券简称、富时罗素ESG评分、 3、说明&#xff1a; 富时罗素ESG评级体系评估了中国大陆、香港、欧洲以及美国等市场上1800家中国上市企业股票&#xff0c;评估了7200多种证券…