文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  資料節點記憶體管理

25.4.3.13 資料節點記憶體管理

資料節點的所有記憶體配置都會在節點啟動時執行。這可確保資料節點能夠以穩定的方式執行,而不會使用交換記憶體,以便 NDB 可用於對延遲敏感的 (即時) 應用程式。下列類型的記憶體會在資料節點啟動時配置

  • 資料記憶體

  • 共用全域記憶體

  • 重做日誌緩衝區

  • 工作緩衝區

  • 傳送緩衝區

  • 磁碟資料記錄的分頁快取

  • 綱要交易記憶體

  • 交易記憶體

  • 復原日誌緩衝區

  • 查詢記憶體

  • 區塊物件

  • 綱要記憶體

  • 區塊資料結構

  • 長信號記憶體

  • 共用記憶體通訊緩衝區

監管大多數資料節點記憶體的 NDB 記憶體管理員,會處理下列記憶體資源

這些資源的每個資源都會設定一個保留記憶體區域和一個最大記憶體區域。保留記憶體區域只能由保留該區域的資源使用,且無法與其他資源共用;指定的資源永遠無法配置超過允許該資源的最大記憶體。沒有最大記憶體的資源可以擴展以使用記憶體管理員中的所有共用記憶體。

這些資源的全域共用記憶體大小由 SharedGlobalMemory 設定參數 (預設值:128 MB) 控制。

資料記憶體永遠保留,且永遠不會從共用記憶體取得任何記憶體。它使用 DataMemory 設定參數控制,其最大值為 16384 GB。DataMemory 是儲存記錄的位置,包含雜湊索引 (每列約 15 個位元組)、已排序的索引 (每列每索引 10-12 個位元組) 和列標頭 (每列 16-32 個位元組)。

重做日誌緩衝區也僅使用保留記憶體;這由 RedoBuffer 設定參數控制,該參數會設定每個 LDM 執行緒的重做日誌緩衝區大小。這表示實際使用的記憶體數量是此參數的值乘以資料節點中的 LDM 執行緒數量。

工作緩衝區僅使用保留記憶體;此記憶體的大小由 NDB 根據各種執行緒類型數量計算得出。

傳送緩衝區有一個保留部分,但也可以配置額外 25% 的共用全域記憶體。傳送緩衝區保留大小分兩步驟計算

  1. 使用 TotalSendBufferMemory 設定參數的值 (無預設值) 或所有連線到資料節點的個別傳送緩衝區所使用的總和。資料節點會連線到所有其他資料節點、所有 API 節點和所有管理節點。這表示在有 2 個資料節點、2 個管理節點和 10 個 API 節點的叢集中,每個資料節點都有 13 個節點連線。由於資料節點連線的 SendBufferMemory 預設值為 2 MB,這會算出總共 26 MB。

  2. 若要取得傳送緩衝區的總保留大小,請將 ExtraSendBufferMemory 設定參數的值 (如果有任何值) (預設值為 0) 加到上一步驟取得的值。

換句話說,如果已設定 TotalSendBufferMemory,則傳送緩衝區大小為 TotalSendBufferMemory + ExtraSendBufferMemory;否則,傳送緩衝區的大小等於 ([節點連線數] * SendBufferMemory) + ExtraSendBufferMemory

磁碟資料記錄的分頁快取僅使用保留資源;此資源的大小由 DiskPageBufferMemory 設定參數 (預設值為 64 MB) 控制。也會配置 32 KB 磁碟分頁項目的記憶體;這些數目由 DiskPageBufferEntries 設定參數 (預設值為 10) 決定。

交易記憶體有一個由 NDB 計算得出的保留部分,或者使用 TransactionMemory 設定參數明確設定;交易記憶體也可以使用無限量的共用全域記憶體。交易記憶體用於處理交易、掃描、鎖定、掃描緩衝區和觸發操作的所有操作資源。它也會在更新時保留資料表列,然後下一個認可會將它們寫入資料記憶體。

資源會從共用的交易記憶體資源配置,也可以使用全域共用記憶體的資源。此資源的大小可以使用單一 TransactionMemory 設定參數控制。

