如何以最短的停机时间运行OPTIMIZE TABLE

TTT*_*TTT 2 mysql sql optimization

我在生产环境中的64GB RAM机器上有一个+ -40GB的MySQL 5.5 DB.所有表都是InnoDB.还有一个从属服务器作为备份运行.

一个表 - 最重要的一个 - 增长到150M行,插入和删除变慢.为了加快插入和删除我删除了一半的表.这并没有像预期的那样加速; 插入和删除仍然很慢.

我已经读过OPTIMIZE TABLE在这种情况下跑步可以提供帮助.据我所知,这个操作需要对整个表进行读锁定,并且在一个大表上优化表可能需要一段时间.

在最大限度地减少停机时间的同时优化此表的好策略是什么?

编辑要优化的特定表有+ - 91M行,如下所示:

+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      | NO   | PRI | NULL    | auto_increment |
| channel_key | varchar(255) | YES  | MUL | NULL    |                |
| track_id    | int(11)      | YES  | MUL | NULL    |                |
| created_at  | datetime     | YES  |     | NULL    |                |
| updated_at  | datetime     | YES  |     | NULL    |                |
| posted_at   | datetime     | YES  |     | NULL    |                |
| position    | varchar(255) | YES  | MUL | NULL    |                |
| dead        | int(11)      | YES  |     | 0       |                |
+-------------+--------------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

TTT*_*TTT 6

Percona Toolkit的pt-online-schema-change为您完成此任务.在这种情况下,它运作良好.