02 SQL更新语句是如何执行的

binlog

1.为什么需要binlog?
binlog时Mysql的Server层的日志,是所有引擎都能用的。功能是数据归档也就是备份。但是不具备crash-safe的能力。

redolog

1.为什么需要redolog
每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。
2.redolog是怎么发挥作用的
其实就是 MySQL 里经常说到的 WAL 技术,WAL 的全称是 Write-Ahead Logging,它的关键点就是先写日志,再写磁盘

当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log里面,并更新内存(数据),这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面(更新表数据到磁盘)。

InnoDB 的 redo log 是固定大小的,比如可以配置为一组 4 个文件,每个文件的大小是 1GB。是循环写的,从头开始写,写到末尾又回到开头开始写。
redolog有缓存,事务执行时先把redolog写到redolog buffer,事务完成了再统一写到磁盘
3.redolog的crash-safe能力
有了redolog就能保证数据库异常重启的情况,之前已提交的记录都不会丢失。因为redolog记录的是未更新到磁盘的数据操作。
4.redolog的checkpoint什么情况下会推进
(1)有一个线程一致在做将redolog的操作更新到磁盘的表数据的操作
(2)redolog满了就需要停下来推进checkpoint [TODO]

好问题

1.redolog将数据记录更新到磁盘的过程,也就是推进checkpoint的过程
在系统不忙的时候,将数据从磁盘读取到内存(如果要刷盘的数据页不在内存),然后用redolog里的记录更新内存,然后写入到磁盘
2.为什么说MyISAM没有crash-safe的能力,binlog不能用来做崩溃恢复吗?
[TODO] 异常重启后,MyISAM是放着不管的,下次使用数据的时候提示“表损坏,需要恢复”,不能恢复的原因见第15篇
3.binlog逻辑日志和redolog物理日志有啥区别
[TODO] 见第15篇和23篇
4.commit后做了两个动作,把WAL文件持久化到磁盘,然后更新数据库(磁盘记录)。是否是完成WAL持久化到磁盘,然后才将更新数据库和索引的记录到磁盘?
是。并且更新的数据写到磁盘是后台操作。
5.为什么使用WAL能解决直接更新数据到磁盘IO成本高的问题?
使用WAL,事务commit直接写数据到磁盘比写日志的顺序IO成本高,WAL顺序IO性能高一些。
6.如果用binlog做断电恢复,没写log的不提交,回滚操作用undolog实现,redolog是否没必要存在
[TODO] undolog是依赖redolog来恢复的,没有redolog,undolog就不完整。见第3篇
7.2PC的过程如果binlog写完后Mysql故障重启了,binlog和redolog是否就不一致了,会导致用binlog恢复的数据库数据和当前数据库不同?
不会,这种情况重启后会提交事务。redolog记录里有事务id,如果在binlog里能找到对应的事务,redolog就提交
8.在一个大事物或长事物里,一边执行sql一边写redo log吗?未提交的事物也会写到redo log file吗?
会先写一块内存,叫做log_buffer里面,在提交的时候再一次性写到磁盘
9.innodb结构为内存池和后台线程 , 其中内存池里存在redo日志缓冲 和 缓冲池,其中缓冲池以页为单位缓冲磁盘数据 。
(1)更新语句时执行器调用innodb存储引擎先从内存读数据,指的就是从innodb缓存池中读取数据,没有的话就去读取磁盘找, 找到后再同步到缓冲池。
(2)Server层的查询缓存和innodb的缓冲池不是一个东西
10.备份也是有锁的,特别是myisam引擎
[TODO] 见第6篇
11.高并发地插入数据,有哪些情况下会导致数据库插入变慢。
(1)redolog和binlog会有影响
(2)[TODO] 锁的影响大一些
12.redolog和binlog是在内存中还是在磁盘中?如果在内存和在磁盘上都有怎么保证突然断电时的一致性?
[TODO] redolog有redolog buffer,binlog有binlog cache。保持数据可以看第15篇和第23篇
13.两阶段提交是原子性的吗?
不是。如果是原子性的就不用两阶段提交了。
14.如果更新语句涉及到索引,索引是什么时候被更新的,是否跟数据一样,都是先更新内存,再更新磁盘?
索引也是数据的一部分,是一样的策略
15.事务失败回滚是否也会写redolog和binlog,回滚涉及索引更细的话,如何更新索引?
会写redolog,打上回滚标签,binlog直接丢弃。[TODO] 回滚都是直接把没用的内存版本删除。
16.如果redolog写满,需要停下来将数据写入磁盘。这时候整个数据库处于阻塞状态吗?当有大量数据涌入,存在数据丢失的风险吗?
更新会被堵住。但是不算数据丢失,因为事务提交不了。数据丢失的定义是本该存在的数据没了,但是这时候并没有告知客户端事务成功,就不算丢失。
17.update是先写redolog,再把数据写内存,那么写入的这条数据在内存中的驻留时间是怎么处理的?是redo log写入磁盘后从内存中删除吗?
不会删除,除非内存不够用,不过在从内存删除之前会保证持久化到磁盘。这里说的应该是redolog buffer
数据在内存中的驻留时间涉及到innodb buffer pool的设计,不活跃的数据页可能被淘汰。
18.2PC的过程,如果redolog 处于prepared状态时数据库崩溃后恢复,存储引擎发现写了redolog,但是没写binlog,存储引擎会把事务回滚。
如果一个更新语句,写到存储引擎的redolog,而且状态是已提交,还没来得及同步到磁盘数据区。
这时,如果来一个查询,此条数据,是会查询出来的对吧。 那么这时候的查询流程是什么样子的,每次会先到redolog里查询下,有没有数据,因为redolog也是磁盘文件,这是效率会高吗?
这条数据大概率还在innodb的buffer pool,直接从内存返回。[TODO] 如果内存页已经被淘汰,执行的流程是什么样的?猜测是从磁盘读出来并更新内存,然后应用redolog到对应的记录。
19.2PC的过程,redolog处于prepared的状态时数据库故障重启了,数据是一致的吗
重启回来之后这个事务会回滚。binlog中没有这条记录的操作,用binlog恢复的数据和原数据库是一致的。
20.2PC的过程,binlog写入了,redolog未提交,此时我断开连接,这个事务应该是失败的。按照上面的说法,恢复的时候binlog这一条记录存在了,所以这条记录应该存在。这是mysql的bug?
此时你主动断开连接,这个事务就是“异常”,而不是“失败”。异常的事务,状态可能是提交,也可能是未提交,所以记录存在,是合理状态的一种
21.innodb_flush_log_at_trx_commit 和 sync_binlog 都设置成1,那么都是每个事务结束直接写磁盘,那是不是就浪费了WAL的作用,这样每一次的更新操作都需要写进磁盘,然后磁盘也要找到对应的那条记录,然后再更新,整个过程 IO 成本、查找成本都很高。
wal可以提升事务提交的性能,因为是顺序写。
22.2PC在redologprepared已经把redolog刷到磁盘了
23.异常重启过程redolog是怎么发挥作用的?
[TODO]
24.数据页指的是什么?
MySQL的记录是以“页”为单位存取的,默认大小16K。也就是说,你要访问磁盘中一个记录,不会只读这个记录,而会把它所在的16K数据一起读入内存
25.为什么binlog没有crash-safe的能力呢?不是写磁盘了吗?可以在重启后把宕机前的binlog中记录下来的事务sql语句执行一遍?
一开始没这么设计,实际上现在的binlog也不够,崩溃恢复需要日志和引擎内存状态配合的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode100-034】【链表/优先队列】合并k个升序链表

