Mysql 优化表导致“等待表元数据锁”
运行“优化表”会导致等待表元数据锁定。选中ShowProcessList确认优化是唯一的活动查询。Mysql 优化表导致“等待表元数据锁”,mysql,indexing,Mysql,Indexing,运行“优化表”会导致等待表元数据锁定。选中ShowProcessList确认优化是唯一的活动查询。 我有一张750GB的表,驱动器上还有69GB。为了腾出空间,我决定清理那张桌子。我已经关闭了对该服务器的所有访问,并从删除旧记录开始,这将花费永远的时间。已经决定可以截断该表,但首先需要提取一小部分数据。问题是,即使是从my_table LIMIT 1中简单地选择*也需要数小时才能手动终止。这是索引问题吗?如果是这样的话,69GB就足以用于索引过程。如果您有其他可以删除以释放磁盘空间的内容,则可能
我有一张750GB的表,驱动器上还有69GB。为了腾出空间,我决定清理那张桌子。我已经关闭了对该服务器的所有访问,并从删除旧记录开始,这将花费永远的时间。已经决定可以截断该表,但首先需要提取一小部分数据。问题是,即使是从my_table LIMIT 1中简单地选择*也需要数小时才能手动终止。这是索引问题吗?如果是这样的话,69GB就足以用于索引过程。如果您有其他可以删除以释放磁盘空间的内容,则可能会释放锁 终止进程,确保阻塞磁盘周围没有tmp表 然后以不同的方式进行清理
CREATE TABLE new LIKE real;
DROP any indexes you don't immediately need from `new`.
INSERT INTO new
SELECT ... FROM real
WHERE ...;
RENAME TABLE real TO old, new TO real;
DROP TABLE old;
If you make it this far, ADD back the indexes you should have.
潜在问题:如果表是Engine=InnoDB,并且是在InnoDB_file_per_table=OFF的情况下创建的,那么这不足以释放任何磁盘空间
如果您没有删除超过90%的表,并且只有69GB的可用空间,那么该过程最终将失败
对于索引过程-此短语不计算
优化表的作用是:
创建一个与旧表类似的新表,但可能除了主键之外没有任何索引。
复制除已删除行以外的所有行。
假设索引不是在步骤2中以增量方式构建的,则构建索引。
按上述方式重命名并删除