这与我最近发布的一个问题有关:
Efficient way to flag a record with min field value and common fieldX value in mysql
但是之前工作的其他查询发生了类似的错误,例如:
Update TableA as T1
Inner Join TableA as T2
on T1.Field1=T2.FIeld1and T1.Field2 is not NULL
set T2.GroupFlag=T1.GroupFlag
突然之间,我得到了:
ERROR 1206(HY000):锁的总数超过了锁表大小
我已经在同一张桌子上多次运行它并且它有效,所以显然查询没问题。
我知道这个问题有点模糊,但我不确定怎么回答它。我应该检查MySQL设置中的某些内容吗?我们最近将数据库的备份恢复到新的(这个)服务器,但据我所知,唯一的区别是我们将服务器的大小增加了一倍,为我们提供了工作空间。
更新
我确实找到了这个:
https://major.io/2010/02/16/mysql-the-total-number-of-locks-exceeds-the-lock-table-size-2/
基本上说我的innodb_buffer_pool太小了。我查了一下,我们的新服务器虽然比较大,但从来没有迁移过2GB的旧设置,我们只有128MB。
所以我会请SysAdmin / DevOps尝试这个并回报这个问题,如果它解决了这个问题(仅仅是删除问题,因为它可能会帮助其他人)。
答案 0 :(得分:0)
好的回答问题是Mysql设置。显然,当我们迁移服务器时,DevOps / SysAdmin确实迁移了设置但没有重新启动服务器,因为我跳到了查询模式。我们昨晚重新启动,事情很顺利。
问题是innodb_buffer_pool默认设置为128MB,我们的自定义设置为2GB。