【题干】 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 【思路】 其实就是多路归并用一个优先队列简化k个头部的比较和选最小节点的过程然后就只剩一些细节处理啦都没啥好写的今天这题。。。…

Vue3 使用 Teleport 封装 一个 Dialog

文章目录 什么是Teleport ?用法:1. 通过 to 指定传送的位置2. 禁用 teleport3. 共享一个 Teleport封装一个Dialog效果:什么是Teleport ? 是一个内置组件,它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去。 简单的说,Telep

NVIDIA深入理解之pynvml库

一、前言 写在前面 该文章是对我之前文章《Fedora上安装NVIDIA闭源显卡驱动》的一个拓展,正好寒假闲的没事干不如加深一下对NVIDIA的了解。Python是当前非常流行的一门编程语言,它以kiss为设计思想,能封装就能封装,给用户提供比…

【Linux Shell】11. 输入/输出 重定向

文章目录 【 1. 重定向简介 】【 2. 输出重定向 】【 3. 输入重定向 】【 4. Here Document 】【 5. /dev/null 文件 】 【 1. 重定向简介 】 大多数 UNIX 系统命令从终端接受输入并将所产生的输出发送回​​到原来输入的终端。一个命令通常从标准输入的地方读取输入&#xff…

信号的互相关计算及时延估计

