优化更新/内部的表或MySQL设置 - 加入一个大表

时间:2016-05-05 01:35:40

标签: mysql settings

这与我最近发布的一个问题有关:

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尝试这个并回报这个问题,如果它解决了这个问题(仅仅是删除问题,因为它可能会帮助其他人)。

1 个答案:

答案 0 :(得分:0)

好的回答问题是Mysql设置。显然,当我们迁移服务器时,DevOps / SysAdmin确实迁移了设置但没有重新启动服务器,因为我跳到了查询模式。我们昨晚重新启动,事情很顺利。

问题是innodb_buffer_pool默认设置为128MB,我们的自定义设置为2GB。