mysql的count知识(MySQL中MTR的概念)
mysql的count知识
MySQL中MTR的概念MTR全称是Mini-Transaction,顾名思义,可以理解为"最小的事务",MySQL中把对底层页面的一次原子访问的过程称之为一个Mini-Transaction,这里的原子操作,指的是要么全部成功,要么全部失败,不存在中间状态。
MTR主要是被用在写undo log和redo log的场景下的。例如,我们要向一个B+树索引中插入一条记录,此时要么插入成功,要么插入失败,这个过程就可以称为一个MTR过程,这个过程中会产生一组redo log日志,这组日志在做MySQL的崩溃恢复的时候,是一个不可分割的整体。
假如我们有一个事务,事务中包含3条语句,那么MTR的概念图如下:
Mini-Transaction一般遵循三条原则:
- 1、the fix rules
- 2、WAL
- 3、force-log-at-commit
这里我们解释下这三条原则:
1、the fix rules
解释第一条规则之前,我们有必要了解下MySQL中的latch的概念,在MySQL中,latch是一种轻量级的锁,与lock不同,它锁定的时间特别短,在innodb中,latch又可以分为mutex(互斥量)和rwlock(读写锁)2种,它的目的在于保证并发线程操作临界资源的正确性。
理解了latch的概念,我们看看the fix rule规则:
修改一个数据页,需要获得这个数据页的x-latch;
访问一个页是需要获得s-latch或者x-latch;
持有该页的latch直到修改或者访问该页的操作完成才释放
2、WAL
WAL技术想必大家比较熟悉,它是Innodb存储引擎之所以支持崩溃恢复的根本,也就是持久化一个数据页之前,需要将内存中响应的日志页先持久化
3、force-log-at-commit
这条原则比较重要,它是指在事务提交的时候,其产生的所有MTR日志都要刷到持久化设备中,从而保证崩溃恢复的逻辑。
之所以介绍MTR,是为了后续介绍MySQL8.0的redo log 优化做准备,在MySQL5.7中,mtr保证了事务内部操作的原子性。当用户进行操作的时候,会更新数据页,同时写redo log,mtr是redo log的载体,存在每个连接会话的私有变量中。当mtr提交时,会将本地redo log拷贝到全局的log_buffer中,为了保证redo log的有序性,需要加锁来访问log_buffer,这把锁就是上面提到的mutex,在这个锁保护下,除了要将本地日志拷贝到全局buffer,还需要将数据页加入了flush_list,供后台线程刷脏,辅助数据库检查点持续往前推进,所以这个锁在旧版本的MySQL中竞争非常激烈。MySQL8.0将这个问题进行了优化,后面的文章中将着重分析。
以上就是MySQL中MTR的概念的详细内容,更多关于MySQL MTR的资料请关注开心学习网其它相关文章!
原文链接:https://cloud.tencent.com/developer/article/1668083
- windows下mysql密码重置(Windows10系统下Mysql8.0.13忘记root密码的操作方法)
- mysqlorder工作原理(详解Mysql order by与limit混用陷阱)
- php考试复习题(php+mysql开发的最简单在线题库在线做题系统完整案例)
- 怎么将mysql彻底卸载(如何把Mysql卸载干净亲测有效)
- mysql按端口查找配置(MySQL中给定父行找到所有子行的解决方案)
- mysql存储过程定义表(MySQL存储过程的创建、调用与管理详解)
- mysql的默认事务隔离级别(啥是 MySQL 事务隔离级别?)
- mysql删除表数据的语句(Mysql实现定时清空一张表的旧数据并保留几条数据推荐)
- mysql数据表实例教程(mysql数据库入门第一步之创建表)
- mysqljoin语句用法(MySQL的join buffer原理)
- mysql8.0中如何导入数据(mysql8.0.20数据目录迁移的方法)
- python中怎么连接mysql(python远程连接MySQL数据库)
- mysql索引优化有哪些(MySQL如何基于Explain关键字优化索引功能)
- mysql时间戳和datetime对比(MySQL时间设置注意事项的深入总结)
- mysql 索引举例(MySQL 各个索引的使用详解)
- phpstudy的mysql无法启动(Windows系统下解决PhPStudy MySQL启动失败问题)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
- 如何追女孩子(如何追女孩子的技巧和方法)
- 是不是快乐全被你拿走了(而是你得到的)
- 世界上只有妈妈好(世界上只有妈妈好的歌词)
热门推荐
- sql中的exists详解(SQL中EXPLAIN命令的使用方法)
- 使用vue-cli构建electron项目(MAC+PyCharm+Flask+Vue.js搭建系统)
- css3字体怎么写(css3个性化字体_动力节点Java学院整理)
- js的异步请求(浅谈JS三座大山之异步和单线程)
- ftp服务器映射到外网(外网远程电脑访问内网的FTP的实现方法)
- 怎样在python中散点图(python使用Plotly绘图工具绘制散点图、线形图)
- serv-u兼容性(解决IIS和Serv-U冲突的问题[Serv-U 7.0])
- sql设置注释(SqlSever 注释符 单行注释与多行注释)
- css3 3d动画效果(CSS3实现任意图片lowpoly动画效果实例)
- sql server事务回滚(SQL Server 添加Delete操作回滚日志方式)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9