IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 04.CheckPoint机制详解 -> 正文阅读

[大数据]04.CheckPoint机制详解

概述

CheckPoint主要的作用是将缓冲池中的脏页刷新到磁盘,同时解决了以下三个问题:

  • 缩短数据库的恢复时间;

当数据库发生宕机时,不需要重做所有的日志,只需要对CheckPoint之后的重做日志进行恢复,从而大大缩短恢复的时间。

  • 缓冲池不够用时,将脏页刷新到磁盘;

当缓冲池不够用时,根据LRU算法删除最近最少使用的页,如果该页为脏页,那么会强制执行CheckPoint,将脏页刷新到磁盘。

  • 重做日志不够用时,刷新脏页;

重做日志空间是循环使用的,并不能无限增大。当重做日志中的脏页都被刷新到磁盘时,数据库宕机时恢复数据则不需要这部分重做日志。当这部分重做日志没有被刷新到磁盘,则需要强制执行CheckPoint,将重做日志对应的脏页刷新到磁盘。

CheckPoint工作详解

在InnoDB存储引擎内部有两种CheckPoint方式,分别是Sharp CheckPoint、Fuzzy CheckPoint,他们的区别在于每次刷新磁盘页数、每次取脏页的位置有,以及触发CheckPoint时间不同。具体细节往下看。

Sharp CheckPoint

当数据库关闭时将所有的脏页都刷新回磁盘,这是默认的工作方式,参数配置:innodb_fast-shutdown=1。

Fuzzy CheckPoint

如果在数据库运行时使用sharp checkpoint,那么对数据库的可用性影响会很大,所以在InnoDB内部会使用Fuzzy CheckPoint进行一部分脏页的刷新。

执行Fuzzy CheckPoint存在以下四种场景。

Master Thread CheckPoint

在Master Thread中会执行CheckPoint,以每秒或每十秒的速度将缓存池脏页列表中一定比例的脏页刷新回磁盘。这个过程是异步的,不会堵塞用户查询线程。

FLUSH_LRU_LIST CheckPoint

如果脏页列表没有100个可用空闲页,那么InnoDB存储引擎会将LRU列表尾端的页移除,如果这些页中有脏页,那么会执行CheckPoint。

Async/Sync Flush CheckPoint

当重做日志不可用时会强制将一些脏页刷新回磁盘,此时脏页是从脏页列表(Flush List)中选取的。

如图最新写入的重做日志位置标记redo_lsn,刷新回磁盘最新页的位置标记checkpoint_lsn。redo_lsn和checkpoint_lsn之间是未刷新到磁盘的重做日志,no_flush_size称为未刷新磁盘重做日志容量。

  1. 当no_flush_size<整个重做日志容量的75%时,不需要刷新任何脏页到磁盘;
  2. 当 整个重做日志容量的75%<no_flush_size<整个重做日志容量的90%时触发Async Flush(从脏页列表中刷新足够的脏页回磁盘,满足no_flush_size<整个重做日志容量的75%条件)
  3. no_flush_size>整个重做日志容量的90%时,会进行Sync Flush操作(从脏页列表中刷新足够的脏页回磁盘,满足no_flush_size<整个重做日志容量的75%条件),这种情况很少出现,出现原因一般为设置的重做日志文件大小太小。

说明:Async Flush与Sync Flush区别在于,Async Flush会堵塞发现问题的用户查询线程,Sync Flush会堵塞所有的用户查询线程。从MySQL5.6版本之后这部分刷新操作放到了单独的Page Cleaner Thread中,所以不会堵塞用户查询线程。

Dirty Page too much CheckPoint

如果脏页数量太多,会触发执行CheckPoint,目的时保证缓冲池中有足够的可用页。

可以通过innodb_max_dirty_pages_pct参数配置,值为75的含义是,当缓冲池中脏页的数量占据75%时,强制执行CheckPoint,刷新一部分脏页到磁盘。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-27 11:23:07  更:2022-04-27 11:25:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:25:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码