1. 信号的互相关计算 互相关反映向量x和移位(滞后)向量y之间的相似性。 最直观的解释是:互相关的作用是为了找到信号在哪一时刻与另一信号最像(另一信号为本身时就是自相关)! 滑动求互相关(图…

海康威视摄像头+服务器+录像机配置校园围墙安全侦测区域入侵侦测+越界侦测

一、适用场景 1、校园内,防止课外时间翻越围墙到校外、从校外翻越围墙到校内; 2、通过服务器摄像头的侦测功能及时抓图保存,为不安全因素提供数字化依据; 3、网络录像机保存监控视频,服务器保存抓拍到的入侵与越界&am…

【React】02-如何理解React通过对DOM的模拟,最大限度地减少与DOM的交互

如何理解React通过对DOM的模拟,最大限度地减少与DOM的交互 背景分析关于虚拟DOM 背景 在学习React的过程中,发现很多文档上关于React的高效都有这么一句话的描述——React通过对DOM的模拟,最大限度地减少与DOM的交互,对于我这种前…

mysql服务多实例运行

1、官网下载mysql安装包 https://downloads.mysql.com/archives/community/ 2、解压安装包 tar -zxvf mysql-8.1.0-linux-glibc2.28-aarch64.tar.xz -C /usr/localmv /usr/local/mysql-8.1.0-linux-glibc2.28-aarch64 /usr/local/mysql 3、创建mysql用户组 groupadd…

Java面试汇总——redis篇

1、什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存就形同虚设(只有数据库查到了,才会让redis缓存,但现在的问题是查不到),会频繁的去访问数据库。 解决…

这款Web剪藏工具绝了,支持10+平台内容剪辑同步!

前言 Web Clipper 是一个开源项目,旨在帮助用户轻松地保存和组织网页内容。它可以作为浏览器插件安装到常见的浏览器中,如Chrome、Firefox 等,用户可以使用它来保存网页、截取文章、添加标签和注释等操作,从而方便地管理和分享自…

python画彩虹和小熊

前言 今天,我们来画两个简单的图形。 一、彩虹 彩虹,又称天弓(客家话)、天虹、绛等,简称为"虹",是气象中的一种光学现象。当太阳光照射到半空中的水滴时,光线被折射及反射&#xf…

任务调度中心

可以服务器配置和权限,分配任务执行。当服务器下线后,任务会被在线服务器接管,当重新上线后会在次执行任务。接管任务的服务器会释放任务。调度过程的实现,可以二次开发。基于 netty tcp 通信开发。 下载地址: http:/…

4.4 TILING FOR REDUCED MEMORY TRAFFIC

我们在CUDA中使用设备内存方面有一个内在的权衡:全局内存大但速度慢,而共享内存小但速度快。一个常见的策略是将数据划分为称为tile的子集,以便每个tile都适合共享内存。tile一词”借鉴了一个类比,即大墙(即全局内存数…

VSCode搭建 .netcore 开发环境

一、MacOS 笔者笔记本电脑上安装的是macOS High Sierra(10.13),想要尝试一下新版本的.netcore,之前系统是10.12时,.netcore 3.1刚出来时安装过3.1版本,很久没更新了,最近.net8出来了,想试一下,…

多模态推荐系统综述:四、模型优化

四、模型优化 由于多模态信息的存在,当多模态编码器和推荐模型一起训练时,模型训练的计算要求大大增加。因此,多模态推荐模型在训练过程中可以分为两类:端到端训练和两步训练。 端到端训练可以利用反向传播获得的每个梯度来更新模…

【算法设计与分析】网络流

目录 max-flow 和 min-cut流网络 Flow network最小割 Min-cut最大流 Max-flow Greedy algorithmFord–Fulkerson algorithm剩余网络 Residual networkFord–Fulkerson algorithm算法流程 最大流最小割理论 max-flow min-cut theorem容量扩展算法 capacity-scaling algorithm时间…

Hyperledger Fabric 交易过程中读写集语义

https://hyperledger-fabric.readthedocs.io/zh_CN/latest/readwrite.html 交易模拟和读写集 背书节点 在模拟交易期间,会为交易准备一个读写集。读集 包含了模拟期间交易读取的键和键的版本的列表。写集 包含了交易写入键(可以与读取集中的键重叠&…

【读书笔记】《我的天才女友》

这套书一共有四本,这个是第一本,作者意大利人埃莱娜费兰特,这个只是她的笔名,至今还不知道这位作者是谁,她以每年一本书的速度出了“那不勒斯四部曲”,这四本书以两个女主人公莉拉和莱农的友情为主线。 莉拉…

ElasticSearch 集群搭建与状态监控cerebro

单机的elasticsearch做数据存储,必然面临两个问题:海量数据存储问题、单点故障问题。为了解决存储能力上上限问题就可以用到集群部署。 海量数据存储问题:将索引库从逻辑上拆分为N个分片(shard),存储到多个节点单点故障问题:将分片数据在不同节点备份 (r…

力扣题:高精度运算-1.3

力扣题-1.3 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:43. 字符串相乘 解题思想:类似计算时采用的竖式乘法。首先取得num2的低位,并补齐对应的0,然后与num1进行相乘,然后进行字符串的相加操作。…