mysql commit慢_mysql commit 引起的性能问题

本文探讨了MySQL中commit慢的问题,通过案例分析发现commit操作在两阶段提交和binlog同步过程中可能导致性能瓶颈。文章介绍了MySQL的组提交机制,详细解析了binlog的FLUSH、SYNC和COMMIT三个阶段,以及相关参数如`sync_binlog`、`binlog_group_commit_sync_delay`和`binlog_group_commit_sync_no_delay_count`的影响。在大量并发DML操作下,不恰当的参数设置可能加剧IO压力,导致commit阻塞和其他操作延迟。建议根据业务场景调整参数,以平衡性能和IO压力。
摘要由CSDN通过智能技术生成

概述

对于支持事务的关系型数据库来说,事务的完成需要执行commit命令,用于保存该事务操作的相关日志、标记该事务已完成,确保数据的一致性。通常情况下,commit命令执行很快,但也会存在commit是性能瓶颈,影响整体数据库性能的情况发生。

案例分析

慢日志分析

对慢日志分析可见,commit操作平均耗时近1分钟是非正常现象。

MySQL commit机制

mysql数据库为了保证binlog、redolog中事务的一致性,事务采用了两阶段提交(2pc)机制:

prepare阶段

innodb write/sync事务redo、undolog,binlog不做任何操作。

commit阶段

mysql层write/syncbinlog,innodb写 commit 至redolog。

从这个机制可以看出,commit操作包括binlog的落地动作。这就延长了commit动作的时间,也成了一个性能瓶颈,为了优化这一性能问题,mysql5.6推出了组提交机制。

binlog组提交的基本思想是,引入队列机制保证innodb commit顺序与binlog落盘顺序一致,并将事务分组,组内的binlog刷盘动作交给一个事务进行,实现组提交目的。

binlog提交将提交分为了3个阶段,FLUSH阶段,SYNC阶段和COMMIT阶段。基本流程如下:

FLUSH 阶段

持有Lock_log mutex [leader持有,follower等待]

获取队列中的一组binlog(队列中的所有事务)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值