我有一个带有表parent_table
的高流量数据库(InnoDB,Mysql 5.7.11),其中一些表用外键引用:
my_db
。child1
(约531行)
my_db
。child2
(约470行)
my_db
。child3
(约37807375行)
my_db
。child4
(约10行)
这导致了大量的迁移问题,即使在非常简单的表格更改(例如向parent_table
添加列)上,元数据锁也会阻止流量。最后,我决定只是摆脱外键并将该逻辑移到应用程序逻辑中以摆脱头痛。但是,由于某种原因完全超出我的范围,即使这似乎挂起并导致其后面的查询与Waiting for table metadata lock
挂起。我测试了将外键丢弃在一个精确的副本数据库上,每次下降需要200ms,因此这些操作都不会很繁重。只有在高流量时它们才会挂起。
我试过了两个:
ALTER TABLE child3 DROP foreign key some_ibfk
以及添加ALGORITHM=INPLACE, LOCK=NONE;
。什么都没有帮助。
所以,2个问题: