Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 优化表导致“等待表元数据锁”_Mysql_Indexing - Fatal编程技术网

Mysql 优化表导致“等待表元数据锁”

Mysql 优化表导致“等待表元数据锁”,mysql,indexing,Mysql,Indexing,运行“优化表”会导致等待表元数据锁定。选中ShowProcessList确认优化是唯一的活动查询。 我有一张750GB的表,驱动器上还有69GB。为了腾出空间,我决定清理那张桌子。我已经关闭了对该服务器的所有访问,并从删除旧记录开始,这将花费永远的时间。已经决定可以截断该表,但首先需要提取一小部分数据。问题是,即使是从my_table LIMIT 1中简单地选择*也需要数小时才能手动终止。这是索引问题吗?如果是这样的话,69GB就足以用于索引过程。如果您有其他可以删除以释放磁盘空间的内容,则可能

运行“优化表”会导致等待表元数据锁定。选中ShowProcessList确认优化是唯一的活动查询。
我有一张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中以增量方式构建的,则构建索引。 按上述方式重命名并删除