我正在尝试了解表中的大量更新如何影响用户的数据可用性。我一直在浏览各种帖子(fastest-way-to-update-120-million-records,Avoid locking while updating),它们通过不同的机制来进行大型更新,例如如果可以离线完成,则填充全新的表。如果它不能离线,则进行批量更新。
我试图了解这些大更新如何影响用户的表可用性,以及在确保表可读取的同时进行大更新的最佳方法是什么?
用例:基于主键更新交易明细
尚不清楚您需要做什么。
这里讨论如何使用PRIMARY KEY
遍历表格,并且对其他查询的影响最小:http://mysql.rjweb.org/doc.php/deletebig#deleting_in_chunks(它是在考虑DELETE
的前提下编写的,但原理也适用于UPDATE
。)
表的可用性
[发生任何操作时,所涉及的行都被“锁定”,以防止其他查询同时修改它们。 (“锁定涉及多版本控制等。)它们需要保持锁定状态,直到完成整个“事务”为止。同时,如果服务器崩溃或用户决定“回滚”,则需要记录所有更改。更改。
因此,如果要更改数百万行,那么将持有数百万个锁。这需要时间。
我的博客建议一次仅执行1000行;通常,此数量足够小,对其他任务的干扰很小,但又足够大,可以在合理的时间内完成任务。