mysql 优化表空间报错Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
背景:mysql数据库中有几个表的碎片率太高,浪费了存储空间且降低了读写效率,需要整理。
mysql版本:5.6
先用optimize table 试试。
也执行了很久。但是结束后,data_free 没有变化。
再用 alter table table_name force。
也等了很久,回来一看,居然报错了:Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again
搜索引擎了一番,原来是有个参数小了。
说明:innodb_online_alter_log_max_size是MySQL 5.6.6新加入的一个动态全局参数,用以指定对InnoDB表进行在线DDL操作时,所使用的临时日志文件的最大大小(以字节为单位,默认128M),在创建索引或者使用ALTER语句修改表时会使用该临时文件。该文件记录了DDL操作期间插入、更新、删除的数据。在必要的时候该日志文件的大小会根据innodb_sort_buffer_size的值增加容量,直至达到innodb_online_alter_log_max_size值指定的最大值。若临时表的大小超出此上限,则使用ALTER语句修改表的操作会失败,即当前所有未提交的DML操作都会回滚。因此,设置一个较大的值可以允许在线DDL操作期间有更多的DML操作被执行,但是过大的值会导致DDL操作后锁定表的时间更长(锁定表,应用日志记录到表上)。即在任务执行过程中有过多的新增数据进来,导致临时文件存放不下。
————————————————
原文链接:https://blog.csdn.net/HYZX_9987/article/details/112010324
调整:
set global innodb_online_alter_log_max_size=1073741824;
再用 alter table table_name force。成功。
-----------------------------------------------------------------
能力不高,水平有限,如有不妥还请指出,谢谢!
本文来自博客园,作者:Laijx,转载请注明原文链接:https://www.cnblogs.com/laijx/p/16178191.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示