在表上进行大量更新时数据可用性对用户的影响

问题描述 投票:0回答:1

我正在尝试了解表中的大量更新如何影响用户的数据可用性。我一直在浏览各种帖子(fastest-way-to-update-120-million-recordsAvoid locking while updating),它们通过不同的机制来进行大型更新,例如如果可以离线完成,则填充全新的表。如果它不能离线,则进行批量更新。

我试图了解这些大更新如何影响用户的表可用性,以及在确保表可读取的同时进行大更新的最佳方法是什么?

用例:基于主键更新交易明细

mysql sql-update database-performance bulkupdate
1个回答
1
投票

尚不清楚您需要做什么。

  • 替换整个表-填充新表,然后交换
  • 更改所有行的一列-听起来像草率的设计。请详细说明您的工作。
  • 将一列更改为某些行-同上。
  • [添加新列并对其进行初始化-考虑创建并行表等。这将使阻塞为零,但会增加代码的复杂性。
  • 这些值是从其他列中计算得出的,请考虑使用“已生成”列。 (您使用的是哪个版本的MySQL?)

这里讨论如何使用PRIMARY KEY遍历表格,并且对其他查询的影响最小:http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks(它是在考虑DELETE的前提下编写的,但原理也适用于UPDATE 。)

表的可用性

[发生任何操作时,所涉及的行都被“锁定”,以防止其他查询同时修改它们。 (“锁定涉及多版本控制等。)它们需要保持锁定状态,直到完成整个“事务”为止。同时,如果服务器崩溃或用户决定“回滚”,则需要记录所有更改。更改。

因此,如果要更改数百万行,那么将持有数百万个锁。这需要时间。

我的博客建议一次仅执行1000行;通常,此数量足够小,对其他任务的干扰很小,但又足够大,可以在合理的时间内完成任务。

© www.soinside.com 2019 - 2024. All rights reserved.