Mysql

重做日誌 Mysql 集群

  • April 17, 2013

mysql 集群有 4 個目錄,即 D8 D9 D10 D11 用於重做日誌文件。但是在插入表時,只使用了一個重做目錄。我執行以下命令來獲取重做資訊“所有轉儲 2398”,我得到:

REDO 部分:0 HEAD:文件:0 mbyte:0 TAIL:文件:0 mbyte:0 總計:12 空閒:12 (mb) REDO 部分:1 HEAD:文件:0 mbyte:0 TAIL:文件:0 mbyte:0 總計: 12 free: 12 (mb) REDO part: 2 HEAD: file: 1 mbyte: 0 TAIL: file: 2 mbyte: 2 total: 12 free: 6 (mb) REDO part: 3 HEAD: file: 0 mbyte: 0 TAIL : 文件: 0 mbyte: 0 總計: 12 免費: 12 (mb)

它不使用 REDO part: 0 REDO part: 1 REDO part: 4 。它僅使用重做部分:3 儘管使用了其他重做文件,但它會給出“錯誤 1297 (HY000):從 NDBCLUSTER 獲得臨時錯誤 410 ‘重做日誌文件重載(減少 TimeBetweenLocalCheckpoints 或增加 NoOfFragmentLogFiles)’”。如果它只使用 4 個重做文件中的 1 個,為什麼要分配 4 倍空間?

每個數據節點的重做日誌都有許多“部分”——目前預設為 4 個。每個重做日誌部分就像一個迷你重做日誌,具有為“重做日誌”定義的容量的 1 / Num_parts。這種設計在寫入重做日誌時增加了文件系統和較低層的並行性,但要求各部分之間的平衡是合理的。

創建表時,會在每個數據節點上創建表片段。每個片段都分配有一個重做日誌部分,該部分將用於記錄片段上的所有活動——例如插入、更新、刪除。

在特定數據節點上只有一個片段的表將只使用一個重做日誌部分,並且您將看到重做日誌部分的使用不平衡,如您所示。

當一個表有多個分片儲存在一個數據節點上時,它們將使用不同的重做日誌部分,並且不同部分的使用是平衡的。

在你有多個表的地方,其他表的碎片會使用不同的重做日誌部分,不同部分的使用會在統計上平衡。

所以嘗試創建更多分片的單表(增加MAX_ROWS,或者在CREATE TABLE語句中指定PARTITIONS=X),看看redo log部分使用是否更均衡。

引用自:https://dba.stackexchange.com/questions/39643