NDB
内核使用统一的发送缓冲区,其内存是从所有传输器共享的池中动态分配的。这意味着可以根据需要调整发送缓冲区的大小。可以通过设置以下参数来完成统一发送缓冲区的配置:
TotalSendBufferMemory. 此参数可以为所有类型的 NDB 集群节点设置,也就是说,它可以在
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
表来监控发送缓冲区内存使用情况,并检测可能对性能产生负面影响的减速和过载情况。