在对MySQL数据库进行创建索引等操作时报错

更新时间:

问题描述

在DMS控制台中对RDS MySQL实例或自建MySQL数据库(ECS自建数据库或IDC自建数据库)进行创建索引等操作时,提示类似如下信息。

ERROR 1799 (HY000): Creating index 'XXX' required more than'innodb_online_alter_log_max_size' bytes of modification log. Please try XXX.XXX

问题原因

innodb_online_alter_log_max_size参数的值设置过小导致创建索引失败,innodb_online_alter_log_max_size参数的相关信息请参见更多信息

解决方案

  • RDS MySQL实例
    若您想修改该参数,请参见设置实例参数设置innodb_online_alter_log_max_size参数。
  • 自建MySQL数据库
    登录数据库,参考以下语句,修改该参数的大小。
    SET GLOBAL innodb_online_alter_log_max_size=[$Size];
    说明:[$Size]值的大小请您联系对应业务DBA支持进行评估。

更多信息

innodb_online_alter_log_max_size参数是MySQL 5.6.6新加入的一个参数,用以指定对InnoDB表进行在线DDL操作时,所使用的临时日志文件的最大大小(以字节为单位,默认128MB),在创建索引或者使用ALTER语句修改表时会使用该临时文件。该文件记录了DDL操作期间插入、更新、删除的数据。在必要的时候该日志文件的大小会根据innodb_sort_buffer_size的值增加容量,直至达到innodb_online_alter_log_max_size值指定的最大值。若临时表的大小超出此上限,则使用ALTER语句修改表的操作会失败,即当前所有未提交的DML操作都会回滚。

因此,设置一个较大的值可以允许在线DDL操作期间有更多的DML操作被执行,但是过大的值会导致DDL操作后锁定表的时间更长(锁定表,应用日志记录到表上)。即在任务执行过程中有过多的新增数据进来,导致临时文件存放不下。innodb_online_alter_log_max_size参数的更多信息,请参见MySQL官方文档

适用于

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