【问题标题】:Is it safe to KILL an OPTIMIZE on InnoDB?杀死 InnoDB 上的 OPTIMIZE 是否安全?
【发布时间】:2014-03-08 23:43:03
【问题描述】:

在不损坏表的情况下杀死 InnoDB 表上的 OPTIMIZE 查询是否安全?

MySQL 文档说:

然而,杀死一个 REPAIR TABLEOPTIMIZE TABLE MyISAM 表导致表损坏且无法使用 (读取和写入失败)直到您再次优化或修复它 (不间断)。

但它并没有说明 InnoDB。

【问题讨论】:

    标签: mysql optimization process innodb kill


    【解决方案1】:

    如果您优化 InnoDB 表,它会为它创建一个新的索引结构并将记录从旧表复制到新表。复制完成后,它会切换表格。

    如果你在这个 InnoDB 中间杀死 OPTIMIZE 将不得不回滚。

    它是安全的,但回滚可能需要很长时间。

    【讨论】:

    • 在 mysql 5.7 中,我取消了在大小约为 154GB 的巨大表上运行的 OPTIMIZE,在它处理了约 30GB 并立即回滚之后。
    【解决方案2】:

    在我的例子中,一个 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,但它仍然在进程列表中..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 2023-03-08
      • 1970-01-01
      相关资源
      最近更新 更多