[英]mariadb replication (master / slave) - slave lagging behind due to long execution on delete query
我已經設置了一個非常經典的 MariaDB 10.4.13 復制 GTID 設置,帶有兩台服務器(可寫主機和只讀從機)。
一段時間以來,我注意到我的一些應用程序 SELECT 查詢路由到從站中存在一些不一致。經過一些故障排除后,我發現從站的“Seconds_Behind_Master”值增長到 10,000 秒 (.)。
通過在從屬設備上執行SHOW PROCESSLIST ,我注意到長查詢,例如:
11 | system user | | NULL | Slave_SQL | 14 | Delete_rows_log_event :: find_row (-1) | DELETE FROM `mytable` WHERE` id` = 5580
每一個都需要超過 20 秒的時間來執行 (.) 所以它們會累積並導致滯后......
在主設備上啟動的相同刪除查詢是瞬時的(0.031 秒) - 此外,從設備硬件比主設備更強大(4 核 CPU 與 2 核 CPU)並且從設備上的平均負載/CPU 非常低。
我已經嘗試將並行“ slave_parallel_threads ”增加到從 CPU (4) 的數量,如此處所述,但沒有任何好處。
有關如何解決此問題或提高復制性能以保持主/從同步的任何線索?
DELETE FROM
mytable WHERE
id = 5580
是整個查詢嗎? (可能除了表名。)
你沒有關於id
的索引嗎?
如果id
是UNIQUE
或PRIMARY
,那應該只需要幾毫秒。
slave_parallel_threads
-- 其他線程是否接觸同一張表?
如果要刪除大量行,請參閱http://mysql.rjweb.org/doc.php/deletebig
也許在那張桌子上正在執行一個大的ALTER
?
是的,問題是由於應用程序中的表格設計不佳。
表缺少UNIQUE / PRIMARY
鍵,因此對奴隸的DELETE
查詢需要很長時間,如此處所述
我通過在表上創建主索引並在之后重建 SLAVE 來修復,到目前為止不再滯后:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.