NDB 内核使用一个统一的发送缓冲区,其内存是从所有传输器共享的池中动态分配的。这意味着发送缓冲区的大小可以根据需要进行调整。可以通过设置以下参数来配置统一的发送缓冲区:
-
TotalSendBufferMemory. 该参数可以在 NDB 集群的所有类型节点上设置,即可以在
[ndbd]
、[mgm]
和[api]
(或[mysql]
)部分的config.ini
文件中设置。它表示每个节点为所有配置的传输器分配的总内存量(以字节为单位)。如果设置,其最小值为 256KB;最大值为 4294967039。为了与现有的配置保持向后兼容,该参数的默认值是所有配置的传输器的最大发送缓冲区大小的总和,加上每个传输器的 32KB(一页)。最大值取决于传输器的类型,如下表所示:
表 25.22 传输器类型与最大发送缓冲区大小
Transporter Maximum Send Buffer Size (bytes) TCP SendBufferMemory
(默认 = 2M)SHM 20K
这使得现有的配置可以像 NDB 集群 6.3 及更早版本那样工作,具有相同的内存和发送缓冲区空间可供每个传输器使用。但是,未使用的内存不能被其他传输器使用。
-
OverloadLimit. 该参数在
config.ini
文件的[tcp]
部分中使用,表示发送缓冲区中未发送的数据量(以字节为单位),以确定连接是否过载。当这种过载条件发生时,影响该连接的交易将失败,返回 NDB API 错误 1218(NDB 内核中的发送缓冲区过载),直到过载状态消失。默认值为 0,在这种情况下,有效的过载限制是根据给定连接的SendBufferMemory * 0.8
计算的。该参数的最大值为 4G。 -
SendBufferMemory. 该值表示单个传输器可以使用的内存量的硬性限制,从总池中分配的内存量指定为
TotalSendBufferMemory
。然而,所有配置的传输器的SendBufferMemory
之和可能大于给定节点的TotalSendBufferMemory
。这是一种在多个节点使用时节省内存的方法,只要所有传输器不同时需要最大内存量。
您可以使用 ndbinfo.transporters
表来监控发送缓冲区内存使用情况,并检测可能对性能产生不良影响的减速和过载条件。