优化 MySql 5.7 table 无需停机

Optimize MySql 5.7 table without downtime

我在 MySql 5.7 服务器中有一个 table。我们每天存储大约 100 万行。每次插入行后,我们对该行进行一些处理,然后删除该行。

Table 磁盘 space 由于大量的写入操作而迅速增加。所以我想优化 Table.

因此,如果我在生产环境中应用 OPTIMIZE Table 命令 table 是否会导致停机。

优化 table 的最佳方法是什么?

MySql 服务器详情

服务器版本:5.7

引擎:InnoDB

托管:Google云Sql

谢谢

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

你可以尝试测试这个(我在你的评论后做了):

  1. 创建一个 table 并用几十万行随机数据填充它。
  2. 运行 优化 TABLE,因为该大小的 table 需要 20-30 秒或更长时间。
  3. 当它是 运行 时,打开第二个 window 并尝试 SELECT、INSERT、UPDATE 或 DELETE 对 table。您会发现它不会阻止 DML。

如果您确实有一个不能用作在线 DDL 的 ALTER TABLE,那么有一个很好的免费工具 pt-online-schema-change 可以帮助避免锁定行为,即使对于 table-重组操作也是如此。此工具不会锁定 table,但它会创建触发器,以便在复制所有行时捕获任何更改并将其应用于新副本 table。