记录问题,当数据量很大的时候,删除数据mysql会报异常:[Err] 1206 - The total number of locks exceeds the lock table size 锁总数超...

如果您使用的是一个很大的innodb表,并且您正在更新、插入或删除大量的行,那么您可能会偶然发现以下错误:

[Err] 1206 - The total number of locks exceeds the lock table size

innodb将其锁表存储在主缓冲池中。这意味着可以同时拥有的锁的数量受mysql启动时设置的innodb_buffer_pool_size变量的限制。默认情况下,mysql将其保留为8mb,如果您在服务器上使用innodb执行任何操作,那么这是非常无用的。

幸运的是,解决这个问题非常容易:将innodb_buffer_pool_size调整为一个更合理的值。该修复确实需要重新启动mysql守护进程。但是根本没有办法动态地调整这个变量(在本文撰写之际使用当前稳定的mysql版本)。

在调整变量之前,请确保服务器可以处理额外的内存使用。innodb_buffer_pool_size变量是服务器范围的变量,而不是每个线程的变量,因此它在所有到mysql服务器的连接(如查询缓存)之间共享。如果将其设置为1GB,MySQL不会预先使用所有这些。随着mysql发现更多的东西要放入缓冲区,内存使用量将逐渐增加,直到达到1gb。这时,最旧和使用最少的数据在需要出现新数据时开始被裁剪。

如何不重启mysql达到同样的效果?

如果需要删除一百万行,请尝试在每个事务中删除其中5-10%的行。这可能允许您在不重新启动mysql的情况下,在锁定表大小限制下清除一些数据。

转载于:https://www.cnblogs.com/wangquanyi/p/11474113.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值