【发布时间】:2014-03-08 23:43:03
【问题描述】:
在不损坏表的情况下杀死 InnoDB 表上的 OPTIMIZE 查询是否安全?
MySQL 文档说:
然而,杀死一个
REPAIR TABLE或OPTIMIZE TABLEMyISAM 表导致表损坏且无法使用 (读取和写入失败)直到您再次优化或修复它 (不间断)。
但它并没有说明 InnoDB。
【问题讨论】:
标签: mysql optimization process innodb kill
在不损坏表的情况下杀死 InnoDB 表上的 OPTIMIZE 查询是否安全?
MySQL 文档说:
然而,杀死一个
REPAIR TABLE或OPTIMIZE TABLEMyISAM 表导致表损坏且无法使用 (读取和写入失败)直到您再次优化或修复它 (不间断)。
但它并没有说明 InnoDB。
【问题讨论】:
标签: mysql optimization process innodb kill
如果您优化 InnoDB 表,它会为它创建一个新的索引结构并将记录从旧表复制到新表。复制完成后,它会切换表格。
如果你在这个 InnoDB 中间杀死 OPTIMIZE 将不得不回滚。
它是安全的,但回滚可能需要很长时间。
【讨论】:
在我的例子中,一个 OPTIMIZE 任务被 mysql 的 kill 命令杀死,但是杀死它并没有停止进程。所以有时即使你杀死了任务,它仍然存在。
> show processlist;
| Id | User | Host | db | Command | Time | State | Info | Progress |
+-------+-------------+-----------+-----------------------+---------+------+--------------------------+------------------------------------------------------------------------------------------------------+----------+
| 1 | system user | | NULL | Daemon | NULL | InnoDB purge coordinator | NULL | 0.000 |
| 2 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 3 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 4 | system user | | NULL | Daemon | NULL | InnoDB purge worker | NULL | 0.000 |
| 5 | system user | | NULL | Daemon | NULL | InnoDB shutdown handler | NULL | 0.000 |
| 142 | admin | localhost | tsa | Sleep | 20 | | NULL | 0.000 |
| 5114 | admin | localhost | something_wp | Killed | 5419 | Parallel repair | OPTIMIZE TABLE `wp_options`
虽然它说的是 Killed,但它仍然在进程列表中..
【讨论】: