在Linux环境下,mysql插入语句过多而导致报错问题。The total number of locks exceeds the lock table size百度翻译以后是:锁的总数超过了锁表的大小。网上查了查以后找到的解决方案是:
InnoDB表执行大批量数据的更新,插入,删除操作时会出现这个问题,需要调整InnoDB全局的innodb_buffer_pool_size的值来解决这个问题,并且重启mysql服务。
进入mysql命令
show variables like "%_buffer%";(不要忘记带;号,没有;号表示一条语句没有结束)
默认的innodb_buffer_pool_size=8M
示的格式是 1M*1024*1024,设置的时候也要这样设置,例如
修改 innodb_buffer_pool_size的值为3G:
SET GLOBAL innodb_buffer_pool_size=67108864;(3*1024*1024*1024,不要忘记;号)
但是我查了我的innodb_buffer_pool_size以后发现我的好像完全足够。并且和另一个库一样的。另外一个可以跑过去。
然后去请教了我们组的大佬。然后说明情况以后他发现是因为服务器缓存的数据量太大,导致缓存不够锁表。具体我网上查了下命令
mysql查看被锁住的表
- 查询是否锁表
show OPEN TABLES where In_use > 0;
- 查看所有进程
MySQL:
show processlist;
mariabd:
show full processlist;
查询到相对应的进程===然后 kill id
- 杀掉指定mysql连接的进程号
kill $pid
- 查看正在锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
- 查看等待锁的事务
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
删除了多余的不知道谁建的一个库以后。然后解决这个问题,所以具体问题还是要具体对待滴。