MySQL 对大表的 UPDATE 查询
我有一个包含 21M 条记录的 MySQL 数据库,我试图对大约 1M 条记录进行更新,但查询失败,并显示错误 1206 (HY000):锁总数超过锁表大小。
是否可以在不获取锁的情况下更新表?
我无权更改 MySQL 配置参数,例如 innodb_buffer_pool_size。有不同的方法可以达到相同的效果吗?
谢谢
编辑:
- 我已经尝试了5000个批次,它工作了几次,但我得到了同样的错误
- 我尝试使用LOCK TABLES来锁定整个表,但它仍然不起作用。
I have a MySQL database with 21M records and I'm trying to do an update on about 1M records but the query fails with ERROR 1206 (HY000): The total number of locks exceeds the lock table size.
Is it possible to update the table without acquiring locks?
I don't have access to change MySQL configuration parameters like innodb_buffer_pool_size
. Is there a different way to achieve the same?
Thanks
EDIT:
- I've tried it in batches of 5000, it works a few times, but I get the same error
- I've tried LOCK TABLES to lock the entire table and still it doesn't work.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我认为你可以使用 limit 子句来批量进行更新。
I think you can use the limit clause to do the updates in batches.
尝试在表级别而不是行级别锁定。使用
LOCK TABLES MyTable WRITE
。这可能会解决问题。但没有保证!也不要忘记解锁桌子!Try locking at table level rather than row level. Use
LOCK TABLES MyTable WRITE
. This might solve the problem. No guarantees though! Don't forget to unlock the tables either!