簡體   English   中英

使用大量數據進行更新查詢以避免鎖定等待超時的良好做法是什么?

[英]What is the good practice on update query with big volume of data to avoid a lock wait timeout?

所以基本上,我有這個當前的查詢:

UPDATE act AS a
INNER JOIN blok AS b
ON b.fav_pat = a.pat_id
SET a.blok_id = b.id

由於我擁有的數據量很大,它目前超時。 有沒有辦法在不修改數據庫配置的情況下避免超時?

您使用的包盡最大努力允許使用主機 RDBMS 的事務語義完全回滾任何不完整的操作。 這意味着它旨在執行更新操作,就像您在符合 ACID 的單個事務中向我們展示的那樣。

如果涉及的表很大(數百萬行或更多),則事務可能非常大。 它們可以使您的 MySQL 服務器崩潰,將事務日志溢出到磁盤或 SSD。 提交這些事務日志可能需要很長時間。 您沒有提到行數,但如果它們很大,那么 flyway 可能不是這項工作的正確工具。

您的鎖定超時提示您正在對具有其他並發活動的數據庫執行此操作。 您可能希望在其他安靜的數據庫上執行此操作以獲得最佳結果。

您可以通過這樣做來增加鎖定等待超時。

show variables like 'innodb_lock_wait_timeout'; -- previous vale
SET GLOBAL innodb_lock_wait_timeout = 300; -- five min

然后,也許,在假期或其他安靜時間日出之前再試一次。 更多信息在這里

當你的飛行任務完成時,考慮將鎖定超時恢復到之前的值。

您還可以考慮分批進行更新,例如一次 1000 行。 但flyway似乎並不支持這一點。 如果你走那條路,你可以問另一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM