[ERROR] [FATAL] InnoDB: Over 95 percent of the buffer pool is occupied by lock heaps or the adaptive

[ERROR] [FATAL] InnoDB: Over 95 percent of the buffer pool is occupied by lock heaps or the adaptive。

这个问题是发生在mysql 5.7系列5.7.20及之前的版本,8.0系列8.0.3及之前的版本的bug,在5.7.21/8.0.4上已修复。在这个错误发生时,可以通过select * from performance_schema.memory_summary_global_by_event_name where EVENT_NAME like 'memory/innodb%' order by CURRENT_NUMBER_OF_BYTES_USED desc 观察到大量的内存使用。

问题的原因是mysql在处理包含外键约束的update/delete语句时,使用了迭代的方式来处理外键约束关联的表,对更新的每一行都创建一个update node,并从innodb buffer pool内存池堆中分配内存。但是在删除操作结束后并没有将内存释放回操作系统。最后的这句解释了我长久以来的一个问题,当初有一个库,整个库的大小并不大,但是在最终崩溃后的日志里发现,外键相关的锁,锁住了大约1500w记录,这个记录数超过了库中所有表合起来的大小(因为内存没有释放回操作系统?),当日苦思不解,今时豁然开朗。
具体的可以看这里:https://github.com/mysql/mysql-server/commit/7b26dc98a624d5cdf79cd5eee455cb03e3bccb5a

Bug #26191879 FOREIGN KEY CASCA

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值