暂无图片
[mysql]大事务会不会写满undo、redo?
我来答
分享
清风生
2022-05-26
[mysql]大事务会不会写满undo、redo?

mysql一个大事务,会不会把undo、redo写满?写满后mysql是怎么处理这个未提交事务的?实测,执行一个delete 1000w的sql,undo log一直增长远远超过了innodb_max_undo_log_size大小,redo log大小还是不变,明明delete的数据量应该远远超过了redo大小了,那这部分redo写到哪里去了?

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
chengang

innodb_max_undo_log_size 这个参数是防止单个表空间过大,超过这个大小将会截断。
undo最终大小 我认为是innodb_undo_tablespaces *innodb_max_undo_log_size


redo写满会触发刷盘操作
undo log写满则事务失败

暂无图片 评论
暂无图片 有用 2
打赏 0
暂无图片
2022-05-27
请问一下 大事务如果需要5GB的REDO LOG; 而实际REDO配置的是500MB.那么需要切换REDO LOG 10次吗? 要是这样 该事务的起始位置就不知道了,假如发生事务提交失败,要回滚,就无法完整回滚事务.
清风生
题主
2022-05-27
事务未提交的脏数据也可以刷盘吗?那如果事务最终失败,是要依靠undo来回滚事务?而且要清理磁盘上的脏数据?
chengang
答主
2022-05-27
事务的回滚就是靠的undo log MVCC 机制就确保了 在什么隔离级别该看到什么数据,对于已提交的数据,有可能对另外一个事务来说,也是不可见的,依然需要undolog.

UNDO 会 还有 BINLOG CACHE ,BINLOG CACHE TEMP
REDO 不会 REDO 写满了会切换.

暂无图片 评论
暂无图片 有用 0
打赏 0
清风生
题主
2022-05-26
1,实测undo文件一直增长远远超过了innodb_max_undo_log_size大小,这个最终大小限制取决于磁盘大小还是什么参数? 2,如果几个redo都写满了但事务还没跑完,会出现什么情况?
chengang

回滚不依赖redo log啊。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
mysql数据库定时备份占用大量线程,导致全局锁表,有啥好的解决方法么
回答 6
在从库上备份
mysql - 是否有序列,如果有存放序列信息的数据字典是什么?谢谢
回答 4
mysql没有序列,mariadb里面好像有序列引擎
事务是如何通过日志来实现的?
回答 1
已采纳
在Innodb存储引擎中,事务日志是通过redo和innodb的存储引擎日志缓冲(Innodblogbuffer)来实现的。当开始一个事务的时候,会记录该事务的lsn(logsequencenumbe
MySQL LIMIT 如何改写成Oracle limit?
回答 1
已采纳
SELECTFROM(SELECTROWNUMRNFROM(SELECTFROMt)AWHEREROWNUM<115)WHERERN>100;这是12以前12以后SELECTFROMtOF
mysql关于多表join关联的执行流程
回答 5
在驱动表上建立条件过滤索引。在被驱动表上建立关联字段索引
mysql 里面输入相同数据怎么操作?
回答 1
是想不允许重复?
mysql inodb_index_stats 这个表在5.5的版本不存在吗?
回答 1
5.6.6开始有
mysql数据库备份怎么避开federated引擎?
回答 1
mysqlpump支持。就是要分开写。
innodbcluster在两个节点同时故障时如何自动恢复?
回答 1
MGR3节点的单主模式,如果有两个节点主机宕机,临时对外提供服务的方法
锁升级
回答 4
因为其不是根据每个记录来产生行锁的,而是根据每个事务访问的每个页对锁进行管理的,采用的是位图的方式。因此不管一个事务锁住页中一个记录还是多个记录,其开销通常都是一致的。————参考姜承尧《MySQL技