当我尝试更新任何记录时,我在MySQL中收到以下错误:ERROR 1206 (HY000): The total number of locks exceeds the lock table size
根据我在stackoverflow上找到的所有相关问题,我认为当innodb_buffer_pool_size
变量相对于语句影响的记录数量设置得太小时会发生此错误。
但是,即使我尝试更新单个记录(甚至是零记录),我也会收到此错误,这实在令我感到困惑。我还应该指出,我一直在更新此表上的记录数月,直到昨天才看到此错误。有关什么可能导致此错误的想法,即使只更新单个记录?
供参考,我使用的是MySQL 5.6。当我执行法规SHOW VARIABLES LIKE 'innodb_buffer%';
时,我得到以下内容:
+-------------------------------------+----------------+
| Variable_name | Value |
+-------------------------------------+----------------+
| innodb_buffer_pool_dump_at_shutdown | OFF |
| innodb_buffer_pool_dump_now | OFF |
| innodb_buffer_pool_filename | ib_buffer_pool |
| innodb_buffer_pool_instances | 8 |
| innodb_buffer_pool_load_abort | OFF |
| innodb_buffer_pool_load_at_startup | OFF |
| innodb_buffer_pool_load_now | OFF |
| innodb_buffer_pool_size | 12582912 |
+-------------------------------------+----------------+
非常感谢任何想法!
编辑:我还应该指出我可以插入没有问题的记录。我也承认我正在使用Windows。
编辑2:看起来增加innodb_buffer_pool_size
就可以了。但是,该解决方案违背了stackoverflow上其他地方的普遍看法,人们可以简单地限制查询中访问的记录数量(因为我只是尝试更新单个记录)。
答案 0 :(得分:2)
MySQL试图告诉你它没有足够的空间来存储执行查询所需的所有行锁。解决它的唯一方法是调整innodb_buffer_pool_size
并重启MySQL。
1)从服务器找到文件my.cnf。对于Linux服务器,这将主要在/etc/my.cnf
2)将行innodb_buffer_pool_size=64MB
添加到此文件
3)使用:service mysqld restart
答案 1 :(得分:0)
在阅读了与此Mysql错误相关的所有帖子后,解决了它的问题 将innodb_buffer_pool_size增加到16106127360
希望能帮到某人;)