首页 > 数据库 >Mysql之刷盘机制

Mysql之刷盘机制

时间:2024-03-19 11:56:42浏览次数:27  
标签:binlog log 写入 innodb 提交 Mysql 之刷盘 机制 redo

一、刷盘机制总览

  • 刷盘过程

mysql刷脏数据在写redo之后,逻辑跟oracle一致。

checkpoint/commit -> 内存中的redo到redolog文件 -> 内存中的脏数据到数据盘。

但是mysql多一个环节,就是把binlog从binlog cache写入到binlog文件中。binlog cache不是共享内存,是为每个client分配的私有内存,是mysql server管理的。而log buffer是共享内存,由innodb管理,属于innodb存储引擎内存。

  • 刷盘参数

innodb_flush_logxxx是可能指刷redo也可能指刷binlog

innodb_xx_dirty_page_xx或者innodb_xx_page_xx是指的刷脏页的参数(buffer pool的脏页刷到磁盘中)

  • 刷日志最重要的参数有2个

1.innodb_flush_log_at_trx_commit刷log buffer的redo到log file中

2.sync_binlog刷binlog cache的事务到binlog文件中

两个参数的默认值都是1,表示提交即写log(redolog和binlog都写),也就是mysql日志双写。

二、刷盘的三个类型

落盘可以从3个方向分析

  • binlog

binlogcache是server为每个客户端分配的内存池,事务未提交前的数据放入binlogcache,提交后写入binlog日志文件。
刷binlog的重要参数就是sync_binlog,0表示关闭写binlog,1表示每次提交便写binlog到磁盘(默认),N(N>=2)表示binlog组提交,可能丢失数据。

  • redolog

redo在内存中存放在logbuffer,redo写入logfile是顺序循环写的,所以会比data写快(data一般是离散写)。
logbuffer的重要参数是innodb_flush_log_at_trx_commit。0表示每秒写入磁盘,可能会丢失事务;1表示每次提交就写入磁盘(默认);2表示提交或每秒写入磁盘,也不会丢失事务。(oracle的redo从redologbuffer到redo logfile:每3秒;每有提交;切换日志;1/3满或1MB。可以看出mysql跟oracle的redo落盘机制很类似,只是细节有些区别)

  • data

bufferpool中的有个change buffer,也就是”插入缓存“,缓存了二级索引的变更信息,通过合并写入二级索引减少离散IO以提高性能。
刷脏页一般发生在commit之后,redo和binlog提交之后。innodb可以根据脏页在bufferpool中的水位强制刷脏页。
Adaptive Flushing根据数据库负载情况调整刷每秒应该刷多少脏页。

原文链接:https://blog.csdn.net/qq_40687433/article/details/112540401

标签:binlog,log,写入,innodb,提交,Mysql,之刷盘,机制,redo
From: https://www.cnblogs.com/OpenSourceSite/p/18082443

相关文章

  • 配置MySQL-项目BotBattle
    目录数据库配置常用操作项目地址:https://github.com/aijisjtu/Bot-BattlegraphLRA[配置数据源]-->B[建立连接]B-->C[执行SQL语句]C-->D[处理结果]D-->E[关闭连接]配置数据源:设置数据库地址、用户名和密码等。建立连接:与数据库服务器建立通信通道......
  • 【MySQL】1.基础语句知识
    1.MySQL概述SQL登录mysql[-h127.0.0.1][-P3306]-uroot-p//连接mysqlSQL语句分类DDL(DataDefinitionLanguage)数据定义语言,用来定义数据库对象(数据库,表,字段)DML(DataManipulationLanguage)数据操作语言,用来对数据库表中的数据进行增删改DQL(DataQuery......
  • mysqly索引(explain 执行计划)
    关键词执行计划EXPLAIN+语句查看mysql优化后的语句showwarnings;EXPLAIN执行后,各列的含义要点:select_type如何查询表type如何查询行key如何使用索引key_len索引使用多少rows行预计使用多少extra表的额外信息1.idid列的编号是select的序列号......
  • Mysql之innodb架构
    Innodb存储引擎的架构内存结构BuferPool缓冲池是主内存中的一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删改查操作时,先操作缓冲池中的数据(若缓冲池没有数据,则从磁盘加载并缓存),然后再以一定频率刷新到磁盘,从而减少磁盘IO,加快处理速度。缓冲池以Page页为......
  • MySQL系列:索引失效场景总结
    相关文章数据库系列:MySQL慢查询分析和性能优化数据库系列:MySQL索引优化总结(综合版)数据库系列:高并发下的数据字段变更数据库系列:覆盖索引和规避回表数据库系列:数据库高可用及无损扩容数据库系列:使用高区分度索引列提升性能数据库系列:前缀索引和索引长度的取舍数据库系列:My......
  • 深入理解mysql 从入门到精通
    1.MySQL结构由下图可得MySQL的体系构架划分为:1.网络接入层2.服务层3.存储引擎层4.文件系统层1.网络接入层提供了应用程序接入MySQL服务的接口。客户端与服务端建立连接,客户端发送SQL到服务端,Java中通过JDBC来实现连接数据库。2.服务层管理工具和服务:系统管理和控......
  • rocky9 编写一键安装mysql 的sh脚本
    基本操作步骤1、虚拟机最小化安装rocky9系统,安装后克隆一个系统;1个用来获取下载的rpm包,一个用来编写sh测试脚本;2、修改虚拟机的 yum配置文件,获取获取rpm程序 :启用缓存,并修改yum下载软件的路径;3、参考教程安装,安装mysql;Centos(rocky)yum安装mysql,切换路径、优化配置并......
  • 本地mysql 和云服务mysql的区别
    本地MySQL和云服务MySQL确实存在一些明显的区别,主要体现在以下几个方面:数据存储与访问方式:本地MySQL数据库通常直接安装在用户的计算机或服务器上,数据存储在本地硬盘中,用户可以直接通过本地网络或应用程序访问。而云服务MySQL则是将数据存储在云服务器上,用户需要通过互联网......
  • 本地mysql测试成功后上传至云服务器出现了这么多问题?
    本地MySQL数据库迁移至云服务器的过程中可能出现多种问题,以下是常见的一些原因及其解决思路:权限问题:账户权限:本地MySQL数据库的用户权限设置可能与云服务器上的MySQL实例不同,比如未授权远程连接或赋予了错误的权限。你需要确认云服务器MySQL数据库的用户是否有从远程IP......
  • MySQL复习笔记
    MySQL概述-mysql启动netstartmysql80netstopmysql80-mysql客户端连接mysql-uroot-pSQLsql分类分类全称说明DDLDataDefinitionLanguage数据定义语言,用来定义数据库对象DMLDataManipulationLanguage数据操作语言,用来对数据库表中的数据进行增删改DQLData......