为什么删除外键会导致InnoDB上的元数据锁定?

时间:2017-01-11 02:58:16

标签: mysql innodb

我有一个带有表parent_table的高流量数据库(InnoDB,Mysql 5.7.11),其中一些表用外键引用:

my_dbchild1(约531行)   my_dbchild2(约470行)   my_dbchild3(约37807375行)   my_dbchild4(约10行)

这导致了大量的迁移问题,即使在非常简单的表格更改(例如向parent_table添加列)上,元数据锁也会阻止流量。最后,我决定只是摆脱外键并将该逻辑移到应用程序逻辑中以摆脱头痛。但是,由于某种原因完全超出我的范围,即使这似乎挂起并导致其后面的查询与Waiting for table metadata lock挂起。我测试了将外键丢弃在一个精确的副本数据库上,每次下降需要200ms,因此这些操作都不会很繁重。只有在高流量时它们才会挂起。

我试过了两个:

ALTER TABLE child3 DROP foreign key some_ibfk以及添加ALGORITHM=INPLACE, LOCK=NONE;。什么都没有帮助。

所以,2个问题:

  1. 可能导致元数据锁定的原因是什么?我们只是丢掉一把外键。为什么甚至需要锁?
  2. 什么可能导致操作在更高流量的数据库上花费这么长时间?

0 个答案:

没有答案