MySQL 对大表的 UPDATE 查询

发布于 2024-10-15 23:16:17 字数 317 浏览 9 评论 0原文

我有一个包含 21M 条记录的 MySQL 数据库,我试图对大约 1M 条记录进行更新,但查询失败,并显示错误 1206 (HY000):锁总数超过锁表大小。

是否可以在不获取锁的情况下更新表?

我无权更改 MySQL 配置参数,例如 innodb_buffer_pool_size。有不同的方法可以达到相同的效果吗?

谢谢

编辑

  1. 我已经尝试了5000个批次,它工作了几次,但我得到了同样的错误
  2. 我尝试使用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:

  1. I've tried it in batches of 5000, it works a few times, but I get the same error
  2. I've tried LOCK TABLES to lock the entire table and still it doesn't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

踏雪无痕 2024-10-22 23:16:17

我认为你可以使用 limit 子句来批量进行更新。

I think you can use the limit clause to do the updates in batches.

温柔少女心 2024-10-22 23:16:17

尝试在表级别而不是行级别锁定。使用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!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文