执行大事务SQL语句时出现“max_binlog_cache_size”相关报错

更新时间:

问题描述

在执行大事务SQL语句时,出现以下错误。

Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again

问题原因

max_binlog_cache_size参数指定了单个事务最大允许使用的Binlog,当超出这个值时,会出现当前报错。

解决方案

您可以根据实际情况,选择以下方法进行变更:

  • 如果您之前使用普通数据变更工单出现了该问题,建议您尝试使用无锁数据变更功能进行变更,该功能相关信息请参见无锁数据变更
  • 拆分SQL语句。您可以将复杂的SQL语句进行拆分,将SQL的影响行数降低,然后分批进行提交,控制SQL语句产生的Binlog日志大小:
    • 您可以在SQL语句后加上limit参数,例如在SQL语句后面添加limit 1000参数,限制SQL语句影响的行数。
    • 一个数据变更可以提交多个SQL,即工单只审批一次,但SQL语句可以拆分为多条。
  • 如果您需要清理整个表的数据,可以考虑使用truncate table [$Table_Name];语句。
    说明:[$Table_Name]为需要清理的表名。
  • 您可以根据实际情况,修改max_binlog_cache_size参数的值:
    • RDS实例:
      若您想修改该参数,请参见设置实例参数设置max_binlog_cache_size参数。
    • 自建数据库:
      登录数据库,参考以下SQL语句,修改该参数的值。
      SET GLOBAL max_binlog_cache_size=[$Size];
      说明:[$Size]值的大小请您根据实际情况进行评估。

适用于

  • 数据管理DMS
  • 云数据库RDS