MariaDB在取消索引创建后等待

时间:2017-11-10 16:28:57

标签: wordpress mariadb mysql-slow-query-log

我们有一个运行WordPress 4.8的MariaDB数据库,在wp_options表中发现了很多 transient 命名记录。该表用插件清理,从约800K记录减少到~20K记录。关于该表的查询条目仍然很慢:

# User@Host: wmnfdb[wmnfdb] @ localhost []
# Thread_id: 950  Schema: wmnf_www  QC_hit: No
# Query_time: 34.284704  Lock_time: 0.000068  Rows_sent: 1010 Rows_examined: 13711
SET timestamp=1510330639;
SELECT option_name, option_value FROM wp_options WHERE autoload = 'yes';

找到另一篇文章来创建索引并做了:

ALTER TABLE wp_options ADD INDEX (`autoload`);

这花了太长时间并使网站脱机。我在进程列表中发现了很多'等待表元数据锁'。在取消ALTER TABLE之后,在慢速查询日志中,当然仍然使用高负载和条目再次运行。我还尝试在Web服务器脱机和干净的进程列表的情况下创建索引。如果我今晚再次尝试再创作需要这么长时间吗?

1 个答案:

答案 0 :(得分:0)

如果要删除表的大多数,最好创建一个新表,复制所需的行,然后重命名。不幸的是,在步骤中任何添加/修改的行都不会反映在复制的表中。 (加上:你可能已经有了新的索引。)

this中,我提供了多种方法来进行大删除。

什么是可能挂起你的系统:

在回滚的情况下,一个大DELETE会隐藏所有旧值 - 这会导致调用DELETE!让它完成可能会更快。

ALTER TABLE .. ADD INDEX - 如果您使用的是MySQL 5.5或更早版本,则必须复制整个表格。即使您使用的是较新的版本(可以ALGORITHM=INPLACE),仍然存在元数据锁定。 wp_options多久接触一次? (听起来好像太多次了。)

结论:如果您从尝试中恢复,但删除仍有待完成,请在我的链接中选择最佳方法。之后,将索引添加到仅20K行应该需要一些时间,但这不是一个致命的长时间。并考虑升级到5.6或更高版本。

如果您需要进一步讨论,请提供SHOW CREATE TABLE wp_options

但是等等!如果autoload是一个简单的是/否标记',则可能不会使用该索引。也就是说,添加索引可能是浪费! (对于低基数,执行表扫描比更快而不是在索引BTree和数据BTree之间来回跳转。)请提供该帖子的链接;我想吐他们。