21.3.3.13 配置 NDB 群集发送缓冲区参数

NDB内核使用统一的发送缓冲区,其内存是从所有传输器共享的池中动态分配的。这意味着可以根据需要调整发送缓冲区的大小。可以通过设置以下参数来完成统一发送缓冲区的配置:

  • TotalSendBufferMemory. 可以为所有类型的 NDB 群集节点设置此参数,即可以在config.ini文件的[ndbd][mgm][api](或[mysql])部分中设置。它代 table 设置为在所有已配置的传输器中使用的每个节点要分配的内存总量(以字节为单位)。如果设置,则最小值为 256KB;最大值为 4294967039.

为了与现有配置向后兼容,此参数将所有已配置的传输器的最大发送缓冲区大小的总和加上每个传输器的额外 32KB(一页)作为其默认值。最大值取决于运输工具的类型,如下 table 所示:

table21.237 具有最大发送缓冲区大小的传输器类型

Transporter最大发送缓冲区大小(字节)
TCPSendBufferMemory(默认= 2M)
SHM20K

这使现有配置能够以与 NDB Cluster 6.3 及更早版本相同的方式运行,并且具有相同的内存量,并为每个传输器发送可用的缓冲区空间。但是,一个传输器未使用的内存对其他传输器不可用。

  • OverloadLimit. config.ini文件[tcp]部分中使用此参数,它 table 示在认为连接过载之前,发送缓冲区中必须存在的未发送数据量(以字节为单位)。当发生这种过载情况时,影响过载连接的事务将失败,并显示 NDB API 错误 1218(在 NDB 内核中过载的发送缓冲区),直到过载状态通过。默认值为 0,在这种情况下,对于给定的连接,有效过载限制计算为SendBufferMemory * 0.8。该参数的最大值为 4G。

  • SendBufferMemory. 此值 table 示对由TotalSendBufferMemory指定的整个池中的单个传输器可以使用的内存量的硬限制。但是,所有已配置的传输器的SendBufferMemory的总和可能大于为给定节点设置的TotalSendBufferMemory。这是一种在使用多个节点时节省内存的方法,只要所有传输器都不会同时要求最大内存量即可。

  • ReservedSendBufferMemory. 在 NDB 7.5.2 中已删除。

table21.238 下 table 提供了 ReservedSendBufferMemory 数据节点配置参数的类型和值信息

PropertyValue
版本(或更高版本)NDB 7.5.0
类型或单位bytes
Default256K
Range0 -4294967039(0xFFFFFEFF)
Restart TypeN
RemovedNDB 7.5.2

在 NDB 7.5.2 之前,此数据节点参数存在,但并未实际使用(错误#77404,错误#21280428)。

您可以使用ndbinfo.transporterstable 来监视发送缓冲区的内存使用情况,并检测可能对性能产生不利影响的减速和过载情况。