优化MySQL5.7表而不停机

siotufzp  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(572)

我在MySQL5.7服务器上有一个表。我们每天存储大约100万行。在插入每一行之后,我们对该行进行一些处理,然后删除该行。
由于写操作数量巨大,表磁盘空间正在迅速增加。所以我想优化这个表。
所以,如果我对生产表应用optimizetable命令,它是否会导致停机。
优化表格的最佳方法是什么?
mysql服务器详细信息
服务器版本:5.7
引擎:innodb
托管:google云sql
谢谢

bwleehnv

bwleehnv1#

是的,您是对的,optimize table将在mysql 5.6.17或更高版本中执行工作。我们可以在支持在线ddl的操作文档中找到以下注解:https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html
你可以做实验来测试这个(我在你的评论之后做的):
创建一个表并用几十万行随机数据填充它。
运行optimize table,因为这种大小的表需要20-30秒或更长时间。
在运行时,打开第二个窗口并尝试对表执行select、insert、update或delete操作。你会发现它不阻止dml。
如果有一个alter表不能作为联机ddl使用,那么有一个很好的免费工具pt online schema change可以帮助避免锁定行为,即使对于表重构操作也是如此。此工具不会锁定表,但会创建触发器,以便在复制所有行的过程中捕获所有更改并应用于新的复制表。

相关问题