# 一、问题描述 #
开发中对一张大表进行批量的更新或者删除的时候 会报以下错误:
The total number of locks exceeds the lock table size
从字面上理解,就是当前操作锁住的总行数已经超过设置的锁表的大小。
# 二、解决办法 #
## 解决方案一:分批进行更新或者删除 ##
如给delete 语句后面加上limit ,一次 1w条
delete from user where name like '%zs%' limit 10000;
## 解决方案二:调整mysql的innodb\_buffer\_pool\_size 参数 ##
innodb\_buffer\_pool\_size 默认大小是128m(mysql8.0)
查看当前mysql的innodb_buffer_pool_size 大小
SHOW VARIABLES LIKE "%innodb_buffer_pool_size%";
临时设置 innodb_buffer_pool_size 大小为2g,重启mysql 以后失效
set global innodb_buffer_pool_size = 2147483648
永久生效需要改动my.cnf 配置文件,在配置文件中增加如下配置:
innodb_buffer_pool_size = 2G
然后重启mysql服务。
拓展:
**innodb\_buffer\_pool\_size**(缓冲池大小)**生产环境 mysql专用服务器 建议设置成服务器总内存的 70%到80%之间**
**innodb\_buffer\_pool\_chunk\_size**(定义InnoDB缓冲池大小调整操作的块大小)
**innodb\_buffer\_pool\_instances**(InnoDB 缓冲池划分为的区域数)
**innodb\_buffer\_pool\_size** 必须是 **innodb\_buffer\_pool\_chunk\_size** 乘以 **innodb\_buffer\_pool\_instances** 的倍数。