gbase8s数据库阻塞检查点和非阻塞检查点的执行机制
1. 检查点的描述
- 为了便于数据库系统的复原和逻辑恢复,数据库服务器生成的一致性标志点,称为检查点,其是建立在数据库系统的已知和一致状态时日志中的某个时间点
- 检查点的目的在于定期将逻辑日志中的重新启动点向前移动
-
- 如果存在检查点,数据库只需要完成检查点之后的逻辑日志的恢复即可完成数据库的重启和恢复
- 如果不存在检查点,则需要重新读取自数据库重启以来的所有逻辑日志才可完成数据库的重启和恢复
- 数据库服务为为逻辑日志空间的每个范围生成至少一个自动检查点,保证可以开始快速恢复的检查点存在
- 检查点在infomix9.2版本中增加了fuzzy checkpoint的概念
-
- 检查点分为full checkpoint和fuzzy checkpoint两种
- full checkpoint会把所有的脏页刷新到磁盘
- fuzzy checkpoint不会刷新所有页
- 在informix11.5版本中又取消了fuzzy checkpoint
- 逻辑日志是循环的,数据库保证在每个循环周期内,数据库保证至少做一次checkpoint,当下一个日志包含最后的checkpoint时(代表次周期只做了一次检查点),数据库会做一次检查点操作
2. 检查点的作用
- 数据从磁盘读取到缓冲池中后被修改后,内存中的数据和缓冲池中的数据会出现差异,检查点会将共享内存缓冲池中的脏页数据全部刷新到磁盘上,使所修改的数据固化到硬盘上
- 检查点除了刷新数据到磁盘,还起到了有助恢复的作用,数据库down机恢复时,会找到最后一个检查点的位置,然后动态恢复检查点之后的逻辑日志,如果没有检查点,需要恢复所有的逻辑日志,需要的时间会较长
3. 检查点针对的数据
- checkpoint时,内存中的LRU队列会存在两种数据
-
- 一种是从磁盘读出来没有发生更改的数据,FLRU队列
- 一种是从磁盘读出来后发生了更改的数据,MLRU队列
- 检查点刷新的数据只针对MLRU队列的数据,即只需要将内存中修改的数据同步到磁盘,而不需要将所有的信息写到磁盘,如果只有一个page脏页,则只同步一个page页到磁盘,其他page不需要
- 写磁盘的脏页数据虽然同步到了磁盘,但是仍然在内存中存在
4. 检查点的种类
- 阻塞检查点
-
- 改检查点操作时会加上数据库级别的锁,他是一个完全检查点,必须保证事务的一致性
- 非阻塞检查点
-
- 模糊检查点,这些检查点的频率可以通过应用程序进行调整
- 非阻塞检查点,不需要数据库级别的锁,因此在检查点正在进行时,多个应用程序可以在同一个数据库上异步提交或回滚事务,他是一个不完全检查点不必保证事务的一致性
- 非阻塞检查点不是说全部过程都不阻塞,其是会存在一段阻塞的过程:检查点执行之前,需要在阻塞状态下等待用户离开critical section,然后将系统恢复需要的逻辑日志、物理日志等刷新,此阶段为阻塞阶段
5. 阻塞的种类
| 事件 | 描述 | 是否阻塞 |
| 管理类 | 1.dbspace的创建、删除和改名 | 阻塞 |
| 2.增加或删除chunk | ||
| 3.增加或删除一个逻辑日志文件 | ||
| 4.修改物理日志的位置和大小 | ||
| 5.在不记日志的分区上执行shrink(碎片整理)操作 | ||
| 6.打开或关闭镜像 | ||
| 备份 | 假备份 | 阻塞 |
| 开始归档时 | ||
| 物理恢复结束之后 | ||
| CDR(数据库同步程序) | 第一次启动ER的子系统或者所有参与者被删除之后重启了复制 | 阻塞 |
| 升级转换/升级回退 | 在检查转换结束和真正的磁盘结构转换开始之前会执行一次checkpoint;如果升级失败,回退成功之后会执行一次checkpoint | 阻塞 |
| 高可用性 | 1.增加一个新的RSS或者SDS系节点 1.secondary server被升级为主服务器 | 根据场景进行区分 |
| HDR | 1.服务器的模式发生了变化 2.HDR安装结束之后的第一次传输 3.primary或secondary servers上潜在的物理日志溢出 | 情景不同,结果不同 |
| 恢复点 | 恢复开始和结束之后都会执行checkpoint,当设置了CONVERSION_GUARD,并且指定了RESTORE_POINT_DIR配置参数时,恢复点才会生效 | 阻塞 |
| Pload | 以快速模式启动Pload(HPL) | 阻塞 |
| 恢复 | 快速恢复开始时 | 阻塞 |
| 重组 | 在线创建索引 碎片整理 | 阻塞 |
| 用户操作 | 用户执行checkpoint | 阻塞(除外部备份期间) |
| 事件 | 描述 | 是否阻塞 |
| CKPTINTVL | 当CKPTINTVL间隔时间到了之后,数据库会检查是否需要做checkpoint,满足下列条件,需要做:
| 不阻塞 |
| LongTX | 长事务:发现长事务,且事务没有停止,会执行一个checkpoint来停止这个长事务 回滚过程中,如果长事务被终止,当长事务仍然没有回滚结束,此时执行一个checkpoint | 不阻塞 |
| Llog | 逻辑日志用完 | 不阻塞 |
| Misc | 因IO错误导致dbspace或chunk处于PD状态 | 不阻塞 |
| 物理日志 | 物理日志所处条件: 1.物理日志写到75% 2.物理日志加上脏页的容量大于物理日志总空间的90% | 不阻塞 |
| RTO | 定义最长的数据恢复时间,正常操作系统崩溃,重启的时间不会超过TRO_SERVER_RESTART配置的时间 | 不阻塞 |
| stamp wrap | 如果新的检查点时间戳在最后一个检查点之前,会触发另外一个检查点 | 不阻塞 |
| startup | 数据库穷的那个 | 不阻塞 |
| 解压 | 在不及日志的表或者数据库上执行解压操作 | 不阻塞 |
6. 检查点的场景
- 阻塞检查点:数据库空间添加到服务器或执行数据库备份时,检查点将出现
- 非阻塞检查点:资源限制发生时,如逻辑日志空间的每个范围需要检查点来保证日志具有快速开始恢复的检查点;如数据库服务器将在物理日志达到总大小的75%时触发检查点,以避免物理日志移除,这种检查点不会阻塞事务
-
- 如果检查点期间,资源将要耗尽,则会为了保证有足够的资源保证检查点的完成,则会阻塞其他事务
- 如果事务被阻塞,则服务器会更频繁的触发检查点,以避免检查点处理期间的事务阻塞
- 自动检查点引起数据库更频繁的触发检查点,以避免事务阻塞,自动检查点尝试监视系统活动和资源使用情况(物理和逻辑日志使用情况以及缓冲池脏的程度),以能够及时触发检查点,这样检查点的处理就可在物理日志或逻辑日志耗尽前完成、3
7. 检查点的参数
- auto_ckpts:配置参数设置启动时启用或禁用自动检查点
- RTO_SERVER_RESTART:配置参数可指定快速恢复需要的时间
-
- 配置此参数将忽略参数CKPTINTVL
- 此参数配置后,数据库服务器将会监视物理日志和逻辑日志使用情况,以估计快速恢复的持续时间。如果服务器估计快速恢复将超出RTO_SERVER_RESTART时间,将会触发检查点
- RTO_SERVER_RESTART指定的是目标时间量,不能是保证的时间量
8. 检查点的执行过程
- 第一步:检查点执行开始时关于用户线索的要求:
-
- 检查点发生时,会检查所有数据库线索的状态,而此时数据库线索(用户执行sql的进程)的状态可以分为三种:将要执行、执行中和执行结束
- 针对执行中的线索,根据其执行过程的节点位置将会划分出检查点执行的两种行为,而针对线索的某部分节点我们称之为关键部分代码,根据线索是否进入到关键部分代码,检查点的两种行为如下:
-
-
- 线索还没有进入关键代码部分的执行,此时检查点可以阻塞线程的后续执行
- 如果线索执行节点进入了关键部分代码,则检查点需要等待线索执行完成后再进行检查点
-
-
- 关键部分代码的描述
-
-
- 关键部分的代码主要是做磁盘的更新,为了保证数据物理的一致性,所以针对这部分要么全部完成,要么全部不完成
- 关键部分的线索会持有完成数据修改所需要的共享内存资源,而针对这部分资源,做checkpoint操作时,必须获得这部分共享内存资源,所以检查点执行时要求关键部分代码中没有用户线索在执行
-
-
- checkpoint会等待所有进入关键部分代码的用户线索执行完毕释放资源会,才会继续执行,将缓冲池的数据同步到磁盘
- 第二步:将物理日志缓冲刷新到物理日志文件
-
- 当没有用户线索处于关键部分代码中,检查点将继续执行
- 清页线索会把物理日志缓冲中的信息刷新到物理日志文件中

- 第三步:将缓冲池中的所有脏页写入到磁盘,这一步被称之为chunk write,仅需要刷新脏页,不需要刷新所有页
- 第四步:将检查点的信息写入到几个关键文件中
-
- 清页线索会在逻辑日志中写一个checkpoint记录,他提供了一个系统失败之后的一个恢复点
- 清页线索还会在rootdbs的保留页中(page_1CKPT和page_2CKPT)进行更新状态
- 将checkpoint完成的记录写到消息日志文件中

- 第五步:将逻辑日志缓冲区的内容刷新到逻辑日志文件中
- 第六步:逻辑上将物理日志文件清空
-
- 物理日志主要是数据库异常崩溃恢复时,可以在此基础上进行恢复,防止块断裂问题,所以检查点完成后,之前的物理日志已经失效了
- 对于已经失效的物理日志,gbase8s采用的是逻辑删除:即checkpoint记录写到消息日志文件后,物理日志上的文件不会被移走(移动删除开销较大)。而是以在物理日志后面的地址作为新一轮物理日志的写入的开始地址,继续往后写,而物理日志使用完毕后,将会从物理日志文件开头进行覆盖写
- 可以把物理日志文件看成循环文件,没有起始点,没有结束点,每次checkpoint,物理日志的起始点都在变化
9. 非阻塞检查点的特殊说明
- 检查点分为阻塞检查点和非阻塞检查点,非阻塞检查点并不是完全不阻塞,其也会出现一部分阻塞时间,只是时间相比较会非常短暂
- 步骤如下:
-
- 检查点开始执行时,会阻塞新的线索进入到关键代码区域,等待进入到关键部分代码的线索离开
- 将缓存中的系统目录表信息写入到磁盘中
- 将物理、逻辑日志缓冲区刷新到日志文件中
- 将检查点写入到逻辑日志和消息日志文件中
- 完成上述步骤后,将不再阻塞新的线索进入到关键代码部分
- 将缓冲区中的脏页写入到磁盘中
- 结束检查点操作,在保留页中更新检查点记录,检查点完成
- 从上可知非阻塞检查点将会存在一段阻塞时间
相关文章:
gbase8s数据库阻塞检查点和非阻塞检查点的执行机制
1. 检查点的描述 为了便于数据库系统的复原和逻辑恢复,数据库服务器生成的一致性标志点,称为检查点,其是建立在数据库系统的已知和一致状态时日志中的某个时间点检查点的目的在于定期将逻辑日志中的重新启动点向前移动 如果存在检查点&#…...
ARM32开发--串口库封装(初级)
知不足而奋进望远山而前行 目录 文章目录 前言 目标 内容 开发流程 文件目录创建 分组创建 接口定义 完整代码 总结 前言 在嵌入式软件开发中,封装抽取流程和抽取封装策略是非常重要的技术,能够提高代码的复用性和可维护性。本文将介绍如何在文…...
统一管理:Vue公共组件/公共样式/全局自定义指令
main.js 引入存放公共文件的文件路径 import "./plugins";src/plugins文件夹下的index.js 在处理公共文件中分别引入 /* 公共引入,勿随意修改,修改时需经过确认 */ import Vue from "vue";import "/icons"; // 图标 import ByuiQueryForm fr…...
Linux之旅: 基础知识点的终极指南
文章目录 1、Linux的目录结构2、ls命令3、管理文件和目录4、linux命令使用细节和技巧5、权限管理基本命令6、搜索命令7、管道符与重定向8、压缩和解压命令9、用户及vim编辑器10、用户和用户组管理一、Linux系统用户账号的基本管理二、Linux系统用户组的管理 1、Linux的目录结构…...
C#部分方法有什么用处?和传统方法有什么区别?什么时候用合适?
在C#中,部分类(partial class)和部分方法(partial method)是两个不同的概念,但它们经常一起使用,特别是在代码生成和框架设计中。下面我将分别解释这两个概念,并讨论它们的用处、与传…...
elasticsearch hanlp插件远程词典配置
elasticsearch hanlp插件远程词典配置 背景远程词典配置新增远程词典文件修改hanlp-remote.xml自动加载词典 远程词典测试 背景 在使用elasticsearch的过程中,总会遇到与分词相关的需求,这里将针对常用的elasticsearch hanlp(后面统称为 es …...
力扣每日一题 6/18 字符串/模拟
博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2288.价格减免 【中等】 题目: 句子 是由若干个单词组成的字符…...
架构设计 - Nginx Proxy Cache 缓存配置
摘要: web 应用业务缓存通常3级: 一级缓存:JVM 本地缓存 二级缓存:Redis集中式缓存 三级缓存:Nginx Proxy Cache 缓存 或 Nginx Lua 缓存 四级缓存:静态资源CDN缓存 本文主要分享 Nginx Proxy Cache 缓…...
【前端】HTML5基础
目录 0 参考1 网页1.1 什么是网页1.2 什么是HTML1.3 网页的形成 2 浏览器2.1 常用的浏览器2.2 浏览器内核 3 Web标准3.1 为什么需要Web标准3.2 Web标准的构成 4 HTML 标签4.1 HTML语法规范4.1.1 基本语法概述4.1.2 标签关系4.1.2.1 包含关系4.1.2.2 并列关系 4.2 HTML基本结构标…...
9个最佳性能测试工具(2024)
1、前言 性能测试检查软件程序在预期工作负载下的速度、响应时间、可靠性、资源使用情况和可扩展性。性能测试的目的不是发现功能缺陷,而是消除软件或设备中的性能瓶颈。 性能测试为利益相关者提供有关其应用程序的速度、稳定性和可扩展性的信息。更重要的是&…...
RTthread+STM32F407ZGTx+烟雾报警检测+蜂鸣器报警+LED闪烁||使用RTthread Studio
目录 实验背景 1.安装环境 2.配置环境 3.先编译下载实例程序2,观察DS0是否闪烁 4.实验方法 5.实例代码 6.硬件连接 7.实验效果 8.关于这次开发遇到的问题 1.反应慢,都熄灭1分钟多了,才报的问题? 2.关于rt_pin_mode(KEY…...
k8s资源的基本操作
文章目录 一、Namespace1、概述2、预定义的k8s命名空间2.1、default2.2、kube-public2.3、kube-system2.4、kube-node-lease 3、命名空间基本操作3.1、查看3.1.1、查看所有的命名空间3.1.2、查看指定的命名空间3.1.3、指定输出格式3.1.4、查看ns详情 3.2、创建3.2.1、命令行创建…...
19.面包屑导航制作
面包屑导航制作 官网:组件 | Element 1. 在layout下新建BreadCrumb.vue BreadCrumb.vue <template><div class"bread-text"><el-breadcrumb class"bred"separator"/"><el-breadcrumb-item v-for"item in…...
做动画?Animatediff 和 ComfyUI 更配哦!
如果从工作流和内存利用率的角度来说,Animatediff 和 ComfyUI 可能更配一些,毕竟制作动画是一个很吃内存的操作。 首先,我们需要在管理器中下载 Animatediff 插件,当然也可以直接导入听雨的工作流,然后在管理器的安装…...
笔记-python里面的xlrd模块详解
那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel&…...
oracle将字符串中的字符和数字拆分开等功能
将字符串中的字符和数字拆分开 create or replace procedure F_GetNumber1( inString IN VARCHAR2,n_return1 out varchar2, n_return2 out varchar2) ISDCHAR VARCHAR2(1024); OUTCHAR VARCHAR2(1024); j number default 0; ulen number; BEGINOUTCHAR:;DCHAR:TRIM(inStr…...
汇编基础之使用vscode写hello world
汇编语言(Assembly Language) 概述 汇编语言(Assembly Language)是一种低级编程语言,它直接对应于计算机的机器代码(machine code),但使用了更易读的文本符号。每台个人计算机都有…...
APS计划排程系统如何打破装备使用约束
APS计划排程系统是离散制造型企业在计划控制方向的重要支撑,它提供的是交期预测、订单排产计划、物料采购计划、人力分配计划等等。近些几年来,多品种、小批量、多订单的生产模式,让企业的计划员应接不暇、疲累不堪,传统的人工经验…...
gigachad - suid
gigachadeasyftp利用、google反图搜索、 suid提权、s-nail 提权 主机发现 ┌──(kali㉿kali)-[~/桌面/OSCP] └─$ sudo netdiscover -i eth0 -r 192.168.44.138/24服务探测 ┌──(kali㉿kali)-[~/桌面/OSCP] └─$ sudo nmap -sV -A -T 4 -p- 192.168.44.138 |_/kingchad…...
QtScript模块
在Qt中,可以使用Qt Script模块来将C类和方法绑定到Qt脚本引擎中,从而使得可以在Qt脚本中调用这些C类和方法。以下是一个简单的示例,演示了如何在Qt中将C类暴露给Qt Script引擎: 假设有一个名为 MyClass 的C类,其头文件…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
