问题描述
在执行大事务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语句可以拆分为多条。
- 您可以在SQL语句后加上limit参数,例如在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]值的大小请您根据实际情况进行评估。
- RDS实例:
适用于
- 数据管理DMS
- 云数据库RDS