一个包含500 m行的大型MySQL关联表最近由于一个bug (现在已修复)而膨胀为1B行。磁盘使用率从130 to下降到240 to。
不幸的是,此服务器上没有任何标准补救措施的空间(OPTIMIZE或ALTER TABLE table ENGINE=InnoDB、转储和重建、构建为临时表&重命名和删除旧表等)。我只剩下50了。
以下是一个问题:
虽然到目前为止,我已经成功地删除了超过1亿行(1B到850米),但是磁盘的使用实际上增加了10 1B(达到250 1B)。是的,每秒钟都会添加新的记录,但是我删除的速度要比添加的快得多。
当常规解决方案不合适时,还有其他建议来回收未使用的磁盘空间吗?
发布于 2017-08-28 16:45:45
单个表的InnoDB表空间大小(.ibd)可以通过OPTIMIZE和ALTER TABLE ... ENGINE=InnoDB;减小,但是系统表空间文件ibdata1永远不能缩小。
在撤消日志中ibdata1 1‘S增长的来源。
自2013年7月以来,我一直在写这方面的文章.。我是第一次从Percona的逃出主要Innodb表空间的原因帖子中了解到这个现象。
如果在新安装的实例中将数据转储到另一台运行mysql的服务器上,则可以设置对其的复制,然后进行故障转移并将旧的主服务器丢弃。
如果没有其他服务器,则需要停止应用程序,mysqldump数据,删除所有do,关闭mysql,删除ibdata1,启动mysql (重新创建ibdata1,重新加载mysqldump)。看看我很老的帖子如何清除mysql InnoDB存储引擎?
https://dba.stackexchange.com/questions/184502
复制相似问题