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

回滚不依赖redo log啊。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