无需停机即可优化MySql 5.7表

时间:2018-01-09 09:56:14

标签: mysql database database-administration

我在MySql 5.7服务器上有一个表。我们每天存储大约1M行。在每行插入之后,我们在删除该行之后对该行进行一些处理。

由于大量的写操作,表磁盘空间正在迅速增加。所以我想做OPTIMIZE表。

因此,如果我在生产表上应用OPTIMIZE Table命令,它会给出任何停机时间。

OPTIMIZE表的最佳方法是什么?

MySql Server详细信息

服务器版本: 5.7

引擎: InnoDB

主机: Google Cloud Sql

由于

1 个答案:

答案 0 :(得分:0)

是的,你是对的,OPTIMIZE TABLE将从MySQL 5.6.17或更高版本开始执行工作。我们在文档中找到了关于哪些操作支持在线DDL的说明:https://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html

您可以尝试对此进行测试(我在评论后做了):

  1. 创建一个表并用几十万行随机数据填充它。
  2. 运行OPTIMIZE TABLE,因为该大小的表将需要20-30秒或更长时间。
  3. 当它正在运行时,打开第二个窗口并尝试对表进行SELECT,INSERT,UPDATE或DELETE。你会发现它不会阻止DML。
  4. 如果你有一个不能作为在线DDL工作的ALTER TABLE,那么有一个好的免费工具pt-online-schema-change可以帮助避免锁定行为,即使对于表重组操作也是如此。此工具不会锁定表,但会创建触发器,以便在复制所有行时,捕获任何更改并将其应用于新的副本表。