zoukankan      html  css  js  c++  java
  • DDL失败案例

    问题描述

    今天对线上某个业务的大表120G进行重建表操作时遇到报错,该表有个比较显著的特征是*写入量比较大,每天写入加更新的频率在数千万级别。大致的环境

    1 版本:Percona 5.6.24 

    2 操作:通过alter table xx engine=innodb 重建表 

    现象如下:

    db [RO] 09:55:50 >alter table xx engine=innodb;
    ERROR 1799 (HY000): Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.
    db [RO] 10:58:38 >show variables like 'innodb_online_alter_log_max_size';
    +----------------------------------+-----------+
    | Variable_name                    | Value     |
    +----------------------------------+-----------+
    | innodb_online_alter_log_max_size | 134217728 |
    +----------------------------------+-----------+
    1 row in set (0.00 sec)

    通过官方文档介绍innodb_online_alter_log_max_size 是MySQL 5.6版本引入。

    该参数限定了online ddl操作时使用的临时日志文件的最大大小(以字节为单位,默认为128M)。在创建索引或者对表进行alter操作时,该日志文件存储了DDL操作期间对表的 insert,update,delete的数据记录。临时日志文件每次以innodb_sort_buffer_size为单位进行扩展直至达到 innodb_online_alter_log_max_size设置的最大值。如果临时日志的大小超出规定限,则online ddl操作失败,当前所有未提交的DML操作会回滚。该参数设置日志文件太大带来的负面影响是可能会导致DDL操作最后锁定表(Waiting for table metadata lock)的时间更长,因为要花费更长的时间应用日志到表上。

    解决方法:调整该参数的大小

    mysql> set global innodb_online_alter_log_max_size=268435456; 

     online ddl操作完成之后 可以再将值修改为原来的值。

  • 相关阅读:
    subdomain takeover(子域名劫持)
    Kali linux UI missing close/minimize/maximize button
    vim比较多个文件内容
    vim多行缩进或缩出
    记一次centos8开机故障Internal error xfs XFS_WANT_CORRUPTED_GOTO
    Windows批处理(cmd/bat)常用命令小结
    git table无法自动补全问题
    git升级到指定版本
    linux 下find命令 --查找文件名
    Docker Nexus3 重置 admin 密码
  • 原文地址:https://www.cnblogs.com/lwlxqlccc/p/8568463.html
Copyright © 2011-2022 走看看