主库角色状态:只有update没有insert如图:
从库角色状态:大量的insert,少量的update如图:
另外发现主库的数据空洞问题很严重,分析日志发现,allocating new datafile的数量(只分析12月12日的日志):
主库:11个
从库:2个
所以主库比从库要大20G,另外主从没有任何同步延迟
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的信息,主库和从库的角色状态、数据空洞问题以及日志分析结果表明,可能存在以下几种情况:
主库角色状态:只有UPDATE没有INSERT
UPDATE
操作可能导致数据文件的频繁分配(allocating new datafile
),从而引发数据空洞问题。这是因为UPDATE
操作在某些数据库引擎中会删除旧数据并插入新数据,导致表文件的增长。从库角色状态:大量的INSERT,少量的UPDATE
INSERT
为主的操作模式表明,主库的UPDATE
操作可能被同步为INSERT
操作。这种现象可能与同步规则或触发器的配置有关。UPDATE
操作被重写为INSERT
操作,可能会导致从库的数据量显著增加。主库比从库大20G
allocating new datafile
数量远高于从库(主库11个,从库2个),说明主库的表文件增长更快。这可能是由于主库频繁的UPDATE
操作导致的数据空洞问题。INSERT
为主,数据分布更紧凑,因此占用的空间较小。主从无同步延迟
UPDATE
操作被转换为从库的INSERT
操作。UPDATE
操作,改为批量更新。例如,将多个UPDATE
语句合并为一个SQL语句执行,减少分布式事务开销和节点通信成本。INSERT ON DUPLICATE KEY UPDATE
:如果业务场景允许,可以使用INSERT ON DUPLICATE KEY UPDATE
语法替代UPDATE
操作。这种方式在遇到主键冲突时会更新数据,而不是直接删除旧行并插入新行,从而减少数据空洞的产生。UPDATE
操作重写为INSERT
操作的规则。如果是这种情况,建议调整规则以保持主从操作的一致性。UPDATE
操作被转换为INSERT
操作。VACUUM
操作以回收未使用的空间。VACUUM FULL
可以进一步压缩表文件,但会锁定表,需谨慎使用。CREATE TABLE AS SELECT
的方式重建表,以消除空洞并优化存储空间。UPDATE
和INSERT
操作的比例变化,以及allocating new datafile
的数量。UPDATE
操作仍然频繁,建议评估是否可以通过业务逻辑优化减少不必要的更新操作。UPDATE
操作,采用批量更新或INSERT ON DUPLICATE KEY UPDATE
语法,减少数据空洞的产生。VACUUM
或重建表以修复数据空洞问题。通过以上措施,可以有效缓解主库的数据空洞问题,并缩小主从库之间的存储差异。