文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  定義 NDB 叢集資料節點

25.4.3.6 定義 NDB 叢集資料節點

[ndbd][ndbd default] 區段用於組態叢集資料節點的行為。

無論您是使用 ndbd 還是 ndbmtd 二進位檔作為資料節點程序,[ndbd][ndbd default] 始終用作區段名稱。

有許多參數可控制緩衝區大小、集區大小、逾時等等。唯一強制參數是 ExecuteOnComputer;這必須在本地 [ndbd] 區段中定義。

參數 NoOfReplicas 應在 [ndbd default] 區段中定義,因為它對所有叢集資料節點都是通用的。嚴格來說,並非必須設定 NoOfReplicas,但建議明確設定。

大多數資料節點參數都在 [ndbd default] 區段中設定。只有那些明確聲明為能夠設定本地值的參數才能在 [ndbd] 區段中變更。如果存在,HostNameNodeId 必須在本地 [ndbd] 區段中定義,而不能在 config.ini 的任何其他區段中定義。換句話說,這些參數的設定特定於一個資料節點。

對於那些影響記憶體使用或緩衝區大小的參數,可以使用 KMG 作為後綴,以表示單位為 1024、1024×1024 或 1024×1024×1024。(例如,100K 表示 100 × 1024 = 102400。)

參數名稱和值不區分大小寫,除非在 MySQL 伺服器 my.cnfmy.ini 檔案中使用,在這種情況下,它們會區分大小寫。

有關 NDB 叢集磁碟資料表格特定組態參數的資訊,可以在本節稍後找到(請參閱磁碟資料組態參數)。

所有這些參數也適用於 ndbmtdndbd 的多執行緒版本)。另外三個資料節點組態參數 — MaxNoOfExecutionThreadsThreadConfigNoOfFragmentLogParts — 僅適用於 ndbmtd;當與 ndbd 一起使用時,它們不起作用。如需更多資訊,請參閱多執行緒組態參數 (ndbmtd)。另請參閱第 25.5.3 節,「ndbmtd — NDB 叢集資料節點精靈(多執行緒)」

識別資料節點。  NodeIdId 值(即資料節點識別碼)可以在節點啟動時在命令列上或在組態檔案中配置。

  • NodeId

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 [...]
    範圍 1 - 144
    重新啟動類型

    初始系統重新啟動: 需要完全關閉叢集,從備份中清除並還原叢集檔案系統,然後重新啟動叢集。

    唯一的節點 ID 用作所有叢集內部訊息的節點位址。對於資料節點,這是一個介於 1 到 144 之間的整數(含首尾)。叢集中的每個節點都必須有唯一的識別碼。

    NodeId 是識別資料節點時唯一支援的參數名稱。

  • ExecuteOnComputer

    版本(或更高版本) NDB
    類型或單位 名稱
    預設值 [...]
    範圍 ...
    已棄用 是 (在 NDB 7.5 中)
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    這指的是在 [computer] 區段中為其中一個電腦設定的 Id

    重要

    此參數已棄用,並可能在未來版本中移除。請改用 HostName 參數。

  • 此節點的節點 ID 只能提供給明確要求它的連線。要求「任何」節點 ID 的管理伺服器無法使用這個。當在同一主機上執行多個管理伺服器時可以使用此參數,且 HostName 不足以區分不同程序時。適用於測試用途。

  • HostName

    版本(或更高版本) NDB
    類型或單位 名稱或 IP 位址
    預設值 localhost
    範圍 ...
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    指定此參數會定義資料節點將駐留的電腦的主機名稱。使用 HostName 指定 localhost 以外的主機名稱。

  • ServerPort

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 [...]
    範圍 1 - 64K
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    叢集中的每個節點都使用一個連接埠來連接其他節點。預設情況下,此連接埠會動態配置,以確保同一主機電腦上的兩個節點不會收到相同的連接埠號碼,因此通常不需要為此參數指定值。

    但是,如果您需要在防火牆中開啟特定連接埠以允許資料節點與 API 節點(包括 SQL 節點)之間進行通訊,您可以在 config.ini 檔案的 [ndbd] 區段中(或者,如果您需要對多個資料節點執行此操作)[ndbd default] 區段中將此參數設定為所需的連接埠號碼,然後開啟具有該號碼的連接埠,以接收來自 SQL 節點、API 節點或兩者的連線。

    注意

    從資料節點到管理節點的連線是使用 ndb_mgmd 管理連接埠(管理伺服器的 PortNumber)完成,因此應始終允許從任何資料節點到該連接埠的連出連線。

  • TcpBind_INADDR_ANY

    將此參數設定為 TRUE1 會繫結 IP_ADDR_ANY,以便可以從任何位置建立連線(針對自動產生的連線)。預設值為 FALSE (0)。

  • NodeGroup

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 [...]
    範圍 0 - 65536
    重新啟動類型

    初始系統重新啟動: 需要完全關閉叢集,從備份中清除並還原叢集檔案系統,然後重新啟動叢集。

    此參數可用於將資料節點指派給特定的節點群組。當叢集第一次啟動時,它是唯讀的,並且不能用於線上將資料節點重新指派給不同的節點群組。通常不希望在 config.ini 檔案的 [ndbd default] 區段中使用此參數,並且必須小心不要以無效的節點數指派給任何節點群組的方式將節點指派給節點群組。

  • LocationDomainId

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 16
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    • 如果請求的資料在同一節點上找不到,讀取可以導向到同一可用性網域中的另一個節點。

    LocationDomainId 採用介於 0 到 16 (含) 之間的整數值,其中 0 為預設值;使用 0 與不設定參數相同。

  • NoOfReplicas

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 2
    範圍 1 - 4
    重新啟動類型

    初始系統重新啟動: 需要完全關閉叢集,從備份中清除並還原叢集檔案系統,然後重新啟動叢集。

    此全域參數只能在 [ndbd default] 區段中設定,並定義叢集中儲存的每個資料表的分片複本數。此參數也指定節點群組的大小。節點群組是一組全部儲存相同資訊的節點。

    節點群組是隱式形成的。第一個節點群組由具有最低節點 ID 的一組資料節點組成,下一個節點群組由下一組最低節點 ID 組成,依此類推。舉例來說,假設我們有 4 個資料節點,且 NoOfReplicas 設定為 2。這四個資料節點的節點 ID 分別為 2、3、4 和 5。那麼第一個節點群組由節點 2 和 3 組成,第二個節點群組由節點 4 和 5 組成。以這種方式配置叢集非常重要,即同一個節點群組中的節點不應放置在同一部電腦上,因為單一硬體故障會導致整個叢集失敗。

    如果未提供節點 ID,資料節點的順序將是決定節點群組的因素。無論是否進行明確的指派,都可以在管理用戶端的 SHOW 命令輸出中檢視它們。

    NoOfReplicas 的預設值為 2。這是大多數生產環境建議的值。也支援將此參數的值設定為 3 或 4。

    警告

    NoOfReplicas 設定為 1 表示只有一份叢集資料的副本;在這種情況下,單一資料節點的遺失會導致叢集失敗,因為沒有該節點儲存之資料的其他副本。

    叢集中的資料節點數必須能被此參數的值整除。例如,如果有兩個資料節點,則 NoOfReplicas 必須等於 1 或 2,因為 2/3 和 2/4 都會產生小數值;如果有四個資料節點,則 NoOfReplicas 必須等於 1、2 或 4。

  • DataDir

    版本(或更高版本) NDB
    類型或單位 路徑
    預設值 .
    範圍 ...
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    此參數指定放置追蹤檔、日誌檔、pid 檔和錯誤日誌的目錄。

    預設值為資料節點處理程序的工作目錄。

  • FileSystemPath

    版本(或更高版本) NDB
    類型或單位 路徑
    預設值 DataDir
    範圍 ...
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    此參數指定放置為中繼資料、REDO 日誌、UNDO 日誌 (用於磁碟資料表) 和資料檔建立的所有檔案的目錄。預設值為 DataDir 指定的目錄。

    注意

    此目錄必須在啟動 ndbd 處理程序之前存在。

    NDB Cluster 的建議目錄階層包含 /var/lib/mysql-cluster,在此目錄下建立節點檔案系統的目錄。此子目錄的名稱包含節點 ID。例如,如果節點 ID 為 2,則此子目錄命名為 ndb_2_fs

  • BackupDataDir

    版本(或更高版本) NDB
    類型或單位 路徑
    預設值 FileSystemPath
    範圍 ...
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    此參數指定放置備份的目錄。

    重要

    字串 '/BACKUP' 會始終附加到此值。例如,如果您將 BackupDataDir 的值設定為 /var/lib/cluster-data,則所有備份都將儲存在 /var/lib/cluster-data/BACKUP 下。這也表示有效的預設備份位置是 FileSystemPath 參數指定位置下的 BACKUP 目錄。

資料記憶體、索引記憶體和字串記憶體

注意

