更新时MySQL错误1206

时间:2016-02-02 18:11:38

标签: mysql sql

当我尝试更新任何记录时,我在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上其他地方的普遍看法,人们可以简单地限制查询中访问的记录数量(因为我只是尝试更新单个记录)。

2 个答案:

答案 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

重启MySQL服务器

答案 1 :(得分:0)

在阅读了与此Mysql错误相关的所有帖子后,解决了它的问题 将innodb_buffer_pool_size增加到16106127360

希望能帮到某人;)