Documentation Home
MySQL 8.0 参考手册  / 第 23 章 MySQL NDB Cluster 8.0  / 23.4 NDB Cluster的配置  / 23.4.3 NDB Cluster 配置文件  /  18.4.3.12 配置 NDB Cluster 发送缓冲区参数

18.4.3.12 配置 NDB Cluster 发送缓冲区参数

以前,NDB 内核为集群中的每个节点使用一个大小固定为 2MB 的发送缓冲区,该缓冲区在节点启动时分配。由于此缓冲区的大小在集群启动后无法更改,因此有必要提前使其足够大以适应任何传输器套接字上可能的最大负载。然而,这是一种低效的内存使用,因为其中大部分经常未被使用,并且在扩展到许多 API 节点时可能导致大量资源被浪费。

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

  • 总发送缓冲区内存。  可以为所有类型的 NDB Cluster 节点设置此参数——也就是说,它可以在文件的 [ndbd][mgm][api](或[mysql])部分中设置config.ini。它表示每个节点分配的内存总量(以字节为单位),它被设置为在所有配置的传输器中使用。如果设置,它的最小值为 256KB;最大值为 4294967039。

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

    表 18.16 具有最大发送缓冲区大小的传输器类型

    运输车 最大发送缓冲区大小(字节)
    TCP SendBufferMemory(默认 = 2M)
    健康管理学院 20K

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

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

  • 发送缓冲区内存。  该值表示一个硬性限制,可以由指定的整个池中的单个传输器使用的内存量 TotalSendBufferMemory。但是,SendBufferMemory 所有配置的传输器的总和可能大于 TotalSendBufferMemory 为给定节点设置的总和。这是一种在使用许多节点时节省内存的方法,只要所有传输器都不会同时需要最大内存量。

  • ReservedSendBufferMemory。  如果设置了这个可选的数据节点参数,则会给出为数据节点之间的连接保留的内存量(以字节为单位);此内存未分配给用于与管理服务器或 API 节点通信的发送缓冲区。这提供了一种方法来保护集群免受行为不当的 API 节点的影响,这些节点使用过多的发送内存,从而导致 NDB 内核内部通信失败。如果设置,则此参数的最小允许值为 256KB;最大值为 4294967039。

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