NDB
内核使用统一的发送缓冲区,其内存从所有传输器共享的池中动态分配。这意味着可以根据需要调整发送缓冲区的大小。可以通过设置以下参数来配置统一发送缓冲区
TotalSendBufferMemory. 此参数可以为所有类型的 NDB 集群节点设置,也就是说,它可以在
config.ini
文件的[ndbd]
、[mgm]
和[api]
(或[mysql]
)部分中设置。它表示每个节点为其设置的所有已配置传输器使用的内存总量(以字节为单位)。如果设置,则最小值为 256KB;最大值为 4294967039。为了向后兼容现有的配置,此参数的默认值为所有已配置传输器的最大发送缓冲区大小之和,加上每个传输器额外的 32KB(一页)。最大值取决于传输器的类型,如下表所示
这使得现有配置能够以与 NDB 集群 6.3 及更早版本几乎相同的方式运行,每个传输器可以使用相同数量的内存和发送缓冲区空间。但是,一个传输器未使用的内存不能被其他传输器使用。
OverloadLimit. 此参数在
config.ini
文件的[tcp]
部分中使用,表示在连接被视为过载之前必须存在于发送缓冲区中的未发送数据量(以字节为单位)。当发生这种过载情况时,影响过载连接的事务将失败,并出现 NDB API 错误 1218(NDB 内核中的发送缓冲区过载),直到过载状态消失。默认值为 0,在这种情况下,有效过载限制计算为给定连接的SendBufferMemory * 0.8
。此参数的最大值为 4G。SendBufferMemory. 此值表示单个传输器在
TotalSendBufferMemory
指定的整个池中可以使用的内存量的硬限制。但是,所有已配置传输器的SendBufferMemory
之和可能大于为给定节点设置的TotalSendBufferMemory
。只要所有传输器不同时需要最大内存量,这就是在使用多个节点时节省内存的一种方法。
您可以使用 ndbinfo.transporters
表来监控发送缓冲区内存使用情况,并检测可能对性能产生负面影响的减速和过载情况。