我在MySQL5.7服务器上有一个表。我们每天存储大约100万行。在插入每一行之后,我们对该行进行一些处理,然后删除该行。由于写操作数量巨大,表磁盘空间正在迅速增加。所以我想优化这个表。所以,如果我对生产表应用optimizetable命令,它是否会导致停机。优化表格的最佳方法是什么?mysql服务器详细信息服务器版本:5.7引擎:innodb托管:google云sql谢谢
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可以帮助避免锁定行为,即使对于表重构操作也是如此。此工具不会锁定表,但会创建触发器,以便在复制所有行的过程中捕获所有更改并应用于新的复制表。
1条答案
按热度按时间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可以帮助避免锁定行为,即使对于表重构操作也是如此。此工具不会锁定表,但会创建触发器,以便在复制所有行的过程中捕获所有更改并应用于新的复制表。