为什么删除多个blob会用state锁定MySQL数据库:强制执行dict缓存限制?

为什么删除多个blob会用state锁定MySQL数据库:强制执行dict缓存限制?,mysql,blob,innodb,sql-delete,Mysql,Blob,Innodb,Sql Delete,我需要从MySQL表中删除大约400行和列: id-INT(11) 培训主任-内部(11) 估算器\u blob-长blob estimator\u blob的大小为32MB 这样的查询似乎是: 从估算器中删除(1,2,…,400)中的训练id 锁定数据库。执行此查询后,将结果插入到此表的所有新查询的执行速度都非常慢 在数据库状态(mysql>SHOW ENGINE INNODB status;)中,我有以下消息: 进程ID=2600,主线程ID=139974149678848,状态:强制执行d

我需要从MySQL表中删除大约400行和列:

id-INT(11)
培训主任-内部(11)
估算器\u blob-长blob

estimator\u blob
的大小为32MB

这样的查询似乎是:

从估算器中删除(1,2,…,400)中的训练id

锁定数据库。执行此查询后,将结果插入到此表的所有新查询的执行速度都非常慢

在数据库状态(
mysql>SHOW ENGINE INNODB status;
)中,我有以下消息:

进程ID=2600,主线程ID=139974149678848,状态:强制执行dict缓存限制

强制执行dict缓存限制”到底是什么意思?这是“锁定”的原因吗

增加
innodb\u buffer\u pool\u大小没有帮助


我在具有70Gb RAM的机器上使用MySQL 5.7.19-0ubuntu0.16.04.1

强制执行dict缓存限制是InnoDB进程的后台状态。在此状态下,InnoDB检查表字典缓存(例如表元数据)内存消耗的使用情况,并在需要时清理字典缓存

根据MySQL开发人员提供的以下指导:

为了缓解问题,您必须做几件事:

  • 增加额外的内存池
  • 增加MySQL可用的文件句柄总数
  • 增加InnoDB的文件句柄数
  • 提高操作系统上I/O的性能

您可能需要重新启动服务器才能从问题中完全恢复

培训id是否已编制索引?您还可以尝试*增加MySQL可用的文件句柄总数*增加InnoDBYes的文件句柄数,是的。实际上,它是一个外键,我没有在DELETE CASCADE上使用
。好的,我试试看。谢谢啊。另一种解决方案可能是使用autocommit=ON将其拆分为1行删除。