当前位置: 首页 > news >正文

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,满足下列条件,需要做:

  • 当MLRU队列中的缓冲页达到了BUFFERPOOL中定义的lru_max_dirty参数后
  • 清页线索过于繁忙。即一个用户需要获得一个可用的缓冲页,但是所有的缓冲页的指针都在MLRU内

不阻塞

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.面包屑导航制作

面包屑导航制作 官网&#xff1a;组件 | 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 更配哦!

如果从工作流和内存利用率的角度来说&#xff0c;Animatediff 和 ComfyUI 可能更配一些&#xff0c;毕竟制作动画是一个很吃内存的操作。 首先&#xff0c;我们需要在管理器中下载 Animatediff 插件&#xff0c;当然也可以直接导入听雨的工作流&#xff0c;然后在管理器的安装…...

笔记-python里面的xlrd模块详解

那我就一下面积个问题对xlrd模块进行学习一下&#xff1a; 1.什么是xlrd模块&#xff1f; 2.为什么使用xlrd模块&#xff1f; 3.怎样使用xlrd模块&#xff1f; 1.什么是xlrd模块&#xff1f; ♦python操作excel主要用到xlrd和xlwt这两个库&#xff0c;即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

汇编语言&#xff08;Assembly Language&#xff09; 概述 汇编语言&#xff08;Assembly Language&#xff09;是一种低级编程语言&#xff0c;它直接对应于计算机的机器代码&#xff08;machine code&#xff09;&#xff0c;但使用了更易读的文本符号。每台个人计算机都有…...

APS计划排程系统如何打破装备使用约束

APS计划排程系统是离散制造型企业在计划控制方向的重要支撑&#xff0c;它提供的是交期预测、订单排产计划、物料采购计划、人力分配计划等等。近些几年来&#xff0c;多品种、小批量、多订单的生产模式&#xff0c;让企业的计划员应接不暇、疲累不堪&#xff0c;传统的人工经验…...

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中&#xff0c;可以使用Qt Script模块来将C类和方法绑定到Qt脚本引擎中&#xff0c;从而使得可以在Qt脚本中调用这些C类和方法。以下是一个简单的示例&#xff0c;演示了如何在Qt中将C类暴露给Qt Script引擎&#xff1a; 假设有一个名为 MyClass 的C类&#xff0c;其头文件…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API&#xff0c;用于在函数组件中使用 state 和其他 React 特性&#xff08;例如生命周期方法、context 等&#xff09;。Hooks 通过简洁的函数接口&#xff0c;解决了状态与 UI 的高度解耦&#xff0c;通过函数式编程范式实现更灵活 Rea…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...