每日一个MySQL知识点:主从表大小相差巨大和一个BUG

文章探讨了MySQL主从复制中出现的巨大表空间差异问题,主要集中在readview的可见性判断和purge线程的工作机制上。readview影响一致性读取,而purge线程负责清理历史记录和undo日志。长时间运行的查询可能导致从库表膨胀,因delflag记录和undo信息无法清理。此外,文章提到了checksumtable的bug,导致同一数据在不同rowformat下校验结果不一致。
摘要由CSDN通过智能技术生成

一、主从相同表空间相差巨大

1.1 问题描述

我们知道MySQL主从基本上是逻辑的复制,那么有少量的空间差异没有问题,但是本案例主库表只有10G,但是从库表有100G,这么大的差距比较少见,需要分析原因。

1.2 问题分析

实际上这个问题还是要从read view和purge 线程2个方面进行分析,不得不在老生常谈一下(复制一下以前的文章)。

1.2.1 read view和可见性简述

一致性读取(consistent read),根据隔离级别的不同,会在不同的时机建立read view,如下:

  • RR 事务的第一个select命令发起的时候建立read view,直到事务提交释放
  • RC 事务的每一个select都会单独建立read view

有了read view 就能够对每行数据的可见性进行判断了,下面是read view中的关键属性

  • m_up_limit_id:如果行的trx id 小于了m_up_limit_id则可见。
  • m_low_limit_id:如果行的trx id 大于了m_low_limit_id则不可见。
  • m_ids:是用于记录建立read view时刻的读写事务的vector数组,用于对于m_up_limit_id和m_low_limit_id之间的trx需要根据它来进行判定,是否处于活跃状态。
  • m_low_limit_no则用于记录建立read view时刻的最小trx no,主要用于purge线程判断清理undo使用。

而对于可见性的判断我们可以参考如下函数:

/** Check whether the changes by
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

出世&入世

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

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

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

打赏作者

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

抵扣说明:

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

余额充值