NDB
核心採用一個統一的傳送緩衝區,其記憶體是從所有傳輸器共享的池中動態分配的。這表示傳送緩衝區的大小可以根據需要進行調整。統一傳送緩衝區的配置可以透過設定以下參數來完成
TotalSendBufferMemory. 此參數可以針對所有類型的 NDB Cluster 節點設定,也就是說,可以在
config.ini
檔案的[ndbd]
、[mgm]
和[api]
(或[mysql]
) 區段中設定。它表示每個節點為所有設定的傳輸器使用的記憶體總量 (以位元組為單位)。如果設定此參數,其最小值為 256KB;最大值為 4294967039。為了與現有配置向後相容,此參數的預設值是所有設定的傳輸器的最大傳送緩衝區大小的總和,再加上每個傳輸器額外的 32KB (一頁)。最大值取決於傳輸器的類型,如下表所示
這使得現有配置的功能與 NDB Cluster 6.3 及更早版本的功能幾乎相同,每個傳輸器都有相同的記憶體量和傳送緩衝區空間可用。但是,一個傳輸器未使用的記憶體無法供其他傳輸器使用。
OverloadLimit. 此參數在
config.ini
檔案的[tcp]
區段中使用,表示傳送緩衝區中必須存在的未傳送資料量 (以位元組為單位),才能將連線視為過載。當發生此類過載情況時,影響過載連線的交易會失敗,並顯示 NDB API 錯誤 1218 (NDB 核心中的傳送緩衝區過載),直到過載狀態解除。預設值為 0,在這種情況下,指定連線的有效過載限制計算方式為SendBufferMemory * 0.8
。此參數的最大值為 4G。SendBufferMemory. 此值表示單一傳輸器可能使用的記憶體硬性限制,此限制來自
TotalSendBufferMemory
指定的整個池。但是,所有設定的傳輸器的SendBufferMemory
總和可能會大於為指定節點設定的TotalSendBufferMemory
。這是一種在使用許多節點時節省記憶體的方法,只要所有傳輸器永遠不需要同時使用最大記憶體量即可。
您可以使用 ndbinfo.transporters
資料表來監控傳送緩衝區的記憶體使用情況,並偵測可能對效能造成負面影響的減速和過載狀況。