10bet网址
MySQL 5.6参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

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

以前,NDB内核为集群中的每个节点使用固定大小为2MB的发送缓冲区,该缓冲区在节点启动时分配。因为这个缓冲区的大小不能在集群启动后更改,所以必须提前使其足够大,以容纳任何传输器套接字上可能的最大负载。然而,这是对内存的低效使用,因为很多内存经常没有使用,并且在扩展到多个API节点时可能导致大量资源的浪费。

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

  • TotalSendBufferMemory。该参数可针对所有类型的NDB集群节点进行设置,即可在(ndbd)(mgm),(api)(或(mysql))config.ini文件。它表示每个节点要分配的内存总量(以字节为单位),它被设置为在所有配置的传输器之间使用。如果设置,其最小值为256KB;最大值为4294967039。

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

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

    转运体 最大发送缓冲区大小(字节)
    TCP SendBufferMemory(默认= 2米)
    单孔位微吹气扰动 20 k

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

  • OverloadLimit。该参数用于config.ini文件(tcp)节,并表示在认为连接过载之前,发送缓冲区中必须存在的未发送数据量(以字节为单位)。当出现这样的过载情况时,影响重载连接的事务将失败,出现NDB API Error 1218 (在NDB内核中发送过载的缓冲区)直到过载状态通过。缺省值为0,此时有效过载限为SendBufferMemory * 0.8对于给定的连接。该参数的最大值为4G。

  • SendBufferMemory。参数指定的整个池中单个传输程序可以使用的内存量的硬限制TotalSendBufferMemory.然而,总和SendBufferMemory对于所有配置的传输器可以大于TotalSendBufferMemory这是为给定节点设置的。这是在使用许多节点时节省内存的一种方法,只要所有传输器不会同时需要最大的内存量。

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

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