IndexMemory 已被棄用,並會在 NDB Cluster 的未來版本中移除。請參閱以下說明以取得更多資訊。

  • DataMemory

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 98M
    範圍 1M - 16T
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數定義可用於儲存資料庫記錄的空間量 (以位元組為單位)。此值指定的整個量會在記憶體中配置,因此機器有足夠的實體記憶體來容納它非常重要。

    對於可變大小的資料表屬性,資料儲存在從 DataMemory 配置的個別資料頁面上。可變長度記錄使用固定大小的部分,並額外使用 4 個位元組來參照可變大小的部分。可變大小的部分有 2 個位元組的額外負擔,每個屬性額外使用 2 個位元組。

    最大記錄大小為 30000 個位元組。

    指定給 DataMemory 的資源用於儲存所有資料和索引。(配置為 IndexMemory 的任何記憶體都會自動新增至 DataMemory 使用的記憶體,以形成一個通用資源集區。)

    配置頁面後,目前無法將其返回可用頁面集區,除非刪除資料表。(這也表示 DataMemory 頁面,一旦配置給指定的資料表,就不能由其他資料表使用。)執行資料節點復原也會壓縮分割區,因為所有記錄都會從其他活動節點插入到空的分割區中。

    • 大型交易並不比小型交易快

    • 大型交易會增加遺失且必須在交易失敗事件中重複執行的操作次數

    • 大型交易會使用更多記憶體

    DataMemory 的預設值為 98MB。最小值為 1MB。沒有最大大小,但實際上,最大大小必須調整,以便在達到限制時,處理程序不會開始進行交換。此限制取決於機器上可用的實體 RAM 量,以及作業系統可以配置給任何一個處理程序的記憶體量。32 位元作業系統通常限制為每個處理程序 2-4GB;64 位元作業系統可以使用更多。對於大型資料庫,因此最好使用 64 位元作業系統。

  • IndexMemory

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 0
    範圍 1M - 1T
    已棄用 是 (在 NDB 7.6 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    IndexMemory 參數已棄用(並可能在未來移除);任何分配給 IndexMemory 的記憶體,現在會改為分配到與 DataMemory 相同的資源池。DataMemory 負責儲存資料和索引在記憶體中的所有資源。在 NDB 9.0 中,於叢集組態檔中使用 IndexMemory 會觸發管理伺服器的警告。

    您可以使用以下公式來估計雜湊索引的大小:

      size  = ( (fragments * 32K) + (rows * 18) )
              * fragment_replicas

    fragments 是分片的數量,fragment_replicas 是分片副本的數量(通常為 2),而 rows 是列的數量。如果一個表格有一百萬列、八個分片和兩個分片副本,則預期的索引記憶體使用量計算如下:

      ((8 * 32K) + (1000000 * 18)) * 2 = ((8 * 32768) + (1000000 * 18)) * 2
      = (262144 + 18000000) * 2
      = 18262144 * 2 = 36524288 bytes = ~35MB

    排序索引的索引統計資料(啟用時)會儲存在 mysql.ndb_index_stat_sample 表格中。由於此表格具有雜湊索引,因此會增加索引記憶體的使用量。給定排序索引的列數上限可以計算如下:

      sample_size= key_size + ((key_attributes + 1) * 4)
    
      sample_rows = IndexStatSaveSize
                    * ((0.01 * IndexStatSaveScale * log2(rows * sample_size)) + 1)
                    / sample_size

    在前面的公式中,key_size 是排序索引鍵的大小(以位元組為單位),key_attributes 是排序索引鍵中的屬性數量,而 rows 是基底表格中的列數。

    假設表格 t1 有 100 萬列,並且在兩個四位元組整數上有名為 ix1 的排序索引。此外,假設 IndexStatSaveSizeIndexStatSaveScale 設定為其預設值(分別為 32K 和 100)。使用先前的 2 個公式,我們可以計算如下:

      sample_size = 8  + ((1 + 2) * 4) = 20 bytes
    
      sample_rows = 32K
                    * ((0.01 * 100 * log2(1000000*20)) + 1)
                    / 20
                    = 32768 * ( (1 * ~16.811) +1) / 20
                    = 32768 * ~17.811 / 20
                    = ~29182 rows

    因此,預期的索引記憶體使用量為 2 * 18 * 29182 = ~1050550 位元組。

    此參數的最小值和預設值為 0(零)。

  • StringMemory

    版本(或更高版本) NDB
    類型或單位 % 或位元組
    預設值 25
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    此參數決定為字串(例如表格名稱)分配多少記憶體,並且在 config.ini 檔案的 [ndbd][ndbd default] 區段中指定。介於 0100(含)之間的值會被解讀為最大預設值的百分比,此預設值是根據多種因素計算得出,包括表格數量、最大表格名稱大小、 .FRM 檔案的最大大小、MaxNoOfTriggers、最大欄名稱大小以及最大預設欄值。

    大於 100 的值會被解讀為位元組數。

    預設值為 25,也就是預設最大值的 25%。

    在大多數情況下,預設值應該足夠,但是當您有大量的 NDB 表格(1000 個或更多)時,可能會出現錯誤 773 字串記憶體不足,請修改 StringMemory 組態參數:永久錯誤:結構描述錯誤,在這種情況下,您應該增加此值。25(25%)並不過分,並且應該可以防止此錯誤在極端條件下再次發生。

以下範例說明如何將記憶體用於表格。請考量以下表格定義:

CREATE TABLE example (
  a INT NOT NULL,
  b INT NOT NULL,
  c INT NOT NULL,
  PRIMARY KEY(a),
  UNIQUE(b)
) ENGINE=NDBCLUSTER;

對於每個記錄,有 12 個位元組的資料加上 12 個位元組的額外負荷。沒有可為 Null 的欄可節省 4 個位元組的額外負荷。此外,我們在欄 ab 上有兩個排序索引,每個記錄大約消耗 10 個位元組。基底表格上有一個主鍵雜湊索引,每個記錄大約使用 29 個位元組。唯一約束是透過一個單獨的表格實作,其中 b 作為主鍵,而 a 作為欄。此其他表格還會在 example 表格中每個記錄消耗額外的 29 個位元組索引記憶體,以及 8 個位元組的記錄資料加上 12 個位元組的額外負荷。

因此,對於一百萬個記錄,我們需要 58MB 的索引記憶體來處理主鍵和唯一約束的雜湊索引。我們還需要 64MB 來存放基底表格和唯一索引表格的記錄,以及兩個排序索引表格。

您可以看到雜湊索引佔用了相當多的記憶體空間;但是,它們會提供非常快速的資料存取作為回報。它們也用於 NDB 叢集來處理唯一性約束。

目前,唯一的分割演算法是雜湊,並且排序索引是每個節點的本機索引。因此,排序索引在一般情況下無法用於處理唯一性約束。

對於 IndexMemoryDataMemory 而言,一個重點是資料庫總大小是每個節點群組的所有資料記憶體和所有索引記憶體的總和。每個節點群組用於儲存複寫的資訊,因此如果有四個具有兩個分片副本的節點,則會有兩個節點群組。因此,可用的總資料記憶體為每個資料節點的 2 × DataMemory

強烈建議將 DataMemoryIndexMemory 設定為所有節點的相同值。資料分配在叢集中的所有節點上平均分配,因此任何節點可用的最大空間量不得大於叢集中最小節點的空間量。

可以變更 DataMemory,但是減少它可能會有風險;這樣做很容易導致節點甚至整個 NDB 叢集因為記憶體空間不足而無法重新啟動。增加這些值應該可以接受,但是建議以與軟體升級相同的方式執行此類升級,首先更新組態檔案,然後重新啟動管理伺服器,然後依次重新啟動每個資料節點。

MinFreePct.  保留一部分(預設為 5%)的資料節點資源,包括 DataMemory,以確保資料節點在執行重新啟動時不會耗盡記憶體。可以使用 MinFreePct 資料節點組態參數(預設為 5)調整此設定。

版本(或更高版本) NDB
類型或單位 unsigned
預設值 5
範圍 0 - 100
重新啟動類型

節點重新啟動: 需要對叢集進行滾動重新啟動

更新不會增加使用的索引記憶體量。插入會立即生效;但是,實際上在交易提交之前不會刪除列。

交易參數.  我們接下來討論的幾個 [ndbd] 參數非常重要,因為它們會影響平行交易的數量以及系統可以處理的交易大小。MaxNoOfConcurrentTransactions 設定節點中可能發生的平行交易數量。MaxNoOfConcurrentOperations 設定在更新階段或同時鎖定的記錄數量。

這兩個參數(尤其是 MaxNoOfConcurrentOperations)很可能是使用者設定特定值而不是使用預設值的目標。預設值是針對使用小交易的系統設定,以確保這些系統不會使用過多的記憶體。

MaxDMLOperationsPerTransaction 設定在給定交易中可以執行的最大 DML 作業數量。

  • MaxNoOfConcurrentTransactions

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 4096
    範圍 32 - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    每個叢集資料節點都需要每個叢集中每個作用中交易的交易記錄。協調交易的任務會在所有資料節點之間分配。叢集中的交易記錄總數是任何給定節點中的交易數量乘以叢集中的節點數量。

    交易記錄會分配給個別的 MySQL 伺服器。每個與 MySQL 伺服器的連線都需要至少一個交易記錄,以及每個由該連線存取的表格一個額外的交易物件。這表示叢集中交易總數的合理最小值可以表示為:

    TotalNoOfConcurrentTransactions =
        (maximum number of tables accessed in any single transaction + 1)
        * number of SQL nodes

    假設有 10 個使用叢集的 SQL 節點。一個涉及 10 個表格的單一聯結需要 11 個交易記錄;如果在一個交易中有 10 個這樣的聯結,則每個 MySQL 伺服器需要 10 * 11 = 110 個交易記錄,或者總共需要 110 * 10 = 1100 個交易記錄。可以預期每個資料節點處理 TotalNoOfConcurrentTransactions / 資料節點的數量。對於具有 4 個資料節點的 NDB 叢集,這表示在每個資料節點上將 MaxNoOfConcurrentTransactions 設定為 1100 / 4 = 275。此外,您應該透過確保單一節點群組可以容納所有平行交易來提供故障復原;換句話說,每個資料節點的 MaxNoOfConcurrentTransactions 足以涵蓋等於 TotalNoOfConcurrentTransactions / 節點群組數量的交易數量。如果此叢集具有單一節點群組,則應將 MaxNoOfConcurrentTransactions 設定為 1100(與整個叢集的平行交易總數相同)。

    此外,每個交易至少涉及一個作業;因此,為 MaxNoOfConcurrentTransactions 設定的值應始終不大於 MaxNoOfConcurrentOperations 的值。

    對於所有叢集資料節點,必須將此參數設定為相同的值。這是因為當資料節點失敗時,最舊的倖存節點會重新建立失敗節點中正在進行的所有交易的交易狀態。

    可以使用滾動重新啟動來變更此值,但是叢集上的流量必須使得在進行此操作時,發生的交易數不超過舊層級和新層級中的較低者。

    預設值為 4096。

  • MaxNoOfConcurrentOperations

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 32K
    範圍 32 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    根據交易的大小和數量調整此參數的值是個好主意。當執行僅涉及少量操作和記錄的交易時,此參數的預設值通常就足夠了。執行涉及大量記錄的大型交易通常需要您增加其值。

    每個更新叢集資料的交易都會保留記錄,無論是在交易協調器中還是在執行實際更新的節點中。這些記錄包含尋找回滾 UNDO 記錄、鎖定佇列和其他用途所需的狀態資訊。

    此參數的最小值應設定為交易中同時更新的記錄數除以叢集資料節點數。例如,在一個有四個資料節點的叢集中,預計使用交易處理一百萬個並行更新,您應該將此值設定為 1000000 / 4 = 250000。為了幫助提供針對故障的恢復能力,建議您將此參數設定為一個足夠高的值,以便允許單個資料節點處理其節點組的負載。換句話說,您應該將該值設定為等於 並行操作總數 / 節點組數量。(在只有一個節點組的情況下,這與整個叢集的並行操作總數相同。)

    由於每個交易都至少涉及一個操作,MaxNoOfConcurrentOperations 的值應始終大於或等於 MaxNoOfConcurrentTransactions 的值。

    設定鎖定的讀取查詢也會導致建立操作記錄。在個別節點內會分配一些額外的空間,以適應節點分佈不均的情況。

    當查詢使用唯一雜湊索引時,每個交易中的記錄實際上會使用兩個操作記錄。第一個記錄代表索引表中的讀取,第二個記錄處理基表上的操作。

    預設值為 32768。

    此參數實際上處理兩個可以單獨配置的值。第一個指定要將多少操作記錄放置在交易協調器中。第二部分指定多少操作記錄應在本機資料庫中。

    在一個八節點叢集上執行的大型交易需要在交易協調器中具有與交易中涉及的讀取、更新和刪除一樣多的操作記錄。但是,這些操作記錄分佈在所有八個節點上。因此,如果有必要為一個非常大的交易配置系統,最好單獨配置這兩部分。 MaxNoOfConcurrentOperations 始終用於計算節點交易協調器部分中的操作記錄數量。

    了解操作記錄的記憶體需求也很重要。每個記錄消耗大約 1KB 的空間。

  • MaxNoOfLocalOperations

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 未定義
    範圍 32 - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    預設情況下,此參數的計算公式為 1.1 × MaxNoOfConcurrentOperations。這適用於許多同時交易的系統,但沒有一個交易非常大。如果需要一次處理一個非常大的交易,並且有很多節點,最好透過明確指定此參數來覆蓋預設值。

    此參數已棄用,並會在未來的 NDB 叢集版本中移除。此外,此參數與 TransactionMemory 參數不相容;如果您嘗試在叢集組態檔 (config.ini) 中為這兩個參數設定值,管理伺服器將拒絕啟動。

  • MaxDMLOperationsPerTransaction

    版本(或更高版本) NDB
    類型或單位 操作 (DML)
    預設值 4294967295
    範圍 32 - 4294967295
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數限制交易的大小。如果交易需要的操作數量超過此數量,則會中止交易。

    此參數的值不能超過為 MaxNoOfConcurrentOperations 設定的值。

交易臨時儲存。下一組 [ndbd] 參數用於決定執行屬於叢集交易的一部分的陳述式時的臨時儲存。當陳述式完成且叢集正在等待提交或回滾時,會釋放所有記錄。

這些參數的預設值在大多數情況下都足夠。但是,需要支援涉及大量列或操作的交易的使用者可能需要增加這些值以在系統中實現更好的並行性,而其應用程式需要相對較小交易的使用者可以減少這些值以節省記憶體。

  • MaxNoOfConcurrentIndexOperations

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 8K
    範圍 0 - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    對於使用唯一雜湊索引的查詢,在查詢的執行階段會使用另一組臨時操作記錄。此參數設定該記錄池的大小。因此,只有在執行查詢的一部分時才會分配此記錄。一旦執行完這部分,就會釋放該記錄。處理中止和提交所需的狀態由正常操作記錄處理,其中池大小由參數 MaxNoOfConcurrentOperations 設定。

    此參數的預設值為 8192。只有在使用唯一雜湊索引的極高並行性的罕見情況下,才需要增加此值。如果 DBA 確定叢集不需要高度的並行性,則可以使用較小的值並節省記憶體。

    此參數已棄用,並會在未來的 NDB 叢集版本中移除。此外,此參數與 TransactionMemory 參數不相容;如果您嘗試在叢集組態檔 (config.ini) 中為這兩個參數設定值,管理伺服器將拒絕啟動。

  • MaxNoOfFiredTriggers

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 4000
    範圍 0 - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    MaxNoOfFiredTriggers 的預設值為 4000,足以應付大多數情況。在某些情況下,如果 DBA 認為叢集中不需要高並行性,甚至可以降低此值。

    當執行影響唯一雜湊索引的操作時,會建立記錄。在具有唯一雜湊索引的表中插入或刪除記錄,或更新屬於唯一雜湊索引一部分的列,會在索引表中觸發插入或刪除。產生的記錄用於表示此索引表操作,同時等待觸發該操作的原始操作完成。此操作是短期的,但在基表上包含一組唯一雜湊索引的許多並行寫入操作的情況下,仍然可能需要其池中存在大量記錄。

    此參數已棄用,並會在未來的 NDB 叢集版本中移除。此外,此參數與 TransactionMemory 參數不相容;如果您嘗試在叢集組態檔 (config.ini) 中為這兩個參數設定值,管理伺服器將拒絕啟動。

  • TransactionBufferMemory

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 1M
    範圍 1K - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數影響的記憶體用於追蹤更新索引表和讀取唯一索引時觸發的操作。此記憶體用於儲存這些操作的索引鍵和欄位資訊。只有極少數情況下才需要將此參數的值從預設值更改。

    TransactionBufferMemory 的預設值為 1MB。

    正常的讀取和寫入操作使用類似的緩衝區,其使用時間更短。編譯時參數 ZATTRBUF_FILESIZE (位於 ndb/src/kernel/blocks/Dbtc/Dbtc.hpp 中) 設定為 4000 × 128 個位元組 (500KB)。類似的索引鍵資訊緩衝區 ZDATABUF_FILESIZE (也在 Dbtc.hpp 中) 包含 4000 × 16 = 62.5KB 的緩衝區空間。Dbtc 是處理交易協調的模組。

交易資源配置參數。以下清單中的參數用於在交易協調器 (DBTC) 中配置交易資源。將這些參數中的任何一個設定為預設值 (0) 都會將交易記憶體專用於對應資源的估計資料節點總用量的 25%。這些參數的實際最大可能值通常受限於資料節點可用的記憶體量;設定它們不會影響配置給資料節點的總記憶體量。此外,您應該記住,它們控制為資料節點保留的內部記錄數量,獨立於 MaxDMLOperationsPerTransactionMaxNoOfConcurrentIndexOperationsMaxNoOfConcurrentOperationsMaxNoOfConcurrentScansMaxNoOfConcurrentTransactionsMaxNoOfFiredTriggersMaxNoOfLocalScansTransactionBufferMemory 的任何設定值(請參閱 交易參數交易臨時儲存)。

  • ReservedConcurrentIndexOperations

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在一個資料節點上具有專用資源的同時索引操作的數量。

  • ReservedConcurrentOperations

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在一個資料節點上的交易協調器中具有專用資源的同時操作的數量。

  • ReservedConcurrentScans

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在一個資料節點上,具有專用資源的同時掃描數量。

  • ReservedConcurrentTransactions

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在一個資料節點上,具有專用資源的同時交易數量。

  • ReservedFiredTriggers

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在一個 ndbd (DB) 節點上,具有專用資源的觸發器數量。

  • ReservedLocalScans

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在一個資料節點上,具有專用資源的同時片段掃描數量。

  • ReservedTransactionBufferMemory

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    分配給每個資料節點的金鑰和屬性資料的動態緩衝區空間(以位元組為單位)。

  • TransactionMemory

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 0
    範圍 0 - 16384G
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    重要

    許多組態參數與 TransactionMemory 不相容;無法同時設定這些參數中的任何一個與 TransactionMemory,如果您嘗試這樣做,管理伺服器將無法啟動(請參閱 與 TransactionMemory 不相容的參數)。

    此參數決定在每個資料節點上為交易分配的記憶體(以位元組為單位)。交易記憶體的設定方式如下:

    • 如果已設定 TransactionMemory,則此值將用於決定交易記憶體。

    • 否則,交易記憶體的計算方式與 NDB 8.0 之前的版本相同。

    與 TransactionMemory 不相容的參數。以下參數不能與 TransactionMemory 同時使用,因此已棄用:

    如果在叢集組態檔案 (config.ini) 中也設定了 TransactionMemory,則明確設定剛列出的任何參數會導致管理節點無法啟動。

    有關 NDB 叢集資料節點中資源分配的更多資訊,請參閱 章節 25.4.3.13,“資料節點記憶體管理”

掃描和緩衝。Dblqh 模組(位於 ndb/src/kernel/blocks/Dblqh/Dblqh.hpp 中)中還有其他 [ndbd] 參數會影響讀取和更新。這些參數包括 ZATTRINBUF_FILESIZE,預設設定為 10000 × 128 位元組 (1250KB) 和 ZDATABUF_FILE_SIZE,預設設定為 10000 * 16 位元組(約 156KB)的緩衝區空間。到目前為止,無論是來自使用者的報告還是我們自己廣泛測試的結果,都沒有任何建議應增加這些編譯時限制。

  • BatchSizePerLocalScan

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 256
    範圍 1 - 992
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數用於計算用於處理同時掃描操作的鎖定記錄數。

    已棄用。

    BatchSizePerLocalScan 與 SQL 節點中定義的 BatchSize 密切相關。

  • LongMessageBuffer

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 64M
    範圍 512K - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    這是一個內部緩衝區,用於在個別節點內和節點之間傳遞訊息。預設值為 64MB。

    此參數很少需要從預設值進行變更。

  • MaxFKBuildBatchSize

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 64
    範圍 16 - 512
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    用於建置外鍵的最大掃描批次大小。增加此參數設定的值可能會加速外鍵建置,但會對進行中的流量產生更大的影響。

  • MaxNoOfConcurrentScans

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 256
    範圍 2 - 500
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數用於控制可在叢集中執行的平行掃描數量。每個交易協調器可以處理為此參數定義的平行掃描數量。每個掃描查詢都是透過平行掃描所有分割區來執行的。每個分割區掃描都會在使用分割區所在的節點中使用掃描記錄,記錄的數量是此參數的值乘以節點數。叢集應能夠同時從叢集中的所有節點支援 MaxNoOfConcurrentScans 次掃描。

    實際上會在兩種情況下執行掃描。第一種情況發生在沒有雜湊或排序索引來處理查詢時,在這種情況下,會透過執行完整表格掃描來執行查詢。第二種情況是在沒有雜湊索引來支援查詢但有排序索引時遇到。使用排序索引表示執行平行範圍掃描。順序僅保留在本地分割區上,因此必須在所有分割區上執行索引掃描。

    MaxNoOfConcurrentScans 的預設值為 256。最大值為 500。

  • MaxNoOfLocalScans

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 4 * MaxNoOfConcurrentScans * [資料節點數] + 2
    範圍 32 - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    如果許多掃描未完全平行化,則指定本機掃描記錄的數量。當未提供本機掃描記錄的數量時,將按此處顯示的方式計算

    4 * MaxNoOfConcurrentScans * [# data nodes] + 2

    此參數已棄用,並會在未來的 NDB 叢集版本中移除。此外,此參數與 TransactionMemory 參數不相容;如果您嘗試在叢集組態檔 (config.ini) 中為這兩個參數設定值,管理伺服器將拒絕啟動。

  • MaxParallelCopyInstances

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 64
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當剛啟動的節點與已擁有最新資料的節點同步時,此參數設定節點重新啟動或系統重新啟動的複製階段中使用的平行化,方法是從最新節點複製任何已變更的記錄。由於在這種情況下完全平行化可能會導致超載情況,因此 MaxParallelCopyInstances 提供了一種減少平行化的方法。此參數的預設值為 0。此值表示有效平行化等於剛啟動的節點中以及更新節點中的 LDM 執行個體數量。

  • MaxParallelScansPerFragment

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 256
    範圍 1 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    可以設定允許平行掃描的最大數量(TUP 掃描和 TUX 掃描),然後它們才開始排隊以進行串列處理。您可以增加此值,以利用在平行執行大量掃描時的任何未使用的 CPU 並提高其效能。

  • MaxReorgBuildBatchSize

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 64
    範圍 16 - 512
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    用於重新組織表格分割區的最大掃描批次大小。增加此參數設定的值可能會加速重新組織,但會對進行中的流量產生更大的影響。

  • MaxUIBuildBatchSize

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 64
    範圍 16 - 512
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    用於建置唯一金鑰的最大掃描批次大小。增加此參數設定的值可能會加速此類建置,但會對進行中的流量產生更大的影響。

記憶體配置

MaxAllocate

版本(或更高版本) NDB
類型或單位 unsigned
預設值 32M
範圍 1M - 1G
已棄用 是(在 NDB 8.0 中)
重新啟動類型

節點重新啟動: 需要對叢集進行滾動重新啟動

此參數在較舊版本的 NDB 叢集中使用,但在 NDB 9.0 中無效。它已棄用,並可能在未來的版本中移除。

多個傳輸器

NDB 會為資料節點對之間的通訊分配多個傳輸器。透過為該版本中引入的 NodeGroupTransporters 參數設定適當的值,可以影響如此分配的傳輸器數量。

NodeGroupTransporters

版本(或更高版本) NDB
類型或單位 整數
預設值 0
範圍 0 - 32
重新啟動類型

節點重新啟動: 需要對叢集進行滾動重新啟動

此參數決定在同一節點群組中的節點之間使用的傳輸器數量。預設值 (0) 表示使用的傳輸器數量與節點中的 LDM 數量相同。這應該足以應付大多數使用案例;因此,很少需要從預設值變更此值。

NodeGroupTransporters 設定為大於 LDM 執行緒數或 TC 執行緒數(以較高者為準)的數字,會導致 NDB 使用這兩個數字的執行緒的最大值。這表示大於此值的值實際上會被忽略。

雜湊對應表大小

DefaultHashMapSize

版本(或更高版本) NDB
類型或單位 LDM 執行緒
預設值 240
範圍 0 - 3840
重新啟動類型

節點重新啟動: 需要對叢集進行滾動重新啟動

此參數最初的預期用途是促進升級,尤其是從具有不同預設雜湊對應表大小的舊版本升級和降級。從 NDB 叢集 7.3 (或更新版本) 升級到更新版本時,這不是問題。

目前不支援在建立或修改任何表格且 DefaultHashMapSize 等於 3840 後,在線上減少此參數。

記錄和檢查點。以下 [ndbd] 參數控制記錄和檢查點行為。

  • FragmentLogFileSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 16M
    範圍 4M - 1G
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    設定此參數可讓您直接控制重做記錄檔的大小。當 NDB 叢集在高負載下執行且無法在嘗試開啟新的記錄檔之前足夠快地關閉片段記錄檔時,這會很有用(一次只能開啟 2 個片段記錄檔);增加片段記錄檔的大小可讓叢集有更多時間才需要開啟每個新的片段記錄檔。此參數的預設值為 16M。

    有關片段記錄檔的更多資訊,請參閱 NoOfFragmentLogFiles 的描述。

  • InitialNoOfOpenFiles

    版本(或更高版本) NDB
    類型或單位 檔案
    預設值 27
    範圍 20 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定為開啟檔案配置的內部執行緒的初始數量。

    預設值為 27。

  • InitFragmentLogFiles

    版本(或更高版本) NDB
    類型或單位 [請參閱數值]
    預設值 SPARSE
    範圍 SPARSE, FULL
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    預設情況下,當資料節點執行初始啟動時,會以稀疏方式建立片段日誌檔 — 也就是說,根據使用的作業系統和檔案系統,不一定會將所有位元組都寫入磁碟。但是,可以使用此參數覆寫此行為,並強制寫入所有位元組,無論使用的平台和檔案系統類型為何。InitFragmentLogFiles 可以採用以下兩個值之一

    • SPARSE。以稀疏方式建立片段日誌檔。這是預設值。

    • FULL。強制將片段日誌檔的所有位元組寫入磁碟。

    根據您的作業系統和檔案系統,設定 InitFragmentLogFiles=FULL 可能有助於消除重做日誌寫入時的 I/O 錯誤。

  • EnablePartialLcp

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 true
    範圍 ...
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    true 時,啟用部分本機檢查點:這表示每個 LCP 只會記錄完整資料庫的一部分,加上自上次 LCP 以來任何包含已變更列的記錄;如果沒有任何列變更,則 LCP 只會更新 LCP 控制檔,而不會更新任何資料檔。

    如果停用 EnablePartialLcp (false),則每個 LCP 都只使用單一檔案並寫入完整檢查點;這需要最少的 LCP 磁碟空間,但會增加每個 LCP 的寫入負載。預設值為啟用 (true)。部分 LCP 使用的空間比例可透過 RecoveryWork 組態參數的設定修改。

    如需有關完整和部分 LCP 使用的檔案和目錄的詳細資訊,請參閱 NDB 叢集資料節點檔案系統目錄

    將此參數設定為 false 也會停用調適型 LCP 控制機制使用的磁碟寫入速度計算。

  • LcpScanProgressTimeout

    版本(或更高版本) NDB
    類型或單位
    預設值 180
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    本機檢查點片段掃描監控程式會定期檢查在執行本機檢查點時執行的每個片段掃描中是否有任何進度,如果經過給定的時間後沒有任何進度,則會關閉節點。可以使用 LcpScanProgressTimeout 資料節點組態參數設定此間隔,此參數會設定本機檢查點可以停滯的最長時間,之後 LCP 片段掃描監控程式會關閉節點。

    預設值為 60 秒(與先前的版本提供相容性)。將此參數設定為 0 會完全停用 LCP 片段掃描監控程式。

  • MaxNoOfOpenFiles

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 0
    範圍 20 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定要為開啟檔案配置的內部執行緒數上限。 任何需要變更此參數的情況都應回報為錯誤

    預設值為 0。但是,此參數可以設定的最小值為 20。

  • MaxNoOfSavedMessages

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 25
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定錯誤日誌中寫入的最大錯誤數,以及在覆寫現有追蹤檔案之前保留的最大追蹤檔案數。追蹤檔案會在節點因任何原因當機時產生。

    預設值為 25,這會將這些最大值設定為 25 個錯誤訊息和 25 個追蹤檔案。

  • MaxLCPStartDelay

    版本(或更高版本) NDB
    類型或單位
    預設值 0
    範圍 0 - 600
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在平行資料節點復原中,實際上只會平行複製和同步表格資料;字典和檢查點資訊等中繼資料的同步會以序列方式完成。此外,字典和檢查點資訊的復原無法與執行本機檢查點平行執行。這表示,當同時啟動或重新啟動許多資料節點時,資料節點可能會被迫等待執行本機檢查點,這可能會導致更長的節點復原時間。

    可以強制延遲本機檢查點,以允許更多(可能全部)資料節點完成中繼資料同步;一旦每個資料節點的中繼資料同步完成,所有資料節點就可以平行復原表格資料,即使在執行本機檢查點時也是如此。若要強制執行此延遲,請設定 MaxLCPStartDelay,其決定叢集在資料節點繼續同步中繼資料時,可以等待開始本機檢查點的秒數。此參數應在 [ndbd default] config.ini 檔案的區段中設定,以便所有資料節點都相同。最大值為 600;預設值為 0。

  • NoOfFragmentLogFiles

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 16
    範圍 3 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    此參數設定節點的 REDO 日誌檔數,因此也設定配置給 REDO 日誌的空間量。由於 REDO 日誌檔是以環狀方式組織,因此集合中的第一個和最後一個日誌檔(有時分別稱為headtail日誌檔)不會碰在一起,這一點非常重要。當這些日誌檔太靠近時,由於沒有空間容納新的日誌記錄,節點會開始中止所有包含更新的交易。

    只有在自插入該日誌記錄以來,完成兩個必要的本機檢查點後,才會移除 REDO 日誌記錄。檢查點頻率由本章其他地方討論的一組組態參數決定。

    預設參數值為 16,依預設,這表示 16 組 4 個 16MB 檔案,總共 1024MB。可以使用 FragmentLogFileSize 參數設定個別日誌檔的大小。在需要大量更新的情況下,NoOfFragmentLogFiles 的值可能需要設定為高達 300 或甚至更高,才能為 REDO 日誌提供足夠的空間。

    如果檢查點速度較慢,且資料庫的寫入次數過多,導致日誌檔已滿,且在不危及復原的情況下無法削減日誌尾端,則所有更新交易都會因內部錯誤碼 410 (Out of log file space temporarily) 而中止。此狀況會持續存在,直到檢查點完成且日誌尾端可以向前移動為止。

    重要

    此參數無法即時變更;您必須使用 --initial 重新啟動節點。如果您想要變更執行中叢集中所有資料節點的此值,您可以使用滾動節點重新啟動來變更(在啟動每個資料節點時使用 --initial)。

  • RecoveryWork

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 60
    範圍 25 - 100
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    LCP 檔案的儲存額外負荷百分比。此參數只有在 EnablePartialLcp 為 true 時才生效,也就是說,只有在啟用部分本機檢查點時才會生效。較高的值表示

    • 每個 LCP 寫入的記錄較少,LCP 使用更多空間

    • 重新啟動期間需要更多工作

    RecoveryWork 的較低值表示

    • 每個 LCP 寫入的記錄較多,但 LCP 在磁碟上需要的空間較少。

    • 重新啟動期間的工作較少,因此重新啟動速度更快,但代價是在正常運作期間需要更多工作

    例如,將 RecoveryWork 設定為 60 表示 LCP 的總大小約為要檢查點資料大小的 1 + 0.6 = 1.6 倍。這表示,與使用完整檢查點的重新啟動期間完成的工作相比,重新啟動的還原階段需要多執行 60% 的工作。(在重新啟動的其他階段中,這會得到更多補償,因此在使用部分 LCP 時,整體而言重新啟動仍然比使用完整 LCP 時更快。)為了不填滿重做日誌,必須以檢查點期間資料變更速率的 1 + (1 / RecoveryWork) 倍的速率寫入 — 因此,當 RecoveryWork = 60 時,必須以大約 1 + (1 / 0.6 ) = 2.67 倍的變更速率寫入。換句話說,如果以每秒 10 MB 的速度寫入變更,則檢查點需要以大約每秒 26.7 MB 的速度寫入。

    設定 RecoveryWork = 40 表示只需要 1.4 倍的 LCP 總大小(因此還原階段所需的時間減少 10% 到 15%)。在這種情況下,檢查點寫入速率是變更速率的 3.5 倍。

    NDB 原始碼發行版本包含一個模擬 LCP 的測試程式。可以在 storage/ndb/src/kernel/blocks/backup/ 中找到 lcp_simulator.cc。若要在 Unix 平台上編譯和執行它,請執行這裡顯示的命令

    $> gcc lcp_simulator.cc
    $> ./a.out

    此程式除了 stdio.h 之外沒有任何相依性,而且不需要連線到 NDB 叢集或 MySQL 伺服器。依預設,它會模擬 300 個 LCP(三組 100 個 LCP,每個 LCP 依序由插入、更新和刪除組成),並回報每個 LCP 之後的大小。您可以透過變更原始碼中的 recovery_workinsert_workdelete_work 的值,然後重新編譯來變更模擬。如需更多資訊,請參閱程式的原始碼。

  • InsertRecoveryWork

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 40
    範圍 0 - 70
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    用於插入列的 RecoveryWork 百分比。較高的值會增加本機檢查點期間的寫入次數,並減少 LCP 的總大小。較低的值會減少 LCP 期間的寫入次數,但會導致 LCP 使用更多空間,這意味著復原需要更長的時間。此參數僅在 EnablePartialLcp 為 true 時生效,也就是說,僅在啟用部分本機檢查點時才生效。

  • EnableRedoControl

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 true
    範圍 ...
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用用於控制重做日誌使用量的自適應檢查點速度。

    啟用時(預設值),EnableRedoControl 允許資料節點在將 LCP 寫入磁碟的速度方面具有更大的彈性。更具體來說,啟用此參數意味著可以使用更高的寫入速率,以便 LCP 可以更快完成並修剪重做日誌,從而減少復原時間和磁碟空間需求。此功能允許資料節點更好地利用現代固態儲存裝置和協定(例如使用非揮發性記憶體快遞(NVMe)的固態硬碟(SSD))提供的較高 I/O 速率和更大的頻寬。

    NDB 部署在 I/O 或頻寬相對於使用固態技術的系統(例如使用傳統硬碟(HDD)的系統)受限的系統上時,EnableRedoControl 機制很容易導致 I/O 子系統飽和,從而增加資料節點輸入和輸出的等待時間。特別是,這可能會導致 NDB 磁碟資料表出現問題,這些資料表的表空間或日誌檔案群組與資料節點 LCP 和重做日誌檔案共用受限的 I/O 子系統;此類問題可能包括由於 GCP 停止錯誤導致的節點或叢集失敗。將 EnableRedoControl 設定為 false 以在此類情況下停用它。將 EnablePartialLcp 設定為 false 也會停用自適應計算。

中繼資料物件。  下一組 [ndbd] 參數定義中繼資料物件的集區大小,用於定義叢集中索引、事件和叢集之間複寫使用的屬性、表、索引和觸發物件的最大數量。

注意

這些僅充當叢集的建議,任何未指定的都會恢復為顯示的預設值。

  • MaxNoOfAttributes

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 1000
    範圍 32 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定叢集中可以定義的建議最大屬性數;與 MaxNoOfTables 類似,它不打算作為硬上限。

    (在較舊的 NDB 叢集版本中,此參數有時被視為某些操作的硬性限制。當建立的表多於可以複寫的表時,這會導致 NDB 叢集複寫出現問題,並且有時當可以建立多於 MaxNoOfAttributes 個屬性時(或在某些情況下不可能時)會導致混淆。)

    預設值為 1000,最小值為 32。最大值為 4294967039。由於所有中繼資料都完全複寫在伺服器上,因此每個屬性每個節點會消耗約 200 位元組的儲存空間。

    設定 MaxNoOfAttributes 時,務必事先為您將來可能執行的任何 ALTER TABLE 陳述式做好準備。這是因為在叢集表上執行 ALTER TABLE 期間,會使用原始表中屬性數的 3 倍,因此一個好的做法是允許此數量的兩倍。例如,如果具有最多屬性的 NDB 叢集表(greatest_number_of_attributes)具有 100 個屬性,則 MaxNoOfAttributes 值的良好起點為 6 * greatest_number_of_attributes = 600

    您還應該估計每個表的平均屬性數,並將其乘以 MaxNoOfTables。如果此值大於前一段中獲得的值,則應改用較大的值。

    假設您可以順利建立所有想要的表,您還應該在設定參數後嘗試實際的 ALTER TABLE 來驗證此數字是否足夠。如果沒有成功,請將 MaxNoOfAttributes 增加另一個 MaxNoOfTables 的倍數並再次測試。

  • MaxNoOfTables

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 128
    範圍 8 - 20320
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    每個表和叢集中每個唯一的雜湊索引都會配置一個表物件。此參數設定整個叢集建議的最大表物件數;與 MaxNoOfAttributes 類似,它不打算作為硬上限。

    (在較舊的 NDB 叢集版本中,此參數有時被視為某些操作的硬性限制。當建立的表多於可以複寫的表時,這會導致 NDB 叢集複寫出現問題,並且有時當可以建立多於 MaxNoOfTables 個表時(或在某些情況下不可能時)會導致混淆。)

    對於具有 BLOB 資料類型的每個屬性,都會使用一個額外的表來儲存大部分 BLOB 資料。在定義表總數時,也必須考慮這些表。

    此參數的預設值為 128。最小值為 8,最大值為 20320。每個表物件每個節點約消耗 20KB。

    注意

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 的總和不得超過 232 − 2 (4294967294)。

  • MaxNoOfOrderedIndexes

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 128
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    對於叢集中的每個排序索引,都會配置一個物件來描述正在索引的內容及其儲存區段。依預設,每個這樣定義的索引也會定義一個排序索引。每個唯一索引和主索引鍵都同時具有排序索引和雜湊索引。MaxNoOfOrderedIndexes 設定系統中任何時候可以使用的排序索引總數。

    此參數的預設值為 128。每個索引物件每個節點約消耗 10KB 的資料。

    注意

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 的總和不得超過 232 − 2 (4294967294)。

  • MaxNoOfUniqueHashIndexes

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 64
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    對於每個不是主索引鍵的唯一索引,都會配置一個特殊表,將唯一索引鍵對應到被索引表的主索引鍵。依預設,也會為每個唯一索引定義一個排序索引。若要防止這種情況,您必須在定義唯一索引時指定 USING HASH 選項。

    預設值為 64。每個索引每個節點約消耗 15KB。

    注意

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 的總和不得超過 232 − 2 (4294967294)。

  • MaxNoOfTriggers

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 768
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    每個唯一的雜湊索引都會配置內部更新、插入和刪除觸發器。(這表示為每個唯一的雜湊索引建立三個觸發器。)但是,排序索引只需要單個觸發器物件。備份也會為叢集中的每個普通表使用三個觸發器物件。

    叢集之間的複寫也會使用內部觸發器。

    此參數設定叢集中的最大觸發器物件數。

    預設值為 768。

  • MaxNoOfSubscriptions

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    NDB 叢集中的每個 NDB 表格都需要 NDB 核心中的訂閱。對於某些 NDB API 應用程式,可能需要或希望變更此參數。但是,對於使用充當 SQL 節點的 MySQL 伺服器的正常使用情況,沒有任何需要這樣做的情況。

    MaxNoOfSubscriptions 的預設值為 0,這被視為等於 MaxNoOfTables。每個訂閱會消耗 108 位元組。

  • MaxNoOfSubscribers

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數僅在使用 NDB 叢集複寫時才相關。預設值為 0。它被視為 2 * MaxNoOfTables + 2 * [API 節點數]。每個 NDB 表格都有一個訂閱,用於兩個 MySQL 伺服器(一個充當複寫來源,另一個充當複本)。每個訂閱者使用 16 位元組的記憶體。

    當使用循環複製、多來源複製,以及其他涉及超過 2 個 MySQL 伺服器的複製設定時,您應該將此參數增加到複製中包含的 mysqld 程序數量(這通常但不總是與叢集的數量相同)。例如,如果您有一個使用三個 NDB 叢集的循環複製設定,每個叢集都附加一個 mysqld,並且這些 mysqld 程序中的每一個都充當來源和複本,您應該將 MaxNoOfSubscribers 設定為等於 3 * MaxNoOfTables

    更多資訊,請參閱 第 25.7 節,「NDB 叢集複製」

  • MaxNoOfConcurrentSubOperations

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 256
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定叢集中所有 API 節點一次可以執行的操作數量上限。預設值 (256) 對於正常操作來說已經足夠,只有在有大量 API 節點同時執行大量操作時才需要調整。

布林參數。 資料節點的行為也受到一組採用布林值的 [ndbd] 參數影響。這些參數可以透過將它們設定為等於 1Y 來指定為 TRUE,並透過將它們設定為等於 0N 來指定為 FALSE

  • CompressedLCP

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    將此參數設定為 1 會導致本機檢查點檔案被壓縮。使用的壓縮相當於 gzip --fast,並且可以節省資料節點上儲存未壓縮檢查點檔案所需空間的 50% 或更多。可以為個別資料節點或所有資料節點啟用壓縮的 LCP(透過在 config.ini 檔案的 [ndbd default] 區段中設定此參數)。

    重要

    您無法將壓縮的本機檢查點還原到執行不支援此功能的 MySQL 版本之叢集。

    預設值為 0(已停用)。

  • CrashOnCorruptedTuple

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 true
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當啟用此參數(預設值)時,每當資料節點遇到損壞的元組時,它會強制關閉。

  • Diskless

    版本(或更高版本) NDB
    類型或單位 true|false (1|0)
    預設值 false
    範圍 true, false
    重新啟動類型

    初始系統重新啟動: 需要完全關閉叢集,從備份中清除並還原叢集檔案系統,然後重新啟動叢集。

    可以將 NDB 叢集表指定為無磁碟,這表示表不會檢查點到磁碟,並且不會發生任何記錄。此類表僅存在於主記憶體中。使用無磁碟表的後果是,這些表或表中的記錄都無法在崩潰後倖存。但是,當在無磁碟模式下運作時,可以在無磁碟電腦上執行 ndbd

    重要

    此功能會導致整個叢集在無磁碟模式下運作。

    當啟用此功能時,NDB 叢集線上備份將被停用。此外,無法部分啟動叢集。

    Diskless 預設為停用。

  • EncryptedFileSystem

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 0
    範圍 0 - 1
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    加密 LCP 和表空間檔案,包括還原記錄和重做記錄。預設為停用 (0);設定為 1 以啟用。

    重要

    當啟用檔案系統加密時,您必須在使用選項 --filesystem-password--filesystem-password-from-stdin 啟動每個資料節點時,向其提供密碼。否則,資料節點無法啟動。

    更多資訊,請參閱 第 25.6.14 節,「NDB 叢集的檔案系統加密」

  • LateAlloc

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 1
    範圍 0 - 1
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在與管理伺服器建立連線後,為此資料節點配置記憶體。預設為啟用。

  • LockPagesInMainMemory

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 2
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    對於許多作業系統,包括 Solaris 和 Linux,可以將一個程序鎖定在記憶體中,從而避免任何與磁碟的交換。這可以用來幫助保證叢集的即時特性。

    此參數採用整數值 012 中的一個,其作用如下清單所示

    • 0:停用鎖定。這是預設值。

    • 1:在為程序配置記憶體後執行鎖定。

    • 2:在為程序配置記憶體之前執行鎖定。

    如果作業系統未配置為允許非特權使用者鎖定頁面,則使用此參數的資料節點程序可能必須以系統根使用者身分執行。(LockPagesInMainMemory 使用 mlockall 函式。從 Linux 核心 2.6.9 開始,非特權使用者可以鎖定記憶體,其限制由 max locked memory 決定。有關更多資訊,請參閱 ulimit -lhttp://linux.die.net/man/2/mlock)。

    注意

    在較舊的 NDB 叢集版本中,此參數是布林值。0false 是預設設定,並停用鎖定。1true 在分配記憶體後啟用程序的鎖定。NDB 叢集 9.0 將此參數的值 truefalse 視為錯誤。

    重要

    glibc 2.10 開始,glibc 使用每個執行緒的區塊來減少共用池上的鎖定爭用,這會消耗實際記憶體。一般而言,資料節點程序不需要每個執行緒的區塊,因為它在啟動後不會執行任何記憶體配置。(分配器的這種差異似乎不會顯著影響效能。)

    glibc 行為旨在透過 MALLOC_ARENA_MAX 環境變數進行設定,但在 glibc 2.16 之前的這個機制中的一個錯誤意味著此變數無法設定為小於 8,因此無法回收浪費的記憶體。(錯誤 #15907219;另請參閱 http://sourceware.org/bugzilla/show_bug.cgi?id=13137,以取得有關此問題的更多資訊。)

    此問題的一個可能解決方案是使用 LD_PRELOAD 環境變數預先載入 jemalloc 記憶體分配庫,以取代 glibc 提供的分配庫。

  • ODirect

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用此參數會導致 NDB 嘗試對 LCP、備份和重做記錄使用 O_DIRECT 寫入,這通常會降低 kswapd 和 CPU 使用率。當在 Linux 上使用 NDB 叢集時,如果您使用的是 2.6 或更新版本的核心,請啟用 ODirect

    ODirect 預設為停用。

  • ODirectSyncFlag

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當啟用此參數時,會執行重做記錄寫入,使得每個完成的檔案系統寫入都被視為對 fsync 的呼叫。如果以下至少一個條件為 true,則會忽略此參數的設定

    • 未啟用 ODirect

    • InitFragmentLogFiles 設定為 SPARSE

    預設為停用。

  • RequireCertificate

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 ...
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    如果此參數設定為 true,則資料節點會在 TLS 搜尋路徑中尋找金鑰和有效且最新的憑證,如果找不到它們,則無法啟動。

  • RequireTls

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 ...
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    如果此參數設定為 true,則必須使用 TLS 對此資料節點的連線進行驗證。

  • RestartOnErrorInsert

    版本(或更高版本) NDB
    類型或單位 錯誤代碼
    預設值 2
    範圍 0 - 4
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此功能僅在建置偵錯版本時才可存取,在該版本中,可以作為測試的一部分在個別程式碼區塊的執行中插入錯誤。

    預設情況下,此功能為停用狀態。

  • StopOnError

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 1
    範圍 0, 1
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定當遇到錯誤條件時,資料節點程序應結束還是執行自動重新啟動。

    此參數的預設值為 1;這表示,預設情況下,錯誤會導致資料節點程序停止。

    當遇到錯誤且 StopOnError 為 0 時,資料節點程序會重新啟動。

    MySQL Cluster Manager 的使用者應注意,當 StopOnError 等於 1 時,這會阻止 MySQL Cluster Manager 代理程式在執行自身的重新啟動和恢復後,重新啟動任何資料節點。請參閱在 Linux 上啟動和停止代理程式以取得更多資訊。

  • UseShm

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用此資料節點和也在此主機上執行的 API 節點之間的共享記憶體連線。設定為 1 以啟用。

控制逾時、間隔和磁碟分頁

有許多 [ndbd] 參數指定叢集資料節點中各種動作之間的逾時和間隔。大多數逾時值以毫秒為單位指定。任何例外情況都會在適用時提及。

  • TimeBetweenWatchDogCheck

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 6000
    範圍 70 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    為了防止主執行緒在某個時間點陷入無限迴圈,監看程式執行緒會檢查主執行緒。此參數指定檢查之間的毫秒數。如果程序在三次檢查後仍保持相同狀態,監看程式執行緒會終止它。

    可以輕鬆變更此參數以進行實驗或適應當地情況。它可以針對每個節點指定,儘管似乎沒有理由這樣做。

    預設逾時時間為 6000 毫秒(6 秒)。

  • TimeBetweenWatchDogCheckInitial

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 6000
    範圍 70 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    這與 TimeBetweenWatchDogCheck 參數類似,但 TimeBetweenWatchDogCheckInitial 控制在記憶體配置期間,儲存節點在早期啟動階段內執行檢查之間經過的時間量。

    預設逾時時間為 6000 毫秒(6 秒)。

  • StartPartialTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 30000
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定叢集在呼叫叢集初始化常式之前,等待所有資料節點啟動的時間長度。此逾時用於盡可能避免部分叢集啟動。

    當執行叢集的初始啟動或初始重新啟動時,此參數會被覆寫。

    預設值為 30000 毫秒(30 秒)。0 會停用逾時,在這種情況下,叢集只有在所有節點都可用時才能啟動。

  • StartPartitionedTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    如果叢集在等待 StartPartialTimeout 毫秒後已準備好啟動,但仍可能處於分割狀態,則叢集會等待直到此逾時也經過。如果 StartPartitionedTimeout 設定為 0,則叢集會無限期等待 (232−1 毫秒,或大約 49.71 天)。

    當執行叢集的初始啟動或初始重新啟動時,此參數會被覆寫。

  • StartFailureTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    如果資料節點未在此參數指定的時間內完成其啟動順序,則節點啟動會失敗。將此參數設定為 0(預設值)表示不會套用資料節點逾時。

    對於非零值,此參數以毫秒為單位測量。對於包含極大量資料的資料節點,應增加此參數。例如,在包含數 GB 資料的資料節點的情況下,可能需要長達 10-15 分鐘(即 600000 到 1000000 毫秒)的時間來執行節點重新啟動。

  • StartNoNodeGroupTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 15000
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當資料節點設定為 Nodegroup = 65536 時,會被視為未分配到任何節點群組。完成後,叢集會等待 StartNoNodegroupTimeout 毫秒,然後將這些節點視為已新增到傳遞給 --nowait-nodes 選項的清單中,並啟動。預設值為 15000(也就是管理伺服器等待 15 秒)。將此參數設定為 0 表示叢集會無限期等待。

    StartNoNodegroupTimeout 對於叢集中的所有資料節點必須相同;因此,您應始終在 config.ini 檔案的 [ndbd default] 區段中設定它,而不是針對個別資料節點設定。

    請參閱第 25.6.7 節,「線上新增 NDB 叢集資料節點」以取得更多資訊。

  • HeartbeatIntervalDbDb

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 5000
    範圍 10 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    發現失敗節點的主要方法之一是使用心跳訊號。此參數表示發送心跳訊號的頻率以及預期接收它們的頻率。心跳訊號無法停用。

    連續錯過四個心跳間隔後,該節點會被宣告為已失效。因此,透過心跳機制發現失敗的最長時間是心跳間隔的五倍。

    預設心跳間隔為 5000 毫秒(5 秒)。此參數不得大幅變更,且不應在節點之間差異過大。如果一個節點使用 5000 毫秒,而監看它的節點使用 1000 毫秒,顯然該節點會很快被宣告為失效。此參數可以在線上軟體升級期間變更,但只能以小增量變更。

    另請參閱網路通訊和延遲,以及 ConnectCheckIntervalDelay 組態參數的說明。

  • HeartbeatIntervalDbApi

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 1500
    範圍 100 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    每個資料節點都會向每個 MySQL 伺服器(SQL 節點)發送心跳訊號,以確保其保持連線。如果 MySQL 伺服器未及時發送心跳訊號,則會宣告其失效,在這種情況下,所有正在進行的交易都會完成,並且會釋放所有資源。在先前 MySQL 執行個體啟動的所有活動完成之前,SQL 節點無法重新連線。此判定的三心跳標準與針對 HeartbeatIntervalDbDb 描述的相同。

    預設間隔為 1500 毫秒(1.5 秒)。此間隔可以在個別資料節點之間變更,因為每個資料節點都會獨立於所有其他資料節點監看連線到它的 MySQL 伺服器。

    如需更多資訊,請參閱網路通訊和延遲

  • HeartbeatOrder

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 0
    範圍 0 - 65535
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    資料節點以循環方式互相發送心跳訊號,每個資料節點都會監看前一個節點。如果給定的資料節點未偵測到心跳訊號,則此節點會宣告循環中的前一個資料節點失效(也就是說,叢集無法再存取)。資料節點失效的判斷是全域性的;換句話說,一旦宣告資料節點失效,叢集中的所有節點都會將其視為失效。

    與其他節點對之間的心跳訊號相比,不同主機上的資料節點之間的心跳訊號可能會太慢(例如,由於心跳間隔非常短或暫時連線問題),以至於即使節點仍然可以作為叢集的一部分運作,也會宣告資料節點失效。

    在這種情況下,資料節點之間傳輸心跳訊號的順序可能會影響是否宣告特定資料節點失效。如果發生不必要的宣告,這可能會導致不必要地遺失節點群組,進而導致叢集失敗。

    考慮一個在 2 個主機電腦 host1host2 上執行 4 個資料節點 A、B、C 和 D 的設定,這些資料節點組成 2 個節點群組,如下表所示

    表 25.9 在兩台主機電腦 host1、host2 上執行的四個資料節點 A、B、C、D;每個資料節點屬於兩個節點群組之一。

    節點群組 host1 上執行的節點 host2 上執行的節點
    節點群組 0 節點 A 節點 B
    節點群組 1 節點 C 節點 D

    假設心跳訊號以 A->B->C->D->A 的順序傳輸。在這種情況下,主機之間遺失的心跳訊號會導致節點 B 宣告節點 A 失效,節點 C 宣告節點 B 失效。這會導致節點群組 0 遺失,因此叢集會失敗。另一方面,如果傳輸順序為 A->B->D->C->A(且所有其他條件保持與先前所述相同),則遺失的心跳訊號會導致節點 A 和 D 被宣告為失效;在這種情況下,每個節點群組都有一個倖存的節點,並且叢集可以存活。

    HeartbeatOrder 組態參數使心跳訊號傳輸的順序可由使用者設定。 HeartbeatOrder 的預設值為零;允許在所有資料節點上使用預設值會導致心跳訊號傳輸的順序由 NDB 決定。如果使用此參數,則必須將叢集中每個資料節點都設定為非零值(最大值為 65535),並且每個資料節點的值必須是唯一的;這會導致心跳訊號按照其 HeartbeatOrder 值從最低到最高的順序(然後直接從具有最高 HeartbeatOrder 的資料節點到具有最低值的資料節點,以完成循環)從一個資料節點到另一個資料節點進行傳輸。這些值不必連續。例如,若要在先前概述的情境中強制執行心跳訊號傳輸順序 A->B->D->C->A,您可以設定 HeartbeatOrder 值,如下所示

    表 25.10 HeartbeatOrder 值,以強制執行 A->B->D->C->A 的心跳訊號轉換順序。

    節點 HeartbeatOrder
    A 10
    B 20
    C 30
    D 25

    若要使用此參數變更執行中 NDB Cluster 的心跳傳輸順序,您必須先在全域組態 (config.ini) 檔案 (或多個檔案) 中,為叢集中每個資料節點設定 HeartbeatOrder。若要使變更生效,您必須執行下列其中一項操作

    • 完整關閉並重新啟動整個叢集。

    • 依序對叢集執行 2 次滾動重新啟動。 所有節點必須在兩次滾動重新啟動中,以相同的順序重新啟動

    您可以使用 DUMP 908 來觀察資料節點日誌中此參數的效果。

  • ConnectCheckIntervalDelay

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數啟用資料節點之間的連線檢查,如果其中一個節點在最多 HeartbeatIntervalDbDb 毫秒的 5 個間隔內未通過心跳檢查。

    如果此資料節點在 ConnectCheckIntervalDelay 毫秒的間隔內仍無法回應,則會被視為可疑,並在兩個這樣的間隔後被視為死亡。這在已知有延遲問題的設定中可能很有用。

    此參數的預設值為 0 (停用)。

  • TimeBetweenLocalCheckpoints

    版本(或更高版本) NDB
    類型或單位 4 位元組字組的數量,以 2 為底的對數表示
    預設值 20
    範圍 0 - 31
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數是個例外,它並非指定在開始新的本機檢查點之前要等待的時間;而是用來確保在更新相對較少的叢集中不會執行本機檢查點。在大多數具有高更新率的叢集中,很可能會在前一個本機檢查點完成後立即啟動新的本機檢查點。

    會加上自前一個本機檢查點開始以來執行的所有寫入操作的大小。此參數也是例外,因為它指定為 4 位元組字組數量的以 2 為底的對數,因此預設值 20 表示 4MB (4 × 220) 的寫入操作,21 表示 8MB,依此類推,直到最大值 31,相當於 8GB 的寫入操作。

    會將叢集中所有寫入操作加總。將 TimeBetweenLocalCheckpoints 設定為 6 或更少,表示本機檢查點會連續執行,不會暫停,與叢集的工作負載無關。

  • TimeBetweenGlobalCheckpoints

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 2000
    範圍 20 - 32000
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當交易提交時,會在鏡像資料的所有節點上的主記憶體中提交。但是,交易日誌記錄不會作為提交的一部分刷新到磁碟。這種行為背後的理由是,在至少兩個獨立主機上安全地提交交易應符合合理的持久性標準。

    確保即使是最壞的情況(叢集完全崩潰)也能正確處理也很重要。為了保證發生這種情況,在給定間隔內發生的所有交易都會放入全域檢查點中,這可以被認為是一組已提交的交易,這些交易已刷新到磁碟。換句話說,作為提交過程的一部分,交易會被放置在全域檢查點群組中。稍後,此群組的日誌記錄會被刷新到磁碟,然後整個交易群組會安全地提交到叢集中所有電腦上的磁碟。

    我們建議當您使用固態硬碟(尤其是使用 NVMe 的硬碟)搭配 Disk Data 資料表時,減少此值。在這種情況下,您還應該確保將 MaxDiskDataLatency 設定為適當的等級。

    此參數定義全域檢查點之間的間隔。預設值為 2000 毫秒。

  • TimeBetweenGlobalCheckpointsTimeout

    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數定義全域檢查點之間的最小逾時。預設值為 120000 毫秒。

  • TimeBetweenEpochs

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 100
    範圍 0 - 32000
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數定義 NDB Cluster 複寫的同步處理週期之間的間隔。預設值為 100 毫秒。

    TimeBetweenEpochs微型 GCP 實作的一部分,可用於改善 NDB Cluster 複寫的效能。

  • TimeBetweenEpochsTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 0
    範圍 0 - 256000
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數定義 NDB Cluster 複寫的同步處理週期的逾時。如果節點在由此參數決定的時間內未能參與全域檢查點,則會關閉該節點。預設值為 0;換句話說,逾時已停用。

    TimeBetweenEpochsTimeout微型 GCP 實作的一部分,可用於改善 NDB Cluster 複寫的效能。

    當 GCP 儲存時間超過 1 分鐘或 GCP 提交時間超過 10 秒時,此參數的目前值和警告會寫入叢集日誌。

    將此參數設定為零的效果是停用因儲存逾時、提交逾時或兩者而導致的 GCP 停止。此參數的最大可能值為 256000 毫秒。

  • MaxBufferedEpochs

    版本(或更高版本) NDB
    類型或單位 週期
    預設值 100
    範圍 0 - 100000
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    訂閱節點可以延遲的未處理週期數量。超過此數量會導致延遲的訂閱者斷線。

    預設值 100 足夠用於大多數正常操作。如果訂閱節點的延遲足以導致斷線,通常是由於程序或執行緒的網路或排程問題所致。(在極少數情況下,問題可能是由於 NDB 用戶端中的錯誤所致。)當週期較長時,可能需要將值設定為低於預設值。

    斷線可防止用戶端問題影響資料節點服務、耗盡記憶體來緩衝資料,並最終關閉。相反地,斷線只會影響用戶端(例如,二進位日誌中的間隙事件),迫使用戶端重新連線或重新啟動程序。

  • MaxBufferedEpochBytes

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 26214400
    範圍 26214400 (0x01900000) - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此節點為緩衝週期所配置的位元組總數。

  • TimeBetweenInactiveTransactionAbortCheck

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 1000
    範圍 1000 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    逾時處理是藉由在每個交易的計時器上,以由此參數指定的每個間隔檢查一次來執行的。因此,如果此參數設定為 1000 毫秒,則每個交易會每秒檢查一次逾時。

    預設值為 1000 毫秒 (1 秒)。

  • TransactionInactiveTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 4294967039 (0xFFFFFEFF)
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指出在交易中的操作之間允許經過的最長時間,超過此時間,交易就會中止。

    此參數的預設值為 4G(也是最大值)。對於需要確保沒有交易會長時間保持鎖定的即時資料庫,此參數應設定為相對較小的值。將其設定為 0 表示應用程式永遠不會逾時。單位為毫秒。

  • TransactionDeadlockDetectionTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 1200
    範圍 50 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當節點執行涉及交易的查詢時,節點會等待叢集中的其他節點回應,然後再繼續。此參數設定交易可以在資料節點中執行的時間量,也就是交易協調器等待參與交易的每個資料節點執行要求的時間。

    無法回應的原因可能為下列任一項

    • 節點死亡

    • 操作已進入鎖定佇列

    • 請求執行動作的節點可能負載過重。

    此逾時參數指出交易協調器等待另一個節點執行查詢的時間長度,之後才會中止交易,這對於節點失敗處理和死結偵測都很重要。

    預設逾時值為 1200 毫秒 (1.2 秒)。

    此參數的最小值為 50 毫秒。

  • DiskSyncSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 4M
    範圍 32K - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    這是將資料刷新到本機檢查點檔案之前要儲存的最大位元組數。這樣做是為了防止寫入緩衝,這可能會嚴重阻礙效能。此參數打算取代 TimeBetweenLocalCheckpoints

    注意

    啟用 ODirect 時,無需設定 DiskSyncSize;實際上,在這種情況下,其值會被忽略。

    預設值為 4M (4 MB)。

  • MaxDiskWriteSpeed

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 20M
    範圍 1M - 1024G
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    設定在此 NDB Cluster 中未發生重新啟動(由此資料節點或任何其他資料節點)時,本機檢查點和備份操作每秒寫入磁碟的最大速率(以位元組為單位)。

    若要設定此資料節點重新啟動時允許的磁碟寫入最大速率,請使用 MaxDiskWriteSpeedOwnRestart。若要設定在其他資料節點重新啟動時允許的磁碟寫入最大速率,請使用 MaxDiskWriteSpeedOtherNodeRestart。所有 LCP 和備份操作磁碟寫入的最小速度可以透過設定 MinDiskWriteSpeed 來調整。

  • MaxDiskWriteSpeedOtherNodeRestart

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 50M
    範圍 1M - 1024G
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    設定當此 NDB Cluster 中的一個或多個資料節點重新啟動時(不包括此節點),本機檢查點和備份操作每秒寫入磁碟的最大速率(以位元組為單位)。

    若要設定此資料節點重新啟動時允許的最大磁碟寫入速率,請使用 MaxDiskWriteSpeedOwnRestart。若要設定叢集中任何資料節點皆未重新啟動時允許的最大磁碟寫入速率,請使用 MaxDiskWriteSpeed。所有 LCP 和備份操作的最小磁碟寫入速度可透過設定 MinDiskWriteSpeed 來調整。

  • MaxDiskWriteSpeedOwnRestart

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 200M
    範圍 1M - 1024G
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    設定此資料節點重新啟動時,本機檢查點和備份操作寫入磁碟的最大速率,單位為每秒位元組。

    若要設定其他資料節點重新啟動時允許的最大磁碟寫入速率,請使用 MaxDiskWriteSpeedOtherNodeRestart。若要設定叢集中任何資料節點皆未重新啟動時允許的最大磁碟寫入速率,請使用 MaxDiskWriteSpeed。所有 LCP 和備份操作的最小磁碟寫入速度可透過設定 MinDiskWriteSpeed 來調整。

  • MinDiskWriteSpeed

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 10M
    範圍 1M - 1024G
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    設定本機檢查點和備份操作寫入磁碟的最小速率,單位為每秒位元組。

    在各種情況下,LCP 和備份允許的最大磁碟寫入速率可使用參數 MaxDiskWriteSpeedMaxDiskWriteSpeedOwnRestartMaxDiskWriteSpeedOtherNodeRestart 進行調整。如需更多資訊,請參閱這些參數的描述。

  • ArbitrationTimeout

    版本(或更高版本) NDB
    類型或單位 毫秒
    預設值 7500
    範圍 10 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定資料節點等待仲裁器對仲裁訊息回應的時間長度。如果超過此時間,則假設網路已分割。

    預設值為 7500 毫秒 (7.5 秒)。

  • Arbitration

    版本(或更高版本) NDB
    類型或單位 列舉
    預設值 預設值
    範圍 預設值、已停用、WaitExternal
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    Arbitration 參數可選擇仲裁方案,對應此參數的 3 個可能值之一。

    • 預設值。這會啟用仲裁正常進行,由管理和 API 節點的 ArbitrationRank 設定決定。這是預設值。

    • 已停用。config.ini 檔案的 [ndbd default] 區段中設定 Arbitration = Disabled,可完成與在所有管理和 API 節點上將 ArbitrationRank 設定為 0 相同的任務。當以這種方式設定 Arbitration 時,會忽略任何 ArbitrationRank 設定。

    • WaitExternal。Arbitration 參數也可讓您設定仲裁,使叢集等待直到 ArbitrationTimeout 確定的時間過去後,外部叢集管理應用程式執行仲裁,而不是在內部處理仲裁。這可透過在 config.ini 檔案的 [ndbd default] 區段中設定 Arbitration = WaitExternal 來完成。為獲得 WaitExternal 設定的最佳結果,建議 ArbitrationTimeout 的時間長度為外部叢集管理員執行仲裁所需間隔的 2 倍。

    重要

    此參數應僅用於叢集設定檔的 [ndbd default] 區段中。當針對個別資料節點將 Arbitration 設定為不同的值時,叢集的行為是不確定的。

  • RestartSubscriberConnectTimeout

    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數決定資料節點等待訂閱 API 節點連線的時間。一旦此逾時時間到期,任何「遺失」的 API 節點都會與叢集斷開連線。若要停用此逾時時間,請將 RestartSubscriberConnectTimeout 設定為 0。

    雖然此參數以毫秒為單位指定,但逾時時間本身會解析為下一個最接近的整秒。

  • KeepAliveSendInterval

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 60000
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    您可以透過設定此參數來啟用並控制在資料節點之間傳送的保持連線訊號之間的間隔。 KeepAliveSendInterval 的預設值為 60000 毫秒 (一分鐘);將其設定為 0 會停用保持連線訊號。介於 1 到 10 (含) 之間的值會被視為 10。

    在監視並斷開閒置 TCP 連線的環境中,此參數可能很有用,在叢集閒置時可能會造成不必要的資料節點故障。

管理節點和資料節點之間的活動訊號間隔始終為 100 毫秒,且無法設定。

緩衝和記錄。數個 [ndbd] 設定參數可讓進階使用者更能控制節點程序使用的資源,並視需要調整各種緩衝區大小。

當將記錄寫入磁碟時,這些緩衝區會做為檔案系統的前端。如果節點以無磁碟模式執行,則由於 NDB 儲存引擎的檔案系統抽象層「偽造」磁碟寫入,因此這些參數可以設定為最小值而不會受到影響。

  • UndoIndexBuffer

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 2M
    範圍 1M - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數先前設定還原索引緩衝區的大小,但在目前版本的 NDB Cluster 中沒有任何作用。

    在叢集設定檔中使用此參數會引發棄用警告;您應該預期它會在未來的 NDB Cluster 版本中移除。

  • UndoDataBuffer

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 16M
    範圍 1M - 4294967039 (0xFFFFFEFF)
    已棄用 是(在 NDB 8.0 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數先前設定還原資料緩衝區的大小,但在目前版本的 NDB Cluster 中沒有任何作用。

    在叢集設定檔中使用此參數會引發棄用警告;您應該預期它會在未來的 NDB Cluster 版本中移除。

  • RedoBuffer

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 32M
    範圍 1M - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    所有更新活動也都需要記錄。REDO 記錄可讓您在系統重新啟動時重播這些更新。NDB 復原演算法會使用資料的「模糊」檢查點,以及 UNDO 記錄,然後套用 REDO 記錄來重播直到還原點的所有變更。

    RedoBuffer 設定寫入 REDO 記錄的緩衝區大小。預設值為 32MB;最小值為 1MB。

    如果此緩衝區太小,則 NDB 儲存引擎會發出錯誤碼 1221 (REDO 記錄緩衝區過載)。因此,如果您嘗試在叢集組態的線上變更中減少 RedoBuffer 的值,您應該小心處理。

    ndbmtd 會為每個 LDM 執行緒配置個別的緩衝區 (請參閱 ThreadConfig)。例如,使用 4 個 LDM 執行緒時,ndbmtd 資料節點實際上具有 4 個緩衝區,並為每個緩衝區配置 RedoBuffer 個位元組,總共為 4 * RedoBuffer 個位元組。

  • EventLogBufferSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 8192
    範圍 0 - 64K
    重新啟動類型

    系統重新啟動: 需要完全關閉並重新啟動叢集。

    控制資料節點內用於 NDB 記錄事件的循環緩衝區大小。

控制記錄訊息。在管理叢集時,能夠控制為各種事件類型傳送到 stdout 的記錄訊息數量非常重要。對於每個事件類別,都有 16 個可能的事件層級 (編號為 0 到 15)。將給定事件類別的事件報告設定為層級 15 表示該類別中的所有事件報告都會傳送到 stdout;將其設定為 0 表示該類別中不會產生任何事件報告。

依預設,只有啟動訊息會傳送到 stdout,其餘的事件報告層級預設值會設定為 0。這樣做的原因是這些訊息也會傳送到管理伺服器的叢集記錄。

可以為管理用戶端設定類似的一組層級,以決定要記錄在叢集記錄中的事件層級。

  • LogLevelStartup

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 1
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在程序啟動期間產生的事件的報告層級。

    預設層級為 1。

  • LogLevelShutdown

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在節點正常關閉時產生的事件的報告層級。

    預設層級為 0。

  • LogLevelStatistic

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    統計事件的報告層級,例如主要索引鍵讀取次數、更新次數、插入次數、與緩衝區使用相關的資訊等等。

    預設層級為 0。

  • LogLevelCheckpoint

    版本(或更高版本) NDB
    類型或單位 記錄層級
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    本機和全域檢查點產生的事件的報告層級。

    預設層級為 0。

  • LogLevelNodeRestart

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在節點重新啟動期間產生的事件的報告層級。

    預設層級為 0。

  • LogLevelConnection

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    叢集節點之間連線產生的事件的報告層級。

    預設層級為 0。

  • LogLevelError

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定叢集整體產生的錯誤和警告事件的回報層級。這些錯誤不會導致任何節點故障,但仍認為值得回報。

    預設層級為 0。

  • LogLevelCongestion

    版本(或更高版本) NDB
    類型或單位 層級
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定因壅塞而產生的事件回報層級。這些錯誤不會導致節點故障,但仍認為值得回報。

    預設層級為 0。

  • LogLevelInfo

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 15
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定關於叢集一般狀態的資訊事件的回報層級。

    預設層級為 0。

  • MemReportFrequency

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數控制資料節點記憶體用量報告記錄在叢集日誌中的頻率;它是一個整數值,表示報告之間的秒數。

    每個資料節點的資料記憶體和索引記憶體使用量都會以百分比和 DataMemory 的 32 KB 頁面數記錄,如 config.ini 檔案中所設定。例如,如果 DataMemory 等於 100 MB,且給定資料節點使用 50 MB 作為資料記憶體儲存,則叢集日誌中的對應行可能如下所示

    2006-12-24 01:18:16 [MgmSrvr] INFO -- Node 2: Data usage is 50%(1280 32K pages of total 2560)

    MemReportFrequency 不是必要參數。如果使用,則可在 config.ini[ndbd default] 區段中為所有叢集資料節點設定,也可以在組態檔案的對應 [ndbd] 區段中為個別資料節點設定或覆寫。最小值(也是預設值)為 0,在這種情況下,只有當記憶體使用量達到特定百分比(80%、90% 和 100%)時,才會記錄記憶體報告,如 第 25.6.3.2 節「NDB 叢集日誌事件」中統計事件的討論所述。

  • StartupStatusReportFrequency

    版本(或更高版本) NDB
    類型或單位
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當使用 --initial 啟動資料節點時,它會在啟動階段 4(請參閱第 25.6.4 節「NDB 叢集啟動階段摘要」)期間初始化 redo 記錄檔。當為 NoOfFragmentLogFilesFragmentLogFileSize 或兩者設定非常大的值時,此初始化可能需要很長時間。您可以透過 StartupStatusReportFrequency 組態參數,強制定期記錄此程序的進度報告。在這種情況下,進度會在叢集日誌中報告,包括已初始化的檔案數量和空間量,如下所示

    2009-06-20 16:39:23 [MgmSrvr] INFO -- Node 1: Local redo log file initialization status:
    #Total files: 80, Completed: 60
    #Total MBytes: 20480, Completed: 15557
    2009-06-20 16:39:23 [MgmSrvr] INFO -- Node 2: Local redo log file initialization status:
    #Total files: 80, Completed: 60
    #Total MBytes: 20480, Completed: 15570

    這些報告會在啟動階段 4 期間每 StartupStatusReportFrequency 秒記錄一次。如果 StartupStatusReportFrequency 為 0(預設值),則只有在 redo 記錄檔初始化程序的開始和完成時,才會將報告寫入叢集日誌。

資料節點偵錯參數

以下參數旨在用於資料節點的測試或偵錯期間,而不是用於生產環境中。

  • DictTrace

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 未定義
    範圍 0 - 100
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    可以使用 DictTrace,來記錄透過建立和刪除表格產生的事件追蹤。此參數僅在偵錯 NDB 核心程式碼時有用。DictTrace 採用整數值。0 是預設值,表示不執行任何記錄;1 啟用追蹤記錄,2 啟用額外 DBDICT 偵錯輸出。

  • WatchdogImmediateKill

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    您可以透過啟用 WatchdogImmediateKill 資料節點組態參數,使執行緒在發生看門狗問題時立即終止。此參數應僅在偵錯或疑難排解時使用,以取得報告執行停止瞬間所發生情況的追蹤檔。

備份參數。本節討論的 [ndbd] 參數定義為執行線上備份而預留的記憶體緩衝區。

  • BackupDataBufferSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 16M
    範圍 512K - 4294967039 (0xFFFFFEFF)
    已棄用 是 (在 NDB 7.6 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    在建立備份時,有兩個緩衝區用於將資料傳送至磁碟。備份資料緩衝區用於填入掃描節點表格所記錄的資料。一旦此緩衝區填滿至指定為 BackupWriteSize 的層級,頁面就會傳送至磁碟。在將資料刷新至磁碟時,備份程序可以繼續填滿此緩衝區,直到用完空間。當發生這種情況時,備份程序會暫停掃描,並等待某些磁碟寫入完成以釋放記憶體,以便繼續掃描。

    此參數的預設值為 16MB。最小值為 512K。

  • BackupDiskWriteSpeedPct

    版本(或更高版本) NDB
    類型或單位 百分比
    預設值 50
    範圍 0 - 90
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    BackupDiskWriteSpeedPct 僅在備份為單執行緒時適用;由於 NDB 9.0 支援多執行緒備份,因此通常不需要調整此參數,在多執行緒情況下此參數無效。以下討論專門針對單執行緒備份。

    在正常操作期間,資料節點會嘗試最大化用於本機檢查點和備份的磁碟寫入速度,同時保持在 MinDiskWriteSpeedMaxDiskWriteSpeed 設定的範圍內。磁碟寫入節流會為每個 LDM 執行緒提供總預算的相等份額。這允許並行的 LCP 在不超過磁碟 I/O 預算的情況下發生。由於備份僅由一個 LDM 執行緒執行,這有效地導致預算削減,從而導致備份完成時間更長,並且 - 如果變更率足夠高 - 當備份記錄緩衝區填滿率高於可實現的寫入率時,備份無法完成。

    這個問題可以透過使用 BackupDiskWriteSpeedPct 組態參數來解決,該參數的值範圍為 0-90(含),它被解讀為節點最大寫入速率預算的百分比,該預算在將剩餘預算分配給 LDM 執行緒以用於 LCP 之前保留。執行備份的 LDM 執行緒會收到備份的整個寫入速率預算,以及其(減少的)本機檢查點寫入速率預算的份額。

    此參數的預設值為 50(解讀為 50%)。

  • BackupLogBufferSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 16M
    範圍 2M - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    備份記錄緩衝區的作用類似於備份資料緩衝區,不同之處在於它用於產生備份執行期間所做所有表格寫入的記錄。寫入這些頁面的原則與備份資料緩衝區相同,不同之處在於當備份記錄緩衝區沒有更多空間時,備份會失敗。因此,備份記錄緩衝區的大小必須足夠大,以處理備份期間寫入活動所造成的負載。請參閱第 25.6.8.3 節「NDB 叢集備份組態」

    此參數的預設值應足以應付大多數應用程式。事實上,備份失敗更有可能是因磁碟寫入速度不足所致,而不是備份記錄緩衝區已滿。如果未針對應用程式造成的寫入負載組態磁碟子系統,則叢集不太可能執行所需的操作。

    最好以處理器成為瓶頸,而不是磁碟或網路連線的方式組態叢集節點。

    此參數的預設值為 16MB。

  • BackupMemory

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 32M
    範圍 0 - 4294967039 (0xFFFFFEFF)
    已棄用 是 (在 NDB 7.4 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數已過時,可能會在未來版本的 NDB 叢集中移除。為此參數做的任何設定都會被忽略。

  • BackupReportFrequency

    版本(或更高版本) NDB
    類型或單位
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數控制在備份期間,管理用戶端發出備份狀態報告的頻率,以及將此類報告寫入叢集日誌的頻率(前提是叢集事件記錄組態允許,請參閱記錄和檢查點)。BackupReportFrequency 表示備份狀態報告之間的秒數。

    預設值為 0。

  • BackupWriteSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 256K
    範圍 32K - 4294967039 (0xFFFFFEFF)
    已棄用 是 (在 NDB 7.6 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定備份記錄和備份資料緩衝區寫入磁碟的訊息預設大小。

    此參數的預設值為 256KB。

  • BackupMaxWriteSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 1M
    範圍 256K - 4294967039 (0xFFFFFEFF)
    已棄用 是 (在 NDB 7.6 中)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定備份記錄和備份資料緩衝區寫入磁碟的訊息最大大小。

    此參數的預設值為 1MB。

  • CompressedBackup

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用此參數會壓縮備份檔案。使用的壓縮相當於 gzip --fast,而且可以節省資料節點上儲存未壓縮備份檔案所需空間的 50% 或更多。可以為個別資料節點啟用壓縮備份,或者為所有資料節點啟用壓縮備份(透過在 config.ini 檔案的 [ndbd default] 區段中設定此參數)。

    重要

    您無法將壓縮備份還原至執行不支援此功能的 MySQL 版本叢集。

    預設值為 0(已停用)。

  • RequireEncryptedBackup

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 1
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    如果設定為 1,則備份必須加密。雖然可以為每個資料節點個別設定此參數,但建議您在 config.ini 全域組態檔案的 [ndbd default] 區段中設定。如需執行加密備份的詳細資訊,請參閱第 25.6.8.2 節「使用 NDB 叢集管理用戶端建立備份」

注意

備份檔案的位置由 BackupDataDir 資料節點組態參數決定。

其他需求。指定這些參數時,以下關係必須成立。否則,資料節點無法啟動。

  • BackupDataBufferSize >= BackupWriteSize + 188KB

  • BackupLogBufferSize >= BackupWriteSize + 16KB

  • BackupMaxWriteSize >= BackupWriteSize

NDB 叢集即時效能參數

本節討論的 [ndbd] 參數用於排程和鎖定多處理器資料節點主機上特定 CPU 的執行緒。

注意

若要使用這些參數,資料節點程序必須以系統根使用者身分執行。

  • BuildIndexThreads

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 128
    範圍 0 - 128
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數決定在系統或節點啟動期間重建排序索引時,以及執行 ndb_restore --rebuild-indexes 時,要建立的執行緒數量。僅當每個資料節點的表格有多個片段時才支援此參數(例如,當 COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_LDM_X_2"CREATE TABLE 一起使用時)。

    將此參數設定為 0(預設值)會停用多執行緒建立排序索引。

    使用 ndbdndbmtd 時,支援此參數。

    您可以將 TwoPassInitialNodeRestartCopy 資料節點組態參數設定為 TRUE,以在資料節點初始重新啟動期間啟用多執行緒建立。

  • LockExecuteThreadToCPU

    版本(或更高版本) NDB
    類型或單位 CPU ID 集合
    預設值 0
    範圍 ...
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    ndbd 一起使用時,此參數(現在是字串)指定指派給處理 NDBCLUSTER 執行緒的 CPU ID。與 ndbmtd 一起使用時,此參數的值是以逗號分隔的 CPU ID 清單,這些 CPU ID 指派給處理執行緒。清單中的每個 CPU ID 都應該是介於 0 到 65535(含)之間的整數。

    指定的 ID 數量應符合由 MaxNoOfExecutionThreads 決定的執行緒數量。但是,當使用此參數時,無法保證執行緒會以任何給定的順序指派給 CPU。您可以使用 ThreadConfig 來獲得更精細的控制。

    LockExecuteThreadToCPU 沒有預設值。

  • LockMaintThreadsToCPU

    版本(或更高版本) NDB
    類型或單位 CPU ID
    預設值 0
    範圍 0 - 64K
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定指派給處理 NDBCLUSTER 維護執行緒的 CPU ID。

    此參數的值是介於 0 到 65535(含)之間的整數。沒有預設值

  • Numa

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 1
    範圍 ...
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數決定非統一記憶體存取 (NUMA) 是由作業系統還是資料節點程序控制,無論資料節點是使用 ndbd 還是 ndbmtd。依預設,NDB 會嘗試在主機作業系統提供 NUMA 支援的任何資料節點上使用交錯的 NUMA 記憶體配置原則。

    設定 Numa = 0 表示資料節點程序本身不嘗試設定記憶體配置原則,並允許此行為由作業系統決定,作業系統可以進一步由單獨的 numactl 工具引導。也就是說,Numa = 0 會產生系統預設行為,該行為可以透過 numactl 自訂。對於許多 Linux 系統,系統預設行為是在配置時將套接字本地記憶體配置給任何給定的程序。當使用 ndbmtd 時,這可能會產生問題;這是因為 nbdmtd 會在啟動時配置所有記憶體,導致不平衡,進而為不同的套接字提供不同的存取速度,尤其是在鎖定主記憶體中的頁面時。

    設定 Numa = 1 表示資料節點程序使用 libnuma 來要求交錯的記憶體配置。(這也可以在作業系統層級上使用 numactl 手動完成。)實際上,使用交錯配置會告知資料節點程序忽略非統一記憶體存取,但不嘗試利用快速本地記憶體;相反地,資料節點程序會嘗試避免因慢速遠端記憶體而造成的不平衡。如果不需要交錯配置,請將 Numa 設定為 0,以便在作業系統層級上決定所需的行為。

    只有在可使用 libnuma.so 的 Linux 系統上,才支援 Numa 組態參數。

  • RealtimeScheduler

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    將此參數設定為 1 會啟用資料節點執行緒的即時排程。

    預設值為 0(停用排程)。

  • SchedulerExecutionTimer

    版本(或更高版本) NDB
    類型或單位 微秒
    預設值 50
    範圍 0 - 11000
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定在將執行緒傳送出去之前,執行緒在排程器中執行的時間(以微秒為單位)。將其設定為 0 會盡量縮短回應時間;若要達到更高的輸送量,您可以增加該值,但代價是較長的回應時間。

    預設值為 50 微秒,我們的測試顯示,這可以在高負載情況下稍微增加輸送量,而不會嚴重延遲要求。

  • SchedulerResponsiveness

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 5
    範圍 0 - 10
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    設定 NDB 排程器中速度與輸送量之間的平衡。此參數採用一個整數,其值介於 0 到 10(含)之間,預設值為 5。較高的值相對於輸送量提供更好的回應時間。較低的值會增加輸送量,但代價是較長的回應時間。

  • SchedulerSpinTimer

    版本(或更高版本) NDB
    類型或單位 微秒
    預設值 0
    範圍 0 - 500
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數指定在執行緒休眠之前,執行緒在排程器中執行的時間(以微秒為單位)。

    注意

    如果設定了 SpinMethod,則會忽略此參數的任何設定。

  • SpinMethod

    版本(或更高版本) NDB
    類型或單位 列舉
    預設值 StaticSpinning
    範圍 CostBasedSpinning、LatencyOptimisedSpinning、DatabaseMachineSpinning、StaticSpinning
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數提供一個簡單的介面來控制資料節點上的適應性旋轉,四個可能的值為旋轉參數值提供預設值,如下列清單所示

    1. StaticSpinning(預設值):將 EnableAdaptiveSpinning 設定為 false,並將 SchedulerSpinTimer 設定為 0。(SetAllowedSpinOverhead 在此情況下不相關。)

    2. CostBasedSpinning:將 EnableAdaptiveSpinning 設定為 true,將 SchedulerSpinTimer 設定為 100,並將 SetAllowedSpinOverhead 設定為 200。

    3. LatencyOptimisedSpinning:將 EnableAdaptiveSpinning 設定為 true,將 SchedulerSpinTimer 設定為 200,並將 SetAllowedSpinOverhead 設定為 1000。

    4. DatabaseMachineSpinning:將 EnableAdaptiveSpinning 設定為 true,將 SchedulerSpinTimer 設定為 500,並將 SetAllowedSpinOverhead 設定為 10000。這適用於執行緒擁有其本身 CPU 的情況。

    SpinMethod 修改的旋轉參數如下列清單所述

    • SchedulerSpinTimer:這與該名稱的資料節點組態參數相同。SpinMethod 套用至此參數的設定會覆寫 config.ini 檔案中設定的任何值。

    • EnableAdaptiveSpinning:啟用或停用適應性旋轉。停用它會導致在不檢查 CPU 資源的情況下執行旋轉。此參數無法在叢集組態檔案中直接設定,而且在大多數情況下不需要設定,但可以使用 DUMP 104004 1 直接啟用,或者使用 DUMP 104004 0ndb_mgm 管理用戶端中停用。

    • SetAllowedSpinOverhead:設定允許用於取得延遲的 CPU 時間量。此參數無法在 config.ini 檔案中直接設定。在大多數情況下,SpinMethod 套用的設定應該令人滿意,但如果需要直接變更,您可以使用 DUMP 104002 overhead 來執行此操作,其中 overhead 是介於 0 到 10000(含)之間的值;請參閱指示的 DUMP 命令的說明以取得詳細資料。

    在缺乏可用旋轉指令的平台上,例如 PowerPC 和某些 SPARC 平台,在所有情況下旋轉時間都設定為 0,並且會忽略 SpinMethodStaticSpinning 以外的值。

  • TwoPassInitialNodeRestartCopy

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 true
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    透過將此組態參數設定為 true (預設值),可以啟用多執行緒建置排序索引,以供資料節點初始重新啟動時使用。這會啟用在節點初始重新啟動期間進行的雙步驟資料複製。

    您還必須將 BuildIndexThreads 設定為非零值。

多執行緒組態參數 (ndbmtd)。 ndbmtd 預設以單執行緒程序執行,而且必須設定為使用多個執行緒。設定方式有兩種,兩種方式都需要在 config.ini 檔案中設定組態參數。第一種方法是直接為 MaxNoOfExecutionThreads 組態參數設定適當的值。第二種方法則可以使用 ThreadConfig,為 ndbmtd 多執行緒設定更複雜的規則。接下來的幾段提供有關這些參數以及如何在多執行緒資料節點中使用這些參數的資訊。

注意

若要在資料節點上使用平行處理進行備份,則在進行備份之前,叢集中的所有資料節點都必須使用多個 LDM。如需更多資訊,請參閱第 25.6.8.5 節「使用平行資料節點進行 NDB 備份」以及從平行備份還原

  • AutomaticThreadConfig

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 false
    範圍 true, false
    重新啟動類型

    初始系統重新啟動: 需要完全關閉叢集,從備份中清除並還原叢集檔案系統,然後重新啟動叢集。

    設定為 1 時,會啟用自動執行緒組態,該組態會採用資料節點可用的 CPU 數量,並考量 tasksetnumactl、虛擬機器、Docker 和其他控制哪些 CPU 可供特定應用程式使用的方式所設定的任何限制 (在 Windows 平台上,自動執行緒組態會使用所有在線的 CPU);或者,您可以將 NumCPUs 設定為所需的 CPU 數量 (最多 1024 個,這是自動執行緒組態可處理的最大 CPU 數量)。任何 ThreadConfigMaxNoOfExecutionThreads 設定都會被忽略。此外,啟用此參數會自動停用 ClassicFragmentation

  • ClassicFragmentation

    版本(或更高版本) NDB
    類型或單位 布林值
    預設值 true
    範圍 true, false
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用時 (設定為 true),NDB 會在 LDM 之間分配分段,使得每個節點的預設分割區數量等於每個資料節點的本機資料管理員 (LDM) 執行緒的最小數量。

    對於新的叢集,在首次設定叢集時,最好將 ClassicFragmentation 設定為 false;這樣做會導致每個節點的分割區數量等於 PartitionsPerNode 的值,確保所有分割區均勻分散在所有 LDM 之間。

    此參數和 AutomaticThreadConfig 互斥;啟用 AutomaticThreadConfig 會自動停用 ClassicFragmentation

  • EnableMultithreadedBackup

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 1
    範圍 0 - 1
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用多執行緒備份。如果每個資料節點至少有 2 個 LDM,則所有 LDM 執行緒都會參與備份,該備份是使用每個 LDM 執行緒一個子目錄建立的,並且每個子目錄都包含 .ctl.Data.log 備份檔案。

    對於 ndbmtd,此參數通常已啟用 (設定為 1)。若要強制使用單執行緒備份,以便使用舊版本的 ndb_restore 輕鬆還原,請將此參數設定為 0 來停用多執行緒備份。必須針對叢集中的每個資料節點執行此動作。

    如需更多資訊,請參閱第 25.6.8.5 節「使用平行資料節點進行 NDB 備份」以及從平行備份還原

  • MaxNoOfExecutionThreads

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 2
    範圍 2 - 72
    重新啟動類型

    此參數直接控制 ndbmtd 使用的執行緒數量,最多為 72 個。雖然此參數是在 config.ini 檔案的 [ndbd][ndbd default] 區段中設定,但它是 ndbmtd 獨有的,不適用於 ndbd

    啟用 AutomaticThreadConfig 會導致此參數的任何設定遭到忽略。

    設定 MaxNoOfExecutionThreads 會為每種類型設定執行緒數量,具體取決於檔案 storage/ndb/src/common/mt_thr_config.cpp 中的矩陣。下表顯示 MaxNoOfExecutionThreads 的可能值所對應的這些執行緒數量。

    表格 25.11 MaxNoOfExecutionThreads 值和執行緒類型 (LQH、TC、傳送、接收) 對應的執行緒數量。

    MaxNoOfExecutionThreads LDM 執行緒 TC 執行緒 傳送執行緒 接收執行緒
    0 .. 3 1 0 0 1
    4 .. 6 2 0 0 1
    7 .. 8 4 0 0 1
    9 4 2 0 1
    10 4 2 1 1
    11 4 3 1 1
    12 6 2 1 1
    13 6 3 1 1
    14 6 3 1 2
    15 6 3 2 2
    16 8 3 1 2
    17 8 4 1 2
    18 8 4 2 2
    19 8 5 2 2
    20 10 4 2 2
    21 10 5 2 2
    22 10 5 2 3
    23 10 6 2 3
    24 12 5 2 3
    25 12 6 2 3
    26 12 6 3 3
    27 12 7 3 3
    28 12 7 3 4
    29 12 8 3 4
    30 12 8 4 4
    31 12 9 4 4
    32 16 8 3 3
    33 16 8 3 4
    34 16 8 4 4
    35 16 9 4 4
    36 16 10 4 4
    37 16 10 4 5
    38 16 11 4 5
    39 16 11 5 5
    40 20 10 4 4
    41 20 10 4 5
    42 20 11 4 5
    43 20 11 5 5
    44 20 12 5 5
    45 20 12 5 6
    46 20 13 5 6
    47 20 13 6 6
    48 24 12 5 5
    49 24 12 5 6
    50 24 13 5 6
    51 24 13 6 6
    52 24 14 6 6
    53 24 14 6 7
    54 24 15 6 7
    55 24 15 7 7
    56 24 16 7 7
    57 24 16 7 8
    58 24 17 7 8
    59 24 17 8 8
    60 24 18 8 8
    61 24 18 8 9
    62 24 19 8 9
    63 24 19 9 9
    64 32 16 7 7
    65 32 16 7 8
    66 32 17 7 8
    67 32 17 8 8
    68 32 18 8 8
    69 32 18 8 9
    70 32 19 8 9
    71 32 20 8 9
    72 32 20 8 10

    一律有一個 SUMA (複製) 執行緒。

    NoOfFragmentLogParts 應設定為等於 ndbmtd 使用的 LDM 執行緒數量,如本參數的設定所決定。此比例不應大於 4:1;特別不允許這種情況下的組態。

    LDM 執行緒的數量也決定未明確分割的 NDB 表格所使用的分割區數量;這是 LDM 執行緒的數量乘以叢集中資料節點的數量。(如果資料節點上使用 ndbd 而不是 ndbmtd,則永遠只有一個 LDM 執行緒;在這種情況下,自動建立的分割區數量等於資料節點的數量。如需更多資訊,請參閱第 25.2.2 節「NDB 叢集節點、節點群組、分段複本和分割區」

    如果磁碟頁面緩衝區不夠大,在使用超過預設 LDM 執行緒數量的情況下為磁碟資料表格新增大型表空間可能會導致資源和 CPU 使用問題;如需更多資訊,請參閱 DiskPageBufferMemory 組態參數的說明。

    執行緒類型將在本節稍後說明 (請參閱 ThreadConfig)。

    如果將此參數設定在允許的值範圍之外,管理伺服器會在啟動時中止,並顯示錯誤訊息 錯誤行 number: 參數 MaxNoOfExecutionThreads 的值 value 無效

    對於 MaxNoOfExecutionThreadsNDB 會在內部將值 0 或 1 四捨五入為 2,因此 2 被視為此參數的預設值和最小值。

    MaxNoOfExecutionThreads 通常旨在設定為等於可用的 CPU 執行緒數量,並配置每種執行緒類型適合一般工作負載的執行緒數量。它不會將特定執行緒指派給指定的 CPU。若要變更提供的設定,或將執行緒繫結至 CPU,您應改為使用 ThreadConfig,這可讓您將每個執行緒直接配置給所需的類型、CPU 或兩者。

    多執行緒資料節點程序至少會產生此處列出的執行緒

    • 1 個本機查詢處理常式 (LDM) 執行緒

    • 1 個接收執行緒

    • 1 個訂閱管理員 (SUMA 或複製) 執行緒

    對於 MaxNoOfExecutionThreads 值為 8 或更少,不會建立 TC 執行緒,而是由主要執行緒執行 TC 處理。

    變更 LDM 執行緒的數量通常需要重新啟動系統,無論是使用此參數還是 ThreadConfig 進行變更,但是,如果滿足以下兩個條件,則可以使用節點初始重新啟動 (NI) 來生效變更

    • 每個 LDM 執行緒最多處理 8 個分段,且

    • 表格分段的總數是 LDM 執行緒數量的整數倍。

  • MaxSendDelay

    版本(或更高版本) NDB
    類型或單位 微秒
    預設值 0
    範圍 0 - 11000
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數可用於讓資料節點在將資料傳送至 API 節點之前暫時等待;在以下段落中描述的某些情況下,這可以更有效率地傳送大量資料並提高整體輸送量。

    當有大量 API 節點處於飽和點或接近飽和點時,MaxSendDelay 相當有用,這可能會導致效能不斷增加和降低。當資料節點能夠相對快速地將結果傳送回 API 節點時,會發生這種情況,因為需要處理許多小型封包,與大型封包相比,處理每個位元組可能需要更長的時間,因而減慢 API 節點的速度;稍後,資料節點會再次開始傳送更大的封包。

    為了處理此類情況,您可以將 MaxSendDelay 設定為非零值,這有助於確保不會太快將回應傳送回 API 節點。這樣做之後,當沒有其他競爭流量時,會立即傳送回應,但當有競爭流量時,設定 MaxSendDelay 會導致資料節點等待足夠長的時間,以確保它們傳送較大的封包。實際上,這會在傳送程序中引入人工瓶頸,而實際上可以顯著提高輸送量。

  • NoOfFragmentLogParts

    版本(或更高版本) NDB
    類型或單位 數值
    預設值 4
    範圍 4, 6, 8, 10, 12, 16, 20, 24, 32
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    設定屬於此 ndbmtd 的重做記錄的記錄檔群組數量。此參數的值應設定為等於 ndbmtd 使用的 LDM 執行緒數量,如 MaxNoOfExecutionThreads 的設定所決定。不允許使用每個 LDM 超過 4 個重做記錄部分的組態。

    如需更多資訊,請參閱 MaxNoOfExecutionThreads 的說明。

  • NumCPUs

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 0
    範圍 0 - 1024
    重新啟動類型

    初始系統重新啟動: 需要完全關閉叢集,從備份中清除並還原叢集檔案系統,然後重新啟動叢集。

    設定自動執行緒組態僅使用指定數量的 CPU。如果未啟用 AutomaticThreadConfig,則此設定無效。

  • PartitionsPerNode

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 2
    範圍 1 - 32
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    設定在建立新的 NDB 資料表時,每個節點上使用的分割區數量。當本地資料管理器 (LDM) 的數量增加時,這可以避免將資料表分割成過多的分割區。

    雖然可以在不同的資料節點上將此參數設定為不同的值,並且這樣做沒有已知的問題,但這也可能沒有任何優勢;因此,建議僅在全球 config.ini 檔案的 [ndbd default] 區段中為所有資料節點設定一次。

    如果啟用了 ClassicFragmentation,則會忽略此參數的任何設定。(請記住,啟用 AutomaticThreadConfig 會停用 ClassicFragmentation。)

  • ThreadConfig

    版本(或更高版本) NDB
    類型或單位 字串
    預設值 ''
    範圍 ...
    重新啟動類型

    此參數與 ndbmtd 一起使用,將不同類型的執行緒分配給不同的 CPU。其值為一個字串,格式具有以下語法

    ThreadConfig := entry[,entry[,...]]
    
    entry := type={param[,param[,...]]}
    
    type := ldm | query | recover | main | recv | send | rep | io | tc | watchdog | idxbld
    
    param := count=number
      | cpubind=cpu_list
      | cpuset=cpu_list
      | spintime=number
      | realtime={0|1}
      | nosend={0|1}
      | thread_prio={0..10}
      | cpubind_exclusive=cpu_list
      | cpuset_exclusive=cpu_list

    括住參數列表的大括號 ({...}) 是必需的,即使列表中只有一個參數。

    param (參數) 指定以下任何或全部資訊

    • 給定類型執行緒的數量 (count)。

    • 給定類型執行緒要非獨佔綁定的 CPU 集。這由 cpubindcpuset 其中一個決定。cpubind 會使每個執行緒非獨佔地綁定到集合中的一個 CPU;cpuset 表示每個執行緒非獨佔地綁定到指定的 CPU 集。

      在 Solaris 上,您可以改為指定一組 CPU,給定類型的執行緒要獨佔地綁定到這些 CPU。cpubind_exclusive 會使每個執行緒獨佔地綁定到集合中的一個 CPU;cpuset_exclsuive 表示每個執行緒獨佔地綁定到指定的 CPU 集。

      在單一組態中,只能提供 cpubindcpusetcpubind_exclusivecpuset_exclusive 中的一個。

    • spintime 決定執行緒在休眠前旋轉等待的微秒數。

      spintime 的預設值為 SchedulerSpinTimer 資料節點組態參數的值。

      spintime 不適用於 I/O 執行緒、看門狗或離線索引建立執行緒,因此無法為這些執行緒類型設定。

    • realtime 可以設定為 0 或 1。如果設定為 1,則執行緒會以即時優先權執行。這也表示無法設定 thread_prio

      realtime 參數預設會設定為 RealtimeScheduler 資料節點組態參數的值。

      無法為離線索引建立執行緒設定 realtime

    • 透過將 nosend 設定為 1,您可以防止 mainldmreptc 執行緒協助傳送執行緒。此參數預設為 0,且不能與其他類型的執行緒一起使用。

    • thread_prio 是一個執行緒優先權等級,可以設定從 0 到 10,其中 10 代表最高優先權。預設值為 5。此參數的精確效果與平台相關,並將在本節稍後描述。

      無法為離線索引建立執行緒設定執行緒優先權等級。

    不同平台的 thread_prio 設定和效果。thread_prio 的實作在 Linux/FreeBSD、Solaris 和 Windows 之間有所不同。在以下列表中,我們將依次討論其在這些平台上的影響

    • Linux 和 FreeBSD:我們會將 thread_prio 對應到要提供給 nice 系統呼叫的值。由於程序的較低 niceness 值表示較高的程序優先權,因此增加 thread_prio 會降低 nice 值。

      表 25.12 Linux 和 FreeBSD 上 thread_prio 到 nice 值的對應

      thread_prio nice
      0 19
      1 16
      2 12
      3 8
      4 4
      5 0
      6 -4
      7 -8
      8 -12
      9 -16
      10 -20

      某些作業系統可能會提供最大程序 niceness 等級為 20,但並非所有目標版本都支援此等級;因此,我們選擇 19 作為可以設定的最大 nice 值。

    • Solaris:在 Solaris 上設定 thread_prio 會設定 Solaris FX 優先權,對應關係如下表所示

      表 25.13 Solaris 上 thread_prio 到 FX 優先權的對應

      thread_prio Solaris FX 優先權
      0 15
      1 20
      2 25
      3 30
      4 35
      5 40
      6 45
      7 50
      8 55
      9 59
      10 60

      在 Solaris 上,thread_prio 設定為 9 會對應到特殊 FX 優先權值 59,這表示作業系統也會嘗試強制執行緒在其自己的 CPU 核心上單獨執行。

    • Windows:我們會將 thread_prio 對應到傳遞給 Windows API SetThreadPriority() 函數的 Windows 執行緒優先權值。此對應關係如下表所示

      表 25.14 thread_prio 到 Windows 執行緒優先權的對應

      thread_prio Windows 執行緒優先權
      0 - 1 THREAD_PRIORITY_LOWEST
      2 - 3 THREAD_PRIORITY_BELOW_NORMAL
      4 - 5 THREAD_PRIORITY_NORMAL
      6 - 7 THREAD_PRIORITY_ABOVE_NORMAL
      8 - 10 THREAD_PRIORITY_HIGHEST

    type 屬性代表 NDB 執行緒類型。支援的執行緒類型以及每個執行緒允許的 count 值範圍在以下列表中提供

    • ldm:本地查詢處理程式 (處理資料的 DBLQH 核心區塊)。使用的 LDM 執行緒越多,資料分割程度就越高。

      ClassicFragmentation 設定為 0 時,分割區數量與 LDM 執行緒的數量無關,而是取決於 PartitionsPerNode 的值。)每個 LDM 執行緒都維護自己的資料和索引分割區集,以及自己的重做記錄檔。ldm 可以設定為 0 到 332 (含) 範圍內的任何值。當將其設定為 0 時,mainreptc 也必須為 0,且 recv 也必須設定為 1;這樣做會使 ndbmtd 模擬 ndbd

      每個 LDM 執行緒通常與 1 個查詢執行緒分組,以形成一個 LDM 群組。一組 4 到 8 個 LDM 群組會分組到一個循環群組中。每個 LDM 執行緒都可以由相同循環群組中的任何查詢或執行緒協助執行。NDB 會嘗試形成循環群組,使每個循環群組中的所有執行緒都鎖定到連接到相同 L3 快取的 CPU,在循環群組大小的範圍限制內。

      變更 LDM 執行緒的數量通常需要重新啟動系統才能有效且對叢集操作安全;在某些情況下,此要求會放寬,如本節稍後所述。當使用 MaxNoOfExecutionThreads 完成此操作時也是如此。

      當使用超過預設數量的 LDM 時,為磁碟資料表新增大型表格空間 (數百 GB 或更多) 如果 DiskPageBufferMemory 不夠大,可能會導致資源和 CPU 使用問題。

      如果 ThreadConfig 值字串中未包含 ldm,則會建立一個 ldm 執行緒。

    • query:查詢執行緒會繫結到一個 LDM,並與其一起形成一個 LDM 群組;僅對 READ COMMITTED 查詢起作用。查詢執行緒的數量必須設定為 LDM 執行緒數量的 0、1、2 或 3 倍。除非將 query 設定為非零值,或透過啟用 AutomaticThreadConfig 參數來覆寫此設定,否則不會使用查詢執行緒。

      查詢執行緒也充當復原執行緒 (請參閱下一項),儘管反之則不然。

      變更查詢執行緒的數量需要重新啟動節點。

    • recover:復原執行緒會從片段還原資料,作為 LCP 的一部分。

      變更復原執行緒的數量需要重新啟動節點。

    • tc:包含正在進行交易狀態的交易協調器執行緒 (DBTC 核心區塊)。TC 執行緒的最大數量為 128。

      理想情況下,每個新交易都可以分配給新的 TC 執行緒。在大多數情況下,每個 2 個 LDM 執行緒有 1 個 TC 執行緒足以保證可以發生這種情況。在寫入次數相對於讀取次數較少的情況下,可能只需要每 4 個 LQH 執行緒有 1 個 TC 執行緒即可維護交易狀態。相反地,在執行大量更新的應用程式中,TC 執行緒與 LDM 執行緒的比率可能需要接近 1 (例如,4 個 LDM 執行緒有 3 個 TC 執行緒)。

      tc 設定為 0 會使主要執行緒完成 TC 處理。在大多數情況下,這實際上與將其設定為 1 相同。

      範圍:0-64

    • main:資料字典和交易協調器 (DBDIHDBTC 核心區塊),提供結構描述管理。也可以指定零個或兩個主要執行緒。

      範圍:0-2。

      main 設定為 0,並將 rep 設定為 1,會使 main 區塊放置到 rep 執行緒中;合併後的執行緒在 ndbinfo.threads 資料表中顯示為 main_rep。這實際上與將 rep 設定為 1,並將 main 設定為 0 相同。

      也可以將 mainrep 都設定為 0,在這種情況下,這兩個執行緒都會被置於第一個 recv 執行緒中;在 threads 資料表中,產生的組合執行緒會被命名為 main_rep_recv

      如果 ThreadConfig 值字串中省略了 main,則會建立一個 main 執行緒。

    • recv:接收執行緒(CMVMI 核心區塊)。每個接收執行緒會處理一個或多個用於與 NDB Cluster 中其他節點通訊的 Socket,每個節點一個 Socket。NDB Cluster 支援多個接收執行緒;最多為 16 個此類執行緒。

      範圍:1 - 64。

      如果 ThreadConfig 值字串中省略了 recv,則會建立一個 recv 執行緒。

    • send:傳送執行緒(CMVMI 核心區塊)。為了提高輸送量,可以從一個或多個單獨的專用執行緒執行傳送操作(最多 8 個)。

      使用過多的傳送執行緒可能會對可擴展性產生不利影響。

      先前,所有執行緒都直接處理自己的傳送操作;仍然可以透過將傳送執行緒的數量設定為 0 來實現此目的(當 MaxNoOfExecutionThreads 設定小於 10 時也會發生這種情況)。雖然這樣做可能會對輸送量產生不利影響,但在某些情況下,它也可以減少延遲。

      範圍

      • 0 - 64

    • rep:複製執行緒(SUMA 核心區塊)。這個執行緒也可以與主執行緒合併(請參閱範圍資訊)。

      範圍:0-1。

      rep 設定為 0,並將 main 設定為 1,會導致 rep 區塊被放置到 main 執行緒中;在 ndbinfo.threads 資料表中,合併的執行緒會顯示為 main_rep。這實際上與將 main 設定為 1,並將 rep 設定為 0 相同。

      也可以將 mainrep 都設定為 0,在這種情況下,這兩個執行緒都會被置於第一個 recv 執行緒中;在 threads 資料表中,產生的組合執行緒會被命名為 main_rep_recv

      如果 ThreadConfig 值字串中省略了 rep,則會建立一個 rep 執行緒。

    • io:檔案系統和其他雜項操作。這些並非要求嚴苛的任務,並且始終由單個專用的 I/O 執行緒作為群組處理。

      範圍:僅限 1。

    • watchdog:與此類型相關聯的參數設定實際上會套用至多個執行緒,每個執行緒都有特定的用途。這些執行緒包括 SocketServer 執行緒,它接收來自其他節點的連線設定;SocketClient 執行緒,它嘗試設定與其他節點的連線;以及執行緒監控執行緒,它會檢查執行緒是否正在進展。

      範圍:僅限 1。

    • idxbld:離線索引建立執行緒。與先前列出的其他執行緒類型(屬於永久性)不同,這些是臨時執行緒,僅在節點或系統重新啟動期間,或在執行 ndb_restore --rebuild-indexes 時建立和使用。它們可能會繫結到與繫結到永久執行緒類型的 CPU 集重疊的 CPU 集。

      無法為離線索引建立執行緒設定 thread_priorealtimespintime 值。此外,此類型的執行緒會忽略 count

      如果未指定 idxbld,則預設行為如下:

      • 如果 I/O 執行緒也未繫結,則不會繫結離線索引建立執行緒,並且這些執行緒會使用任何可用的核心。

      • 如果 I/O 執行緒已繫結,則離線索引建立執行緒會繫結到整個繫結執行緒集,原因在於這些執行緒應該沒有其他任務要執行。

      範圍:0 - 1。

    變更 ThreadConfig 通常需要系統初始重新啟動,但在某些情況下可以放寬此要求。

    • 如果變更後,LDM 執行緒的數量與之前保持相同,則只需要簡單的節點重新啟動(滾動重新啟動或 N)即可實作變更。

    • 否則(也就是說,如果 LDM 執行緒的數量發生變更),如果符合以下兩個條件,仍然可以使用節點初始重新啟動 (NI) 來實作變更:

      1. 每個 LDM 執行緒最多處理 8 個分段,且

      2. 表格分段的總數是 LDM 執行緒數量的整數倍。

    在任何其他情況下,都需要系統初始重新啟動才能變更此參數。

    NDB 可以透過以下兩個準則來區分執行緒類型:

    • 執行緒是否為執行執行緒。mainldmqueryrecvreptcsend 類型的執行緒是執行執行緒;iorecoverwatchdogidxbld 執行緒不被視為執行執行緒。

    • 將執行緒配置給指定任務是永久性還是暫時性。目前,除了 idxbld 之外的所有執行緒類型都被視為永久性;idxbld 執行緒被視為暫時執行緒。

    簡單範例

    # Example 1.
    
    ThreadConfig=ldm={count=2,cpubind=1,2},main={cpubind=12},rep={cpubind=11}
    
    # Example 2.
    
    Threadconfig=main={cpubind=0},ldm={count=4,cpubind=1,2,5,6},io={cpubind=3}

    在為資料節點主機配置執行緒使用時,通常最好保留一個或多個 CPU 數量,供作業系統和其他任務使用。因此,對於具有 24 個 CPU 的主機,您可能想要使用 20 個 CPU 執行緒(保留 4 個供其他用途),其中 8 個 LDM 執行緒、4 個 TC 執行緒(LDM 執行緒數量的一半)、3 個傳送執行緒、3 個接收執行緒,以及每個用於結構描述管理、非同步複製和 I/O 操作的 1 個執行緒。(這幾乎與 MaxNoOfExecutionThreads 設定為 20 時所使用的執行緒分配相同。)以下 ThreadConfig 設定會執行這些指派,此外還會將所有這些執行緒繫結到特定的 CPU:

    ThreadConfig=ldm{count=8,cpubind=1,2,3,4,5,6,7,8},main={cpubind=9},io={cpubind=9}, \
    rep={cpubind=10},tc{count=4,cpubind=11,12,13,14},recv={count=3,cpubind=15,16,17}, \
    send{count=3,cpubind=18,19,20}

    在大多數情況下,應該可以將主(結構描述管理)執行緒和 I/O 執行緒繫結到同一個 CPU,就像我們在剛剛顯示的範例中所做的那樣。

    以下範例整合了使用 cpusetcpubind 定義的 CPU 群組,以及執行緒優先順序的使用。

    ThreadConfig=ldm={count=4,cpuset=0-3,thread_prio=8,spintime=200}, \
    ldm={count=4,cpubind=4-7,thread_prio=8,spintime=200}, \
    tc={count=4,cpuset=8-9,thread_prio=6},send={count=2,thread_prio=10,cpubind=10-11}, \
    main={count=1,cpubind=10},rep={count=1,cpubind=11}

    在本例中,我們建立兩個 LDM 群組;第一個使用 cpubind,第二個使用 cpusetthread_priospintime 設定為每個群組的相同值。這表示總共有 8 個 LDM 執行緒。(您應該確保 NoOfFragmentLogParts 也設定為 8。)這 4 個 TC 執行緒只使用 2 個 CPU;當使用 cpuset 時,可以指定比群組中執行緒數量少的 CPU。(對於 cpubind 則不然。)傳送執行緒使用 2 個執行緒,使用 cpubind 將這些執行緒繫結到 CPU 10 和 11。主執行緒和 rep 執行緒可以重複使用這些 CPU。

    此範例說明如何在具有超執行緒的 24 個 CPU 主機上設定 ThreadConfigNoOfFragmentLogParts,讓 CPU 10、11、22 和 23 可用於作業系統功能和中斷。

    NoOfFragmentLogParts=10
    ThreadConfig=ldm={count=10,cpubind=0-4,12-16,thread_prio=9,spintime=200}, \
    tc={count=4,cpuset=6-7,18-19,thread_prio=8},send={count=1,cpuset=8}, \
    recv={count=1,cpuset=20},main={count=1,cpuset=9,21},rep={count=1,cpuset=9,21}, \
    io={count=1,cpuset=9,21,thread_prio=8},watchdog={count=1,cpuset=9,21,thread_prio=9}

    接下來的幾個範例包含 idxbld 的設定。其中前兩個範例示範了為 idxbld 定義的 CPU 集如何與為其他(永久性)執行緒類型指定的 CPU 集重疊,第一個使用 cpuset,第二個使用 cpubind

    ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
    io={cpubind=8},idxbld={cpuset=1-8}
    
    ThreadConfig=main,ldm={count=1,cpubind=1},idxbld={count=1,cpubind=1}

    下一個範例為 I/O 執行緒指定 CPU,但不為索引建立執行緒指定。

    ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
    io={cpubind=8}

    由於剛才顯示的 ThreadConfig 設定將執行緒鎖定到編號為 1 到 8 的 8 個核心,因此它與此處顯示的設定相同:

    ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
    io={cpubind=8},idxbld={cpuset=1,2,3,4,5,6,7,8}

    為了利用使用 ThreadConfig 所提供的增強穩定性,必須確保 CPU 已隔離,並且不受中斷的影響,也不會由作業系統排程執行其他任務。在許多 Linux 系統上,您可以透過在 /etc/sysconfig/irqbalance 中將 IRQBALANCE_BANNED_CPUS 設定為 0xFFFFF0,以及在 grub.conf 中使用 isolcpus 開機選項來執行此操作。如需特定資訊,請參閱您的作業系統或平台文件。

磁碟資料設定參數。影響磁碟資料行為的設定參數包括以下:

  • DiskPageBufferEntries

    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    這是要配置的頁面項目(頁面參考)數量。它在 DiskPageBufferMemory 中指定為 32K 頁面的數量。預設值足以應付大多數情況,但如果您在使用磁碟資料表格時遇到非常大的交易問題,可能需要增加此參數的值。每個頁面項目約需 100 個位元組。

  • DiskPageBufferMemory

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 64M
    範圍 4M - 16T
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    這會決定用於快取磁碟上頁面的空間大小(以位元組為單位),並在 config.ini 檔案的 [ndbd][ndbd default] 區段中設定。

    如果 DiskPageBufferMemory 的值設定太低,且在 ThreadConfig 中使用超過預設數量的 LDM 執行緒(例如 {ldm=6...}),則在嘗試將大型(例如 500G)資料檔案新增至以磁碟為基礎的 NDB 表格時,可能會出現問題,在此過程中,該流程會佔用其中一個 CPU 核心,且耗時無限期。

    這是因為,在將資料檔案加入表空間的過程中,範圍頁面會被鎖定在額外的 PGMAN 工作執行緒的記憶體中,以便快速存取中繼資料。當加入大型檔案時,此工作執行緒的記憶體不足以處理所有資料檔案的中繼資料。在這種情況下,您應該增加 DiskPageBufferMemory,或加入較小的表空間檔案。您可能還需要調整 DiskPageBufferEntries

    您可以查詢 ndbinfo.diskpagebuffer 資料表,以協助判斷是否應該增加此參數的值,以減少不必要的磁碟搜尋。請參閱 第 25.6.17.31 節,「ndbinfo diskpagebuffer 資料表」,以取得更多資訊。

  • SharedGlobalMemory

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 128M
    範圍 0 - 64T
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數決定用於日誌緩衝區、磁碟操作(例如頁面請求和等待佇列),以及表空間、日誌檔案群組、UNDO 檔案和資料檔案的中繼資料的記憶體量。共用全域記憶體池也提供記憶體,用於滿足與 CREATE LOGFILE GROUPALTER LOGFILE GROUP 陳述式一起使用的 UNDO_BUFFER_SIZE 選項的記憶體需求,包括此選項在 InitialLogFileGroup 資料節點組態參數的設定中隱含的任何預設值。SharedGlobalMemory 可以在 config.ini 組態檔案的 [ndbd][ndbd default] 區段中設定,並且以位元組為單位測量。

    預設值為 128M

  • DiskIOThreadPool

    版本(或更高版本) NDB
    類型或單位 執行緒
    預設值 2
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數決定用於磁碟資料檔案存取的不受限執行緒數。在引入 DiskIOThreadPool 之前,每個磁碟資料檔案都會產生一個執行緒,這可能會導致效能問題,尤其是在使用非常大的資料檔案時。透過 DiskIOThreadPool,您可以(例如)使用多個並行工作的執行緒來存取單個大型資料檔案。

    此參數僅適用於磁碟資料 I/O 執行緒。

    此參數的最佳值取決於您的硬體和組態,並且包括以下因素

    • 磁碟資料檔案的實體分佈。 將資料檔案、復原日誌檔案和資料節點檔案系統放置在不同的實體磁碟上,可以獲得更好的效能。如果您對部分或全部這些檔案集執行此操作,則您可以(並且應該)將 DiskIOThreadPool 設定得更高,以啟用單獨的執行緒來處理每個磁碟上的檔案。

      當您針對磁碟資料檔案使用單獨的磁碟時,您也應該停用 DiskDataUsingSameDisk;這會提高執行磁碟資料表空間檢查點的速度。

    • 磁碟效能和類型。 可以容納用於磁碟資料檔案處理的執行緒數也取決於磁碟的速度和輸送量。更快的磁碟和更高的輸送量允許更多的磁碟 I/O 執行緒。我們的測試結果顯示,固態硬碟可以處理比傳統磁碟更多的磁碟 I/O 執行緒,因此 DiskIOThreadPool 的值更高。

      當使用固態硬碟時,尤其是使用 NVMe 的硬碟時,也建議減少 TimeBetweenGlobalCheckpoints。另請參閱 磁碟資料延遲參數

    此參數的預設值為 2。

  • 磁碟資料檔案系統參數。 以下清單中的參數可讓您在特定目錄中放置 NDB Cluster 磁碟資料檔案,而無需使用符號連結。

    • FileSystemPathDD

      版本(或更高版本) NDB
      類型或單位 檔案名稱
      預設值 FileSystemPath
      範圍 ...
      重新啟動類型

      初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

      如果指定此參數,則 NDB Cluster 磁碟資料資料檔案和復原日誌檔案會放置在指示的目錄中。可以透過為 FileSystemPathDataFilesFileSystemPathUndoFiles 或兩者指定值來覆寫資料檔案、復原日誌檔案或兩者的值,如這些參數所說明。也可以透過在 CREATE TABLESPACEALTER TABLESPACE 陳述式的 ADD DATAFILE 子句中指定路徑來覆寫資料檔案的值,並且透過在 CREATE LOGFILE GROUPALTER LOGFILE GROUP 陳述式的 ADD UNDOFILE 子句中指定路徑來覆寫復原日誌檔案的值。如果未指定 FileSystemPathDD,則會使用 FileSystemPath

      如果為給定的資料節點指定了 FileSystemPathDD 目錄(包括在 config.ini 檔案的 [ndbd default] 區段中指定參數的情況),則使用 --initial 啟動該資料節點會導致刪除目錄中的所有檔案。

    • FileSystemPathDataFiles

      版本(或更高版本) NDB
      類型或單位 檔案名稱
      預設值 FileSystemPathDD
      範圍 ...
      重新啟動類型

      初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

      如果指定此參數,則 NDB Cluster 磁碟資料資料檔案會放置在指示的目錄中。這會覆寫為 FileSystemPathDD 設定的任何值。可以透過在用於建立該資料檔案的 CREATE TABLESPACEALTER TABLESPACE 陳述式的 ADD DATAFILE 子句中指定路徑來覆寫給定資料檔案的此參數。如果未指定 FileSystemPathDataFiles,則會使用 FileSystemPathDD(如果也未設定 FileSystemPathDD,則會使用 FileSystemPath)。

      如果為給定的資料節點指定了 FileSystemPathDataFiles 目錄(包括在 config.ini 檔案的 [ndbd default] 區段中指定參數的情況),則使用 --initial 啟動該資料節點會導致刪除目錄中的所有檔案。

    • FileSystemPathUndoFiles

      版本(或更高版本) NDB
      類型或單位 檔案名稱
      預設值 FileSystemPathDD
      範圍 ...
      重新啟動類型

      初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

      如果指定此參數,則 NDB Cluster 磁碟資料復原日誌檔案會放置在指示的目錄中。這會覆寫為 FileSystemPathDD 設定的任何值。可以透過在用於建立該資料檔案的 CREATE LOGFILE GROUPALTER LOGFILE GROUP 陳述式的 ADD UNDO 子句中指定路徑來覆寫給定資料檔案的此參數。如果未指定 FileSystemPathUndoFiles,則會使用 FileSystemPathDD(如果也未設定 FileSystemPathDD,則會使用 FileSystemPath)。

      如果為給定的資料節點指定了 FileSystemPathUndoFiles 目錄(包括在 config.ini 檔案的 [ndbd default] 區段中指定參數的情況),則使用 --initial 啟動該資料節點會導致刪除目錄中的所有檔案。

    如需更多資訊,請參閱 第 25.6.11.1 節,「NDB Cluster 磁碟資料物件」

  • 磁碟資料物件建立參數。 接下来的兩個參數可讓您在第一次啟動叢集時,無需使用 SQL 陳述式,即可建立磁碟資料日誌檔案群組、表空間或兩者。

    • InitialLogFileGroup

      版本(或更高版本) NDB
      類型或單位 字串
      預設值 [請參閱文件]
      範圍 ...
      重新啟動類型

      系統重新啟動: 需要完全關閉並重新啟動叢集。

      此參數可用於指定在執行叢集初始啟動時建立的日誌檔案群組。如這裡所示指定 InitialLogFileGroup

      InitialLogFileGroup = [name=name;] [undo_buffer_size=size;] file-specification-list
      
      file-specification-list:
          file-specification[; file-specification[; ...]]
      
      file-specification:
          filename:size

      日誌檔案群組的 name 是可選的,預設為 DEFAULT-LGundo_buffer_size 也是可選的;如果省略,則預設為 64M。每個 file-specification 對應一個復原日誌檔案,並且必須在 file-specification-list 中指定至少一個。復原日誌檔案的放置方式與針對 FileSystemPathFileSystemPathDDFileSystemPathUndoFiles 設定的任何值相同,就好像它們是 CREATE LOGFILE GROUPALTER LOGFILE GROUP 陳述式的結果而建立的一樣。

      請考慮以下內容

      InitialLogFileGroup = name=LG1; undo_buffer_size=128M; undo1.log:250M; undo2.log:150M

      這相當於下列 SQL 陳述式

      CREATE LOGFILE GROUP LG1
          ADD UNDOFILE 'undo1.log'
          INITIAL_SIZE 250M
          UNDO_BUFFER_SIZE 128M
          ENGINE NDBCLUSTER;
      
      ALTER LOGFILE GROUP LG1
          ADD UNDOFILE 'undo2.log'
          INITIAL_SIZE 150M
          ENGINE NDBCLUSTER;

      當使用 --initial 啟動資料節點時,會建立此日誌檔案群組。

      初始日誌檔案群組的資源會與 SharedGlobalMemory 的值所指示的資源一起加入全域記憶體池。

      如果使用此參數,則應始終在 config.ini 檔案的 [ndbd default] 區段中設定。未定義在不同資料節點上設定不同值時,NDB Cluster 的行為。

    • InitialTablespace

      版本(或更高版本) NDB
      類型或單位 字串
      預設值 [請參閱文件]
      範圍 ...
      重新啟動類型

      系統重新啟動: 需要完全關閉並重新啟動叢集。

      此參數可用於指定在叢集初始啟動時建立的 NDB 叢集磁碟資料表空間。InitialTablespace 的指定方式如下所示:

      InitialTablespace = [name=name;] [extent_size=size;] file-specification-list

      表空間的 name 屬性是可選的,預設值為 DEFAULT-TSextent_size 也是可選的,預設值為 1Mfile-specification-list 使用與 InitialLogfileGroup 參數相同的語法,唯一的區別在於,與 InitialTablespace 一起使用的每個 file-specification 對應一個資料檔案。在 file-specification-list 中至少必須指定一個。資料檔案的放置位置取決於 FileSystemPathFileSystemPathDDFileSystemPathDataFiles 設定的任何值,就像它們是 CREATE TABLESPACEALTER TABLESPACE 語句的結果一樣。

      例如,考慮以下行,在 config.ini 檔案的 [ndbd default] 區段中指定 InitialTablespace(與 InitialLogfileGroup 一樣,此參數應始終在 [ndbd default] 區段中設定,因為在不同資料節點上設定不同值時,NDB 叢集的行為未定義):

      InitialTablespace = name=TS1; extent_size=8M; data1.dat:2G; data2.dat:4G

      這相當於下列 SQL 陳述式

      CREATE TABLESPACE TS1
          ADD DATAFILE 'data1.dat'
          EXTENT_SIZE 8M
          INITIAL_SIZE 2G
          ENGINE NDBCLUSTER;
      
      ALTER TABLESPACE TS1
          ADD DATAFILE 'data2.dat'
          INITIAL_SIZE 4G
          ENGINE NDBCLUSTER;

      此表空間會在使用 --initial 啟動資料節點時建立,並且可以在之後建立 NDB 叢集磁碟資料表時使用。

  • 磁碟資料延遲參數。 此處列出的兩個參數可用於改善 NDB 叢集磁碟資料表的延遲問題處理。

    • MaxDiskDataLatency

      版本(或更高版本) NDB
      類型或單位 毫秒
      預設值 0
      範圍 0 - 8000
      重新啟動類型

      節點重新啟動: 需要對叢集進行滾動重新啟動

      此參數控制磁碟存取的最大允許平均延遲(最大 8000 毫秒)。當達到此限制時,NDB 會開始中止交易,以減少磁碟資料 I/O 子系統的壓力。使用 0 可停用延遲檢查。

    • DiskDataUsingSameDisk

      版本(或更高版本) NDB
      類型或單位 布林值
      預設值 true
      範圍 ...
      重新啟動類型

      節點重新啟動: 需要對叢集進行滾動重新啟動

      如果您的磁碟資料表空間使用一個或多個獨立磁碟,請將此參數設定為 false。這樣做允許以高於共用磁碟時通常使用的速率執行表空間的檢查點。

      DiskDataUsingSameDisktrue 時,每當正在進行記憶體中的檢查點時,NDB 會降低磁碟資料檢查點的速率,以協助確保磁碟負載保持恆定。

磁碟資料和 GCP 停止錯誤。 使用磁碟資料表時遇到的錯誤,例如 節點 nodeid 因為偵測到 GCP 停止而終止了此節點(錯誤 2303)通常稱為 GCP 停止錯誤。當重做日誌未及時刷新到磁碟時,會發生此類錯誤;這通常是由於磁碟速度慢且磁碟輸送量不足所致。

您可以使用更快的磁碟,並將磁碟資料檔案放在與資料節點檔案系統分開的磁碟上,來協助防止這些錯誤發生。降低 TimeBetweenGlobalCheckpoints 的值會傾向於減少每次全域檢查點要寫入的資料量,因此在嘗試寫入全域檢查點時,可能會提供一些防止重做日誌緩衝區溢位的保護;但是,降低此值也會減少寫入 GCP 的時間,因此必須謹慎執行此操作。

除了先前說明的 DiskPageBufferMemory 的注意事項之外,正確設定 DiskIOThreadPool 設定參數也非常重要;將 DiskIOThreadPool 設定得太高很可能導致 GCP 停止錯誤(錯誤 #37227)。

儲存或提交逾時可能會導致 GCP 停止;TimeBetweenEpochsTimeout 資料節點設定參數會決定提交的逾時時間。但是,可以將此參數設定為 0 來停用這兩種逾時。

用於設定傳送緩衝區記憶體配置的參數。 傳送緩衝區記憶體是從所有傳輸器共用的記憶體集區動態配置的,這表示可以根據需要調整傳送緩衝區的大小。(先前,NDB 核心會為叢集中的每個節點使用固定大小的傳送緩衝區,該緩衝區在節點啟動時配置,且在節點執行時無法變更。)TotalSendBufferMemoryOverLoadLimit 資料節點設定參數允許設定此記憶體配置的限制。如需有關這些參數(以及 SendBufferMemory)使用的詳細資訊,請參閱 第 25.4.3.14 節,〈設定 NDB 叢集傳送緩衝區參數〉

另請參閱 第 25.6.7 節,〈線上新增 NDB 叢集資料節點〉

重做日誌過度提交處理。 當將重做日誌刷新到磁碟所需時間過長時,可以控制資料節點對操作的處理。當給定的重做日誌刷新時間超過 RedoOverCommitLimit 秒,超過 RedoOverCommitCounter 次時,會發生這種情況,導致任何擱置中的交易中止。發生這種情況時,傳送交易的 API 節點可以透過排隊等候操作並重新嘗試,或透過中止操作來處理應已提交的操作,如 DefaultOperationRedoProblemAction 所決定。以下清單中說明用於設定逾時和超出次數的資料節點設定參數,然後 API 節點才會採取此動作:

  • RedoOverCommitCounter

    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    當嘗試將給定的重做日誌寫入磁碟時超出 RedoOverCommitLimit 的次數達到此值或更多次時,任何因此而未提交的交易都會中止,並且任何這些交易的來源 API 節點會根據其 DefaultOperationRedoProblemAction 的值來處理組成這些交易的操作(透過將要重新嘗試的操作排隊,或中止操作)。

  • RedoOverCommitLimit

    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    此參數設定在嘗試將給定的重做日誌寫入磁碟時逾時的上限(以秒為單位)。資料節點嘗試刷新此重做日誌,但所花時間超過 RedoOverCommitLimit 的次數會被保留,並與 RedoOverCommitCounter 進行比較,當刷新時間過長超過該參數的值時,任何因刷新逾時而未提交的交易都會中止。發生此情況時,任何這些交易的來源 API 節點會根據其 DefaultOperationRedoProblemAction 設定來處理組成這些交易的操作(它可以選擇將操作排隊以重新嘗試,或中止操作)。

控制重新啟動嘗試。 當資料節點無法使用 MaxStartFailRetriesStartFailRetryDelay 資料節點設定參數啟動時,可以對重新啟動嘗試進行精細的控制。

MaxStartFailRetries 限制在放棄啟動資料節點之前嘗試的總次數,StartFailRetryDelay 設定重試嘗試之間的秒數。這些參數列示如下:

  • StartFailRetryDelay

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 0
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    使用此參數來設定在啟動失敗時,資料節點重新啟動嘗試之間的秒數。預設值為 0(無延遲)。

    除非 StopOnError 等於 0,否則此參數和 MaxStartFailRetries 都會被忽略。

  • MaxStartFailRetries

    版本(或更高版本) NDB
    類型或單位 unsigned
    預設值 3
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    使用此參數來限制資料節點在啟動失敗時嘗試重新啟動的次數。預設值為 3 次嘗試。

    除非 StopOnError 等於 0,否則此參數和 StartFailRetryDelay 都會被忽略。

NDB 索引統計參數。 以下列表中的參數與 NDB 索引統計資料的產生相關。

  • IndexStatAutoCreate

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 1
    範圍 0, 1
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用(設定為 1)或停用(設定為 0)在建立索引時自動收集統計資料。

  • IndexStatAutoUpdate

    版本(或更高版本) NDB
    類型或單位 整數
    預設值 1
    範圍 0, 1
    重新啟動類型

    節點重新啟動: 需要對叢集進行滾動重新啟動

    啟用(設定為 1)或停用(設定為 0)監控索引的變更,並在偵測到這些變更時觸發自動統計資料更新。觸發更新所需的變更程度由 IndexStatTriggerPctIndexStatTriggerScale 選項的設定決定。

  • IndexStatSaveSize

    版本(或更高版本) NDB
    類型或單位 位元組
    預設值 32768
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    NDB 系統表和 mysqld 記憶體快取中,允許任何給定索引的已儲存統計資料的最大空間(以位元組為單位)。

    無論大小限制如何,至少都會產生一個樣本。此大小會由 IndexStatSaveScale 調整。

    IndexStatSaveSize 指定的大小會乘以大型索引的 IndexStatTriggerPct 值,再乘以 0.01。這會進一步乘以索引大小的以 2 為底的對數。將 IndexStatTriggerPct 設定為 0 會停用縮放效果。

  • IndexStatSaveScale

    版本(或更高版本) NDB
    類型或單位 百分比
    預設值 100
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    IndexStatSaveSize 指定的大小會乘以大型索引的 IndexStatTriggerPct 值,再乘以 0.01。這會進一步乘以索引大小的以 2 為底的對數。將 IndexStatTriggerPct 設定為 0 會停用縮放效果。

  • IndexStatTriggerPct

    版本(或更高版本) NDB
    類型或單位 百分比
    預設值 100
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    觸發索引統計資料更新的更新變更百分比。該值會由 IndexStatTriggerScale 調整。您可以將 IndexStatTriggerPct 設定為 0 來完全停用此觸發器。

  • IndexStatTriggerScale

    版本(或更高版本) NDB
    類型或單位 百分比
    預設值 100
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    對於大型索引,將 IndexStatTriggerPct 乘以該值再乘以 0.01 來調整。值為 0 會停用縮放。

  • IndexStatUpdateDelay

    版本(或更高版本) NDB
    類型或單位
    預設值 60
    範圍 0 - 4294967039 (0xFFFFFEFF)
    重新啟動類型

    初始節點重新啟動:需要對叢集執行滾動重新啟動;每個資料節點都必須使用 --initial 重新啟動。

    指定索引的自動索引統計資料更新之間的最小延遲時間(以秒為單位)。將此變數設定為 0 會停用任何延遲。預設值為 60 秒。

重新啟動類型。 此章節的參數描述所使用的重新啟動類型資訊顯示在下表中

表格 25.15 NDB Cluster 重新啟動類型

符號 重新啟動類型 描述
N 節點 可以使用滾動重新啟動來更新參數(請參閱 第 25.6.5 節,「執行 NDB Cluster 的滾動重新啟動」
S 系統 必須完全關閉所有叢集節點,然後重新啟動,才能生效此參數的變更
I 初始 必須使用 --initial 選項重新啟動資料節點