每日一个MySQL问题: MTS 高并发下主从表空间不一致的问题

简单记录原因,最近我也遇到这样的问题,涉及的知识点其实很多,我也仅仅是简单分析了一下,供参考。模拟版本8.0.28。


一、问题说明和模拟方式

就是主从一个表,主库大约600M,从库大约900M,当然主从的环境肯定是一致的,但是从库的并发比较高MTS使用了16个 worker线程,从并发来看基本都在使用。

我模拟的方法也很简单,无非就是主库开启writeset,将参数binlog_transaction_dependency_history_size调大,这样能够保证last commit尽可能降低,如下:

mysql> set global binlog_transaction_dependency_history_size=1000000;
mysql> set global binlog_transaction_dependency_tracking='writeset';
表结构
mysql> show create table mytestpri  \G
*************************** 1. row ***************************
       Table: mytestpri
Create Table: CREATE TABLE `mytestpri` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(20) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2337812 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
1 row in set (0.01 sec)

然后循环每次插入100行数据。使用语句
insert into mytestpri(name) select name from mytestpri limit 100;

这样生成的binlog的last commit大概如下:

反正就是很多相同的可以在从库并发执行。这样达到的目的就是主库看起来是连续插入的,因为是自增,但是到了从库并发下则不是连续的,是可以并发的,那么比如990-1000这个数据可能在1000-1010之后才插入,虽然提交是考虑了顺序的(slave_preserve_commit_order=ON),但是执行并没有顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

出世&入世

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值