25.4.3.14 NDB 集群发送缓冲区参数配置
NDB 内核使用一个统一的发送缓冲区,该缓冲区的内存从所有传输器共享的池中动态分配。这意味着可以根据需要调整发送缓冲区的大小。配置统一发送缓冲区可以通过设置以下参数:
-
TotalSendBufferMemory. 这个参数可以在 NDB 集群所有类型节点上设置—that is, it can be set in the
[ndbd]
,[mgm]
, and[api]
(or[mysql]
) sections of theconfig.ini
文件。它表示每个节点(在其设置的所有配置传输器中)为使用共享的总内存量(以字节为单位)。如果设置,它的最小值是256KB;最大值是4294967039。为了与现有配置保持向后兼容,这个参数将其默认值设置为所有配置传输器的最大发送缓冲区大小之和,plus an additional 32KB(一个页面)per transporter。最大值取决于传输器类型,如以下表所示:
Table 25.22 Transporter types with maximum send buffer sizes
Transporter Maximum Send Buffer Size (bytes) TCP SendBufferMemory
(默认值= 2M)SHM 20K
这使得现有配置可以在与 NDB 集群 6.3 及更早版本类似地运行,使用相同的内存和发送缓冲区空间,每个传输器都可用。然而,未被一个传输器使用的内存不可供其他传输器使用。
-
OverloadLimit. 在
config.ini
文件的[tcp]
部分中使用,表示在发送缓冲区中必须存在的未发送数据(以字节为单位)量,以确定连接是否被认为是超载。当出现超载情况时,影响超载连接的事务将失败,并返回 NDB API 错误 1218 (NDB kernel 发送缓冲区超载),直到超载状态消失。默认值为 0,表示实际超载限制为SendBufferMemory * 0.8
对于给定的连接。该参数的最大值为 4G。 -
SendBufferMemory. 表示单个传输器在整个池中指定的
TotalSendBufferMemory
中可用的内存硬限制。然而,所有配置传输器的SendBufferMemory
之和可能大于给定节点的TotalSendBufferMemory
。这是一种在多个节点同时使用时保存内存的方法,只要所有传输器同时不需要最大内存量。
您可以使用 ndbinfo.transporters
表来监控发送缓冲区内存使用情况,并检测可能影响性能的超载和 slowdown 情况。