復原日誌緩衝區的保留記憶體可以使用 InitialLogFileGroup 設定參數設定。如果復原日誌緩衝區是 CREATE LOGFILE GROUP SQL 陳述式的一部分建立,則記憶體會從交易記憶體取得。

與磁碟資料資源的 metadata 相關的一些資源也沒有保留部分,且僅使用共用全域記憶體。因此,共用全域共用記憶體會在傳送緩衝區、交易記憶體和磁碟資料 metadata 之間共用。

如果未設定 TransactionMemory,則會根據下列參數計算

明確設定 TransactionMemory 時,不會使用剛才列出的任何設定參數來計算記憶體大小。此外,參數 MaxNoOfConcurrentIndexOperationsMaxNoOfFiredTriggersMaxNoOfLocalOperationsMaxNoOfLocalScansTransactionMemory 不相容,且無法同時設定;如果設定 TransactionMemory,且在 config.ini 設定檔中也設定這些四個參數中的任何一個參數,則管理伺服器無法啟動。

MaxNoOfConcurrentIndexOperationsMaxNoOfFiredTriggersMaxNoOfLocalOperationsMaxNoOfLocalScans 參數都已淘汰;您應該預期它們會從未來版本的 MySQL NDB Cluster 中移除。

交易記憶體資源包含大量的記憶體集區。每個記憶體集區代表一個物件類型,且包含一組物件;每個集區包含啟動時配置給集區的保留部分;此保留記憶體永遠不會返回共用全域記憶體。保留的記錄會使用只有單一層的資料結構尋找,以進行快速擷取,這表示應該保留每個集區中的一些記錄。每個集區中保留記錄的數量會對效能和保留記憶體配置產生一些影響,但通常只有在某些非常進階的使用案例中才需要明確設定保留大小。

集區保留部分的大小可以使用設定下列設定參數控制

對於 config.ini 中未明確設定的任何剛才列出的參數,保留設定會計算為對應最大設定的 25%。例如,如果未設定,ReservedConcurrentIndexOperations 會計算為 MaxNoOfConcurrentIndexOperations 的 25%,而 ReservedLocalScans 會計算為 MaxNoOfLocalScans 的 25%。

注意

如果未設定 ReservedTransactionBufferMemory,則會計算為 TransactionBufferMemory 的 25%。

保留記錄的數量是每個資料節點;這些記錄會分散在每個節點上處理它們的執行緒 (LDM 和 TC 執行緒) 之間。在大多數情況下,僅設定 TransactionMemory 就足夠,並允許集區中的記錄數量由其值來管理。

MaxNoOfConcurrentScans 限制每個 TC 執行緒中可以同時作用的掃描數量。這對於防止叢集過載非常重要。

MaxNoOfConcurrentOperations 限制在更新交易中任何時間點可以作用的操作數量。(簡單的讀取不受此參數影響。)這個數量需要受到限制,因為必須預先為節點故障處理分配記憶體,而且當與節點故障競爭時,必須有資源可用於處理一個 TC 執行緒中最大數量的作用中操作。務必在所有節點上將 MaxNoOfConcurrentOperations 設定為相同的數字(最簡單的方法是在 config.ini 全域組態檔的 [ndbd default] 區段中設定一次)。雖然可以使用滾動重新啟動來增加其值(請參閱第 25.6.5 節「執行 NDB 叢集的滾動重新啟動」),但不建議以此方式減少其值,因為在滾動重新啟動期間可能會發生節點故障。

可以透過 MaxDMLOperationsPerTransaction 參數來限制 NDB 叢集中單一交易的大小。如果未設定此參數,則一個交易的大小將受 MaxNoOfConcurrentOperations 限制,因為此參數限制每個 TC 執行緒的並行操作總數。

Schema 記憶體大小由以下一組組態參數控制:

節點數量和 LDM 執行緒數量也會對 schema 記憶體的大小產生重大影響,因為每個表格中的分割區數量和每個分割區(及其片段副本)都必須在 schema 記憶體中表示。

此外,啟動期間還會分配許多其他記錄。這些記錄相對較小。每個執行緒中的每個區塊都包含使用記憶體的區塊物件。與其他資料節點記憶體結構相比,此記憶體大小通常也相當小。