Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


25.4.3.6 定义 NDB 集群数据节点

[ndbd] 和 [ndbd default] 部分用于配置集群中的数据节点行为。

[ndbd] 和 [ndbd default] 始终用作部分名称,无论您使用ndbdndbmtd二进制文件来启动数据节点进程。

有许多参数控制缓冲区大小、池大小、超时等。唯一的必需参数是 ExecuteOnComputer;这必须在本地 [ndbd] 部分中定义。

参数NoOfReplicas 应该在 [ndbd default] 部分中定义,因为它是所有集群数据节点的公共设置。虽然不需要设置NoOfReplicas,但是在实际应用中建议明确地设置它。

大多数数据节点参数在[ndbd default]部分设置。只有那些明确被允许设置本地值的参数才能在[ndbd]部分进行更改。在存在的情况下,HostNameNodeId必须在本地[ndbd]部分定义,而不是在config.ini文件中的任何其他部分。换言之,这些参数的设置是特定于一个数据节点的。

影响内存使用或缓冲区大小的参数可以使用KMG作为后缀,以表示1024、1024×1024或1024×1024×1024的单位。例如,100K表示100 × 1024 = 102400。

参数名称和值是大小写不敏感的,除非在MySQL Servermy. cnfmy.ini文件中使用,那时它们是大小写敏感的。

关于NDB集群磁盘数据表特定的配置参数可以在本节后面找到(见磁盘数据配置参数)。

这些参数也适用于 ndbmtd( ndbd 的多线程版本)。三个额外的数据节点配置参数——MaxNoOfExecutionThreadsThreadConfigNoOfFragmentLogParts——只适用于 ndbmtd;这些参数在与 ndbd一起使用时无效。更多信息,请见 Multi-Threading Configuration Parameters (ndbmtd)。请参阅第25.5.3节,“ndbmtd — The NDB Cluster Data Node Daemon (Multi-Threaded)”

标识数据节点.  NodeIdId 值(即数据节点标识符)可以在启动节点时或在配置文件中分配。

  • NodeId

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default [...]
    Range 1 - 144
    Restart Type

    初始系统重启: 需要完全关闭集群,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    每个节点都需要唯一的标识符。数据节点使用唯一的整数地址,范围从1到144inclusive。

    NodeId 是唯一支持的参数名称,以标识数据节点。

  • ExecuteOnComputer

    Version (or later) NDB 8.4.0
    Type or units 名称
    Default [...]
    Range ...
    Deprecated 是(在 NDB 7.5 中)
    Restart Type

    系统重启: 需要完全关闭和重新启动集群。 (NDB 8.4.0)

    这指的是在 [computer] 部分中定义的一个计算机的 Id 集合。

    Important

    这个参数已经弃用,可能在将来的版本中被删除。请使用 HostName 参数代替。

  • 这个节点 ID 只能被明确请求它的连接提供。管理服务器不能使用 any 节点 ID。这参数可以在运行多个管理服务器在同一主机上时使用,并且 HostName 不足以区分进程。旨为测试使用。

  • HostName

    Version (or later) NDB 8.4.0
    Type or units 主机名或 IP 地址
    Default localhost
    Range ...
    Restart Type

    节点重启:需要对集群进行 滚动重启。 (NDB 8.4.0)

    指定这个参数定义了数据节点所在计算机的主机名。使用 HostName 指定一个主机名,而不是 localhost

  • ServerPort

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default [...]
    Range 1 - 64K
    Restart Type

    系统重启:需要完整地关闭和重新启动集群。 (NDB 8.4.0)

    每个节点在集群中使用一个端口来连接到其他节点。默认情况下,这个端口将动态分配,以确保同一主机计算机上的两个节点不收到相同的端口号,因此通常不需要指定该参数的值。

    然而,如果您需要在防火墙中打开特定的端口,以便允许数据节点和 API 节点(包括 SQL 节点)之间的通信,可以将该参数设置为所需端口的号码,在 [ndbd] 部分或(如果需要对多个数据节点进行设置)[ndbd default] 部分的 config.ini 文件中,然后打开该端口以便从 SQL 节点、API 节点或双方接收 incoming 连接。

    Note

    数据节点到管理节点之间的连接使用 ndb_mgmd 管理端口(管理服务器的 PortNumber)因此,从任何数据节点到该端口的 outgoing 连接应该总是被允许。

  • TcpBind_INADDR_ANY

    将该参数设置为TRUE1IP_ADDR_ANY绑定,以便从任何地方建立连接(用于自动生成的连接)。默认值为FALSE (0)。

  • NodeGroup

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default [...]
    Range 0 - 65536
    Restart Type

    初始系统重启:需要完全关闭集群,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    该参数可以用来将数据节点分配到特定的节点组中。它在集群第一次启动时被读取,并且不能在线重新分配数据节点到不同的节点组中。通常不建议在config.ini文件的[ndbd default]部分使用该参数,并且需要小心地避免将节点分配到节点组,以免将任何节点组分配给无效的节点数。

    NodeGroup参数主要用于在运行的 NDB 集群中添加新节点组,而无需执行rolling restart。为此,您应该将其设置为 65536(最大值)。您不需要为所有集群数据节点设置NodeGroup值,只需为那些将在后续时间内启动和添加到集群中的新节点组设置该值。更多信息,请见第25.6.7.3节,“添加 NDB 集群数据节点在线:详细示例”

  • LocationDomainId

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 0
    Range 0 - 16
    Restart Type

    系统重启:需要完全关闭和重新启动集群。 (NDB 8.4.0)

    将数据节点分配到特定的可用域(也称为可用区)中,以便在云环境中提高性能。通过通知 NDB 哪些节点位于哪些可用域,可以实现以下优点:

    • 如果请求的数据不在同一节点上,可以将读取指令发送到同一可用域中的另一个节点。

    • 不同可用性域之间的节点之间的通信将使用NDB传输器的WAN支持,无需进一步的手动干预。

    • 传输器的组号可以基于所用的可用性域,以便SQL和其他API节点尽可能地与同一可用性域中的本地数据节点通信。

    • 仲裁员可以从无数据节点的可用性域中选择,也可以如果找不到这样的可用性域,从第三个可用性域中选择。

    LocationDomainId需要一个介于0和16之间的整数值,0为默认值;使用0与未设置参数相同。

  • NoOfReplicas

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 2
    Range 1-4
    Restart Type

    初始系统重启:需要完全关闭集群,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    初始系统重启:需要完全关闭集群,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    这个全局参数只能在[ndbd default]部分设置,并定义每个表在集群中的副本数量。此参数还指定了节点组的大小。一个节点组是指所有存储相同信息的节点集合。

    节点组将隐式地形成。第一个节点组由最低节点ID的数据节点组成,下一个节点组由下一个最低节点ID的数据节点组成,以此类推。例如,如果我们有4个数据节点,并且NoOfReplicas设置为2,那么这四个数据节点具有节点ID 2、3、4 和 5。然后,第一个节点组由节点 2 和 3 组成,第二个节点组由节点 4 和 5 组成。重要的是,在配置集群时,同一节点组中的节点不能在同一计算机上,因为单个硬件故障将导致整个集群失败。

    如果没有提供节点ID,那么数据节点的顺序将是确定节点组的因素,无论是否进行了明确分配,可以在管理客户端的SHOW命令输出中查看。

    NoOfReplicas的默认值为2。这是大多数生产环境中的推荐值。设置该参数的值为3 或 4 也被支持。

    Warning

    NoOfReplicas设置为1意味着所有集群数据只有一个副本;在这种情况下,单个数据节点损失将导致集群失败,因为没有额外的数据副本存储于该节点上。

    集群中的数据节点数量必须能够被该参数的值整除。例如,如果有两个数据节点,那么NoOfReplicas必须等于1或2,因为2/3和2/4都将产生小数值;如果有四个数据节点,那么NoOfReplicas必须等于1、2或4。

  • DataDir

    Version (or later) NDB 8.4.0
    Type or units 路径
    Default .
    Range ...
    Restart Type

    Initial Node Restart: 需要对集群进行滚动重启;每个数据节点都必须使用--initial重新启动。 (NDB 8.4.0)

    该参数指定trace文件、日志文件、pid文件和错误日志的存储目录。

    默认情况下是数据节点进程工作目录。

  • FileSystemPath

    Version (or later) NDB 8.4.0
    Type or units 路径
    Default DataDir
    Range ...
    Restart Type

    初始节点重启:需要对集群进行滚动重启,每个数据节点都必须使用--initial选项重启。 (NDB 8.4.0)

    该参数指定了元数据、REDO日志、UNDO日志(对于磁盘数据表)和数据文件的存储目录。默认情况下是由DataDir指定的。

    Note

    这个目录必须在ndbd进程启动之前存在。

    NDB 集群的推荐目录结构包括/var/lib/mysql-cluster,其中包含一个用于节点文件系统的子目录。这个子目录的名称包含了节点 ID。例如,如果节点 ID 是 2,这个子目录将被命名为ndb_2_fs

  • BackupDataDir

    Version (or later) NDB 8.4.0
    Type or units 路径
    Default 文件系统路径
    Range ...
    Restart Type

    初始节点重启:需要对集群进行滚动重启,每个数据节点都必须使用--initial选项重启。 (NDB 8.4.0)

    这个参数指定备份文件的存储目录。

    Important

    字符串'/BACKUP'总是被追加到这个值中。例如,如果将BackupDataDir的值设置为/var/lib/cluster-data,那么所有备份文件都将被存储在/var/lib/cluster-data/BACKUP目录下。这也意味着实际的默认备份位置是由FileSystemPath参数指定的目录下的BACKUP子目录。

DataMemoryIndexMemory[ndbd] 参数,用于指定存储实际记录和索引的内存段大小。在设置这些值时,需要了解 DataMemory 的使用,因为它通常需要根据集群实际使用情况进行更新。

Note

IndexMemory 已弃用,可能在未来的 NDB 集群版本中被删除。请查看以下描述以获取更多信息。

  • DataMemory

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 98M
    Range 1M - 16T
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数定义了存储数据库记录的可用空间(以字节为单位)。指定的整个值将在内存中分配,因此机器需要有足够的物理内存来容纳它。

    DataMemory分配的内存用于存储实际记录和索引。每个记录有16字节的开销;由于每个记录在32KB页面中,且该页面还有128字节的开销(见下),因此每个记录还会额外增加一些开销。每个页面也有一些开销,因为每个记录只存储在一个页面中。

    对于可变大小表属性,数据将被存储在单独的数据页面中,从DataMemory中分配。可变长度记录使用固定大小部分,额外增加4字节以引用可变大小部分。可变大小部分有2字节开销加上每个属性的2字节开销。

    最大记录大小为30000字节。

    分配给DataMemory的资源用于存储所有数据和索引。(IndexMemory配置的任何内存将自动添加到DataMemory中,以形成共同资源池。)

    DataMemory分配的内存空间由32KB页面组成,这些页面将被分配给表片段。每个表通常被分区为与集群中的数据节点相同数量的片段。因此,对于每个节点,片段数量与NoOfReplicas中设置的片段数量相同。

    一旦分配了一页,它目前不能返回到免费页池中,除非删除表。 (这也意味着DataMemory页面,一旦分配给特定表,不能被其他表使用。)执行数据节点恢复还会压缩分区,因为所有记录都将从其他活动节点中插入到空分区中。

    DataMemory内存空间还包含UNDO信息:对于每个更新操作,未修改记录的副本将在DataMemory中分配。同时,在有序表索引中还存在对每个副本的引用。唯一哈希索引在唯一索引列更新时才会被更新,在这种情况下,索引表中将插入新的条目,并且在提交事务时删除旧条目。因此,对于使用集群的应用程序来说,也需要分配足够的内存来处理最大的事务。在任何情况下,执行一些大事务并不能比执行许多小事务更好,因为以下原因:

    • 大事务不比小事务快

    • 大事务增加了在事务失败时需要重复的操作数量

    • 大事务使用更多内存

    默认值为DataMemory98MB。最小值为1MB。没有最大大小限制,但实际上需要根据物理RAM的可用量和操作系统可以分配给任何进程的内存量来调整这个限制。32位操作系统通常限制每个进程到2-4GB;64位操作系统可以使用更多。对于大型数据库,可能更好地使用64位操作系统以此原因。

  • IndexMemory

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 0
    Range 1M - 1T
    Deprecated 是(在 NDB 7.6 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    参数IndexMemory已被弃用(将来可能会被删除),任何分配给IndexMemory的内存都将被分配到与DataMemory相同的池中,该池负责在内存中存储数据和索引。在 NDB 8.4 中,使用IndexMemory在集群配置文件中将触发管理服务器的警告。

    可以使用以下公式估算哈希索引的大小:

      size  = ( (fragments * 32K) + (rows * 18) )
              * fragment_replicas

    fragments是碎片数,fragment_replicas是碎片副本数(通常为2),rows是行数。如果表有100万行,8个碎片和2个碎片副本,则预计索引内存使用量可以按照以下方式计算:

      ((8 * 32K) + (1000000 * 18)) * 2 = ((8 * 32768) + (1000000 * 18)) * 2
      = (262144 + 18000000) * 2
      = 18262144 * 2 = 36524288 bytes = ~35MB

    有序索引的统计信息(当这些被启用时)将被存储在mysql.ndb_表中。由于该表具有哈希索引,这增加了索引内存使用量。给定有序索引的行数上限可以按照以下公式计算:

      sample_size= key_size + ((key_attributes + 1) * 4)
    
      sample_rows = IndexStatSaveSize
                    * ((0.01 * IndexStatSaveScale * log2(rows * sample_size)) + 1)
                    / sample_size

    在前面的公式中,key_是有序索引键的大小(以字节为单位),key_是有序索引键中的属性数目,rows是基础表中的行数。

    假设表t1有100万行,并且具有两个四字节整数的有序索引ix1。此外,假设IndexStatSaveSizeIndexStatSaveScale设置为默认值(32K和100,分别)。使用前两个公式,我们可以计算如下:

      sample_size = 8  + ((1 + 2) * 4) = 20 bytes
    
      sample_rows = 32K
                    * ((0.01 * 100 * log2(1000000*20)) + 1)
                    / 20
                    = 32768 * ( (1 * ~16.811) +1) / 20
                    = 32768 * ~17.811 / 20
                    = ~29182 rows

    因此,预期的索引内存使用量是2 * 18 * 29182 = ~1050550字节。

    该参数的最小值和默认值都是0(零)。

  • StringMemory

    Version (or later) NDB 8.4.0
    Type or units % or bytes
    Default 25
    Range 0 - 4294967039(0xFFFFFEFF)
    Restart Type

    系统重启:需要完全关闭和重新启动集群。 (NDB 8.4.0)

    该参数确定为字符串,如表名分配的内存量,并在config.ini文件中的[ndbd][ndbd default]部分指定。介于0100之间的值被解释为最大默认值的百分比,该值根据表数量、最大表名大小、最大.FRM文件大小、MaxNoOfTriggers、最大列名大小和默认列值大小计算而得。

    大于100的值被解释为字节数。

    默认值是25—that is, 25 percent of the default maximum.

    在大多数情况下,缺省值应该足够,但是当您有许多NDB表(1000或更多)时,可以出现Error 773Out of string memory, please modify StringMemory config parameter: Permanent error: Schema error,在这种情况下,您应该增加该值。25(25%)不太过分,应该防止在所有情况下出现此错误。

以下示例演示了对表的内存使用。考虑这个表定义:

CREATE TABLE example (
  a INT NOT NULL,
  b INT NOT NULL,
  c INT NOT NULL,
  PRIMARY KEY(a),
  UNIQUE(b)
) ENGINE=NDBCLUSTER;

对于每条记录,数据部分有12个字节, overhead 部分也有12个字节。没有可空列可以减少4个字节的overhead。此外,我们在列ab上创建了两个有序索引,每条记录约需要10个字节。基础表上还有一个主键哈希索引,占用每条记录约29个字节。唯一约束由一个独立的表实现,该表以b为主键,以a为列。这张其他表在example表中每条记录还需要29个字节的索引内存,以及8个字节的记录数据和12个字节的overhead。

因此,对于一百万条记录,我们需要58MB的索引内存来处理主键哈希索引和唯一约束。我们还需要64MB的基础表记录和唯一索引表记录,以及两个有序索引表记录。

可以看到,哈希索引占用了不少内存空间;然而,它们也提供了非常快速地访问数据的回报。此外,在NDB集群中它们还用于处理唯一约束。

当前,唯一分区算法只有哈希算法。因此,对于一般情况下,ordered indexes 无法用来处理唯一约束。

对于 both IndexMemoryDataMemory,需要注意的是总数据库大小是每个节点组的所有数据内存和索引内存之和。每个节点组用于存储复制信息,因此如果有四个节点,每个节点都有两个副本,那么就有两个节点组。因此,对于每个数据节点,总可用数据内存为2 × DataMemory

强烈建议将DataMemoryIndexMemory 设置为所有节点的相同值。数据分布在整个集群中,因此任何节点上的可用空间不能超过集群中的最小节点。

DataMemory 可以被更改,但是减少它可能会风险很高;这样可以轻易导致节点或整个 NDB 集群无法启动,因为内存空间不足。增加这些值应该是可接受的,但建议在软件升级时进行类似的升级,首先更新配置文件,然后重启管理服务器,最后逐个重启每个数据节点。

MinFreePct.  数据节点资源(包括DataMemory)中保留的比例(默认为5%),以确保数据节点在进行重启时不耗尽内存。可以使用MinFreePct数据节点配置参数(默认为5)进行调整。

Version (or later) NDB 8.4.0
Type or units 无符号
Default 5
Range 0 - 100
Restart Type

Node Restart: 需要对集群进行滚动重启。 (NDB 8.4.0)

更新操作不会增加索引内存的使用量。插入操作立即生效,但是直到事务提交才实际删除行。

事务参数。 我们接下来讨论的几个[ndbd]参数对系统中的并行事务数量和事务大小产生重要影响。MaxNoOfConcurrentTransactions 设置一个节点中可能的并行事务数量。MaxNoOfConcurrentOperations 设置可以同时在更新阶段或锁定状态的记录数量。

这两个参数(特别是MaxNoOfConcurrentOperations)可能是用户设置特定值而不是使用默认值的目标。默认值是为使用小事务的系统设置的,以确保这些事务不占用过多内存。

MaxDMLOperationsPerTransaction 设置在给定事务中可以执行的最大DML操作数量。

  • MaxNoOfConcurrentTransactions

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 4096
    Range 32 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    每个集群数据节点都需要为每个活动事务在集群中记录一个事务记录。协调事务的任务分布于所有数据节点中。集群中的总事务记录数等于任何给定节点中的事务数乘以集群中的节点数。

    事务记录被分配到 individual MySQL 服务器上。每个连接到 MySQL 服务器都需要至少一个事务记录,plus 每个访问该连接的表的额外事务对象。这意味着总的事务记录数在集群中的合理最小值可以用以下公式表示:

    TotalNoOfConcurrentTransactions =
        (maximum number of tables accessed in any single transaction + 1)
        * number of SQL nodes

    假设有10个SQL节点使用集群。一个涉及10个表的连接操作需要11个事务记录;如果在一个事务中有10个这样的连接操作,那么每个MySQL服务器就需要110个事务记录,总共需要110 * 10 = 1100个事务记录。每个数据节点可以预期处理TotalNoOfConcurrentTransactions / 数据节点数量的并发事务。对于一个拥有4个数据节点的NDB集群,这意味着在每个数据节点上设置MaxNoOfConcurrentTransactions为1100 / 4 = 275。在此外,您还应该确保单个节点组可以容纳所有并发事务,即每个数据节点的MaxNoOfConcurrentTransactions足够涵盖TotalNoOfConcurrentTransactions / 节点组数量的交易。如果这个集群只有一个节点组,那么MaxNoOfConcurrentTransactions应该设置为1100(与整个集群的并发事务总数相同)。

    此外,每个事务至少涉及一个操作;因此,设置MaxNoOfConcurrentTransactions的值始终不能超过MaxNoOfConcurrentOperations的值。

    这个参数必须在所有集群数据节点上设置相同的值。这是因为,当一个数据节点失败时, oldest surviving node 会重新创建失败节点中所有仍在进行的事务状态。

    可以使用滚动重启更改这个值,但是集群中的流量必须足够小,以便在更改期间不超过旧和新水平的交易量。

    默认值为4096。

  • MaxNoOfConcurrentOperations

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 32K
    Range 32 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    根据事务大小和数量调整该参数的值通常是一个好主意。当执行只涉及少量操作和记录的事务时,通常默认值足够。但是,当执行包含许多记录的大型事务时,需要将其值增加。

    每个更新集群数据的事务都保留记录,在事务协调器和实际更新节点中。这些记录包含回滚、锁队列等目的所需的状态信息。

    根据数据大小和事务数量调整该参数的值通常是一个好主意。对涉及少量操作和记录的事务,通常默认值足够。但是,对于涉及大量记录的事务,通常需要增加其值。

    每个事务更新集群数据时都会保留记录,这些记录在事务协调器和实际更新节点中都存在。这些记录包含回滚、锁队列等目的所需的状态信息。

    该参数应该设置为事务中同时更新记录的最小值,除以集群数据节点的数量。例如,在具有四个数据节点的集群中,预计可以处理一百万个并发更新事务,您应该将该值设置为1000000 / 4 = 250000。为了提供对故障的恢复能力,您应该将该参数设置为一个高 enough 的值,以便每个数据节点都可以处理其节点组的负载。换言之,您应该将该值设置为total number of concurrent operations / number of node groups。 (在只有一个节点组的情况下,这与整个集群的并发操作数相同。)

    由于每个事务至少涉及到一个操作,因此MaxNoOfConcurrentOperations的值应该总是大于或等于MaxNoOfConcurrentTransactions的值。

    读取查询也会创建操作记录。为了处理不完美的分布情况,每个节点中都分配了一些额外空间。

    当查询使用唯一哈希索引时,实际上每个事务记录中使用了两个操作记录。第一个记录表示索引表中的读取,而第二个记录处理基本表的操作。

    默认值为32768。

    该参数实际上可以单独配置两个值。第一个值指定了事务协调器中要放置的操作记录数量,第二个值指定了本地数据库中的操作记录数量。

    在一个八节点集群中执行了一个非常大的事务,需要事务协调器记录操作记录的数量与事务中涉及的读取、更新和删除操作的数量相同。但是,这些操作记录分布在所有八个节点上。因此,如果需要为一个非常大的事务配置系统,可以单独配置这两个部分。MaxNoOfConcurrentOperations 始终用于计算事务协调器部分中的操作记录数量。

    了解操作记录的内存需求也很重要,这些记录约占用 1KB。

  • MaxNoOfLocalOperations

    Version (or later) NDB 8.4.0
    Type or units integer
    Default UNDEFINED
    Range 32 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    默认情况下,这个参数被计算为1.1 × MaxNoOfConcurrentOperations。这适合有许多同时事务的系统,但这些事务都不是很大。如果需要处理一个非常大的事务,同时存在多个节点,那么可以通过明确指定这个参数来override默认值。

    这个参数已被弃用,可能在未来的NDB集群版本中被删除。此外,这个参数与TransactionMemory参数不兼容;如果您尝试在集群配置文件(config.ini)中同时设置这两个参数,管理服务器将无法启动。

  • MaxDMLOperationsPerTransaction

    Version (or later) NDB 8.4.0
    Type or units 操作(DML)
    Default 4294967295
    Range 32 - 4294967295
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数的值不能超过MaxNoOfConcurrentOperations设置的值。

事务临时存储 执行一个属于Cluster事务的语句时,下一组[ndbd]参数用于确定临时存储。所有记录在语句完成后被释放,集群等待提交或回滚。

这些参数的默认值对于大多数情况来说是足够的。但是,对于需要支持涉及大量行或操作的事务的用户可能需要增加这些值以启用系统中的更好并发性,而对应用程序要求较小事务的用户可以减少值以保存内存。

  • MaxNoOfConcurrentIndexOperations

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 8K
    Range 0 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对于使用唯一哈希索引的查询,在执行查询阶段还会使用另一个临时操作记录集。这参数设置了该池中的记录大小。因此,这个记录只在执行查询的一部分时被分配。一旦这个部分已经执行完毕,该记录就被释放。处理中止和提交的状态由正常操作记录来处理,其中池大小由参数MaxNoOfConcurrentOperations设置。

    该参数的默认值为8192。只有在极少数情况下,使用唯一哈希索引进行高并发查询时才需要增加这个值。使用较小的值是可能的,可以节省内存,如果DBA确定集群中不需要高并发查询。

    该参数已弃用,在未来的NDB集群版本中将被删除。此外,该参数与TransactionMemory参数不兼容;如果您尝试在集群配置文件(config.ini)中同时设置这两个参数,管理服务器将无法启动。

  • MaxNoOfFiredTriggers

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 4000
    Range 0 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    MaxNoOfFiredTriggers 的默认值是 4000,这对于大多数情况来说已经足够。在某些情况下,可以将其减少,如果 DBA 认为集群中的并行性需求不高。

    当对唯一哈希索引进行操作时,会创建一个记录。插入或删除表中具有唯一哈希索引的记录,或者更新包含在唯一哈希索引中的列都会在索引表中插入或删除一个记录。这个结果记录将用于表示等待原始操作完成的索引表操作。这项操作虽然短暂,但仍然可能需要大量记录在其池中,以应对具有多个并行写操作的基础表,其中包含了唯一哈希索引集。

    这个参数已经弃用,且将在未来的 NDB 集群版本中删除。此外,这个参数与TransactionMemory 参数不兼容;如果您尝试在集群配置文件 (config.ini) 中同时设置这两个参数,管理服务器将无法启动。

  • TransactionBufferMemory

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 1M
    Range 1K - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数影响的内存用于跟踪更新索引表和读取唯一索引时执行的操作。这些操作使用的内存用于存储键和列信息。这只有在非常少的情况下需要将该参数的值从默认值更改。

    TransactionBufferMemory 的默认值为 1MB。

    正常的读取和写入操作使用类似的缓冲区,其使用寿命甚至更短暂。编译时参数 ZATTRBUF_FILESIZE(在 ndb/src/kernel/blocks/Dbtc/Dbtc.hpp 中找到) 设置为 4000 × 128 字节(500KB)。类似的缓冲区用于键信息,ZDATABUF_FILESIZE(也在 Dbtc.hpp 中找到) 包含 4000 × 16 = 62.5KB 的缓冲空间。Dbtc 是处理事务协调的模块。

事务资源分配参数。以下列表中的参数用于在事务协调器(DBTC)中分配事务资源。将其中任何一个设置为默认值(0)将 dedication 25% 的总数据节点使用量的事务内存用于对应资源。实际可能的最大值通常受数据节点可用的内存限制;设置它们对数据节点的总内存分配没有影响。此外,您应该注意它们控制的是独立于MaxDMLOperationsPerTransactionMaxNoOfConcurrentIndexOperationsMaxNoOfConcurrentOperationsMaxNoOfConcurrentScansMaxNoOfConcurrentTransactionsMaxNoOfFiredTriggers的内部记录数。MaxNoOfLocalScans, 或TransactionBufferMemory(见事务参数事务临时存储)。

  • ReservedConcurrentIndexOperations

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    一个数据节点上同时执行的索引操作数量,拥有专用资源。

  • ReservedConcurrentOperations

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    一个数据节点上同时执行的操作数量,拥有专用资源在事务协调器中。

  • ReservedConcurrentScans

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    一个数据节点上同时进行的扫描数量,拥有专用资源。

  • ReservedConcurrentTransactions

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    一个数据节点上同时进行的事务数量,拥有专用资源。

  • ReservedFiredTriggers

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    一个 ndbd(DB) 节点上的触发器数量,拥有专门资源。

  • ReservedLocalScans

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    一个数据节点上的同时碎片扫描数量,拥有专门资源。

  • ReservedTransactionBufferMemory

    Version (or later) NDB 8.4.0
    Type or units 数字
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    每个数据节点分配的键和属性数据动态缓冲区空间(以字节为单位)。

  • TransactionMemory

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 0
    Range 0 - 16384G
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    Important

    有一些配置参数与TransactionMemory不兼容;不能同时设置这些参数和TransactionMemory,否则管理服务器将无法启动(见TransactionMemory不兼容的参数)。

    这个参数确定每个数据节点上的事务内存(以字节为单位)。设置事务内存的方式如下:

    • 如果TransactionMemory被设置,这个值将用于确定事务内存。

    • 否则,事务内存将像NDB 8.0之前一样计算。

    TransactionMemory不兼容的参数. 以下参数不能与TransactionMemory同时使用,因此已经弃用:

    在集群配置文件(config.ini)中设置了TransactionMemory时,明确地设置上述任何参数将阻止管理节点启动。

    有关 NDB 集群数据节点资源分配的更多信息,请见第25.4.3.13节,“Data Node Memory Management”

Scans and buffering. Dblqh模块(在ndb/src/kernel/blocks/Dblqh/Dblqh.hpp中)中,有一些[ndbd]参数影响读取和更新。这些包括ZATTRINBUF_FILESIZ,默认设置为10000 × 128字节(1250KB),以及ZDATABUF_FILE_SIZE,默认设置为10000*16字节(大致156KB)的缓冲空间。到目前为止,我们还没有收到用户反馈或自己的测试结果表明这两个编译时限制需要增加。

  • BatchSizePerLocalScan

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 256
    Range 1 - 992
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    Node Restart: 需要对集群进行

    该参数用于计算并发扫描操作所需的锁定记录数。

    已弃用。

    BatchSizePerLocalScanBatchSize在 SQL 节点中定义的相关联。

  • LongMessageBuffer

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 64M
    Range 512K - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这是个内部缓冲区,用于在节点之间传递消息。默认值为64MB。

  • 这个参数很少需要从默认值中更改。

    Version (or later) MaxFKBuildBatchSize
    Type or units NDB 8.4.0
    Default 整数
    Range 64
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    用于构建外键的最大扫描批量大小。将该参数设置的值增加可能会加速外键构建,但同时也会对 ongoing 交通产生更大的影响。

  • MaxNoOfConcurrentScans

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 256
    Range 2 - 500
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数用于控制集群中可以并行执行的扫描数量。每个事务协调器都可以处理为该参数定义的并行扫描数量。每个扫描查询都是对所有分区进行并行扫描。每个分区扫描使用节点上的一条扫描记录,记录数等于该参数值乘以节点数。集群应该能够从所有节点中同时执行MaxNoOfConcurrentScans个扫描。

    实际上,扫描是在两个情况下进行的。第一个情况是没有哈希或有序索引来处理查询,这时查询将执行完整表扫描。第二个情况是没有哈希索引来支持查询,但存在有序索引。在这种情况下,使用有序索引意味着执行并行范围扫描。顺序只保留在本地分区中,因此需要对所有分区进行索引扫描。

    MaxNoOfConcurrentScans的默认值是256。最大值是500。

  • MaxNoOfLocalScans

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 4 * MaxNoOfConcurrentScans * [# of data nodes] + 2
    Range 32 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    指定当许多扫描不完全并行化时的本地扫描记录数。当没有提供本地扫描记录数时,它将根据以下方式计算:

    4 * MaxNoOfConcurrentScans * [# data nodes] + 2

    该参数已弃用,可能在未来的 NDB 集群版本中删除。此外,该参数与TransactionMemory参数不兼容;如果您尝试在集群配置文件(config.ini)中同时设置这两个参数,管理服务器将拒绝启动。

  • MaxParallelCopyInstances

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 0
    Range 0 - 64
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数设置在节点重启或系统重启的复制阶段中使用的并行化。这个阶段是指当前正在启动的节点与已经具有最新数据的节点同步时,需要将已更改的记录从更新的节点复制到启动的节点。这时全并行可能会导致超载情况,所以MaxParallelCopyInstances提供了减少并行化的方法。该参数的默认值为0。这意味着实际并行化等于启动的节点和更新的节点中的LDM实例数量。

  • MaxParallelScansPerFragment

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 256
    Range 1 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    可以配置并行扫描的最大数量(TUP 扫描和 TUX 扫描),以便在执行大量并行扫描时充分利用未使用的 CPU,并提高性能。

  • MaxReorgBuildBatchSize

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 64
    Range 16 - 512
    Restart Type

    用于表分区重新组织的最大扫描批量大小。将该参数值设置为更高可能会加速重新组织,但也会对正在进行的流量产生更大的影响。

  • MaxUIBuildBatchSize

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 64
    Range 16 - 512
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    用于构建唯一键的最大扫描批处理大小。将该参数值设置为更高可能会加速这种构建,但同时也会对正在进行的流量产生更大的影响。

MaxAllocate

Version (or later) NDB 8.4.0
Type or units 无符号
Default 32M
Range 1M - 1G
Deprecated 是(在 NDB 8.0 中)
Restart Type

节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

该参数在 NDB 集群的 older 版本中使用,但在 NDB 8.4 中无效。它已被弃用,并且将在未来的版本中删除。

NDB 为数据节点之间的通信分配多个传输器。可以通过设置合适的NodeGroupTransporters参数来影响这些传输器的数量,该参数自 NDB 8.4.0 起引入。

NodeGroupTransporters

Version (or later) NDB 8.4.0
Type or units integer
Default 0
Range 0 - 32
Restart Type

Node Restart: 需要对集群进行滚动重启。 (NDB 8.4.0)

该参数确定同一节点组中的节点之间使用的传输器数量。默认值(0)意味着使用的传输器数量与 LDM 节点的数量相同。这对于大多数用例应该足够;因此,很少需要将其从默认值更改。

NodeGroupTransporters设置为高于 LDM 线程或 TC 线程数量( whichever is higher)的数字,会导致 NDB 使用这两个线程的最大数量。这意味着设置的值大于这个数字实际上是无效的。

DefaultHashMapSize

Version (or later) NDB 8.4.0
Type or units LDM线程
Default 240
Range 0 - 3840
Restart Type

节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

该参数的原始意图是 facilitiate 升级和降级到非常老版本的 release,具有不同默认哈希映射大小。这在从 NDB 集群 7.3(或更高)升级到后续版本时不是问题。

在线减少该参数值,在使用DefaultHashMapSize等于3840的表已经创建或修改后,不是当前支持的操作。

日志记录和检查点。以下[ndbd]参数控制日志和检查点行为。

  • FragmentLogFileSize

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 16M
    Range 4M - 1G
    Restart Type

    初始节点重启:需要对集群进行滚动重启,每个数据节点都必须使用--initial重新启动。 (NDB 8.4.0)

    设置该参数可以直接控制 redo 日志文件的大小。这在 NDB 集群处于高负载情况下,无法快速关闭分片日志文件,而需要打开新的分片日志文件时非常有用(最多只能同时打开 2 个分片日志文件);增加分片日志文件的大小可以给集群更多时间来打开每个新分片日志文件。该参数的默认值为 16M。

    有关分片日志文件的更多信息,请参见NoOfFragmentLogFiles的描述。

  • InitialNoOfOpenFiles

    Version (or later) NDB 8.4.0
    Type or units 文件
    Default 27
    Range 20 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数设置了对打开文件的初始内部线程数。

    默认值为27。

  • InitFragmentLogFiles

    Version (or later) NDB 8.4.0
    Type or units [查看值]
    Default 稀疏
    Range 稀疏,完整
    Restart Type

    初始节点重启:需要对集群进行滚动重启;每个数据节点都必须使用--initial选项重启。 (NDB 8.4.0)

    默认情况下,当数据节点进行初始启动时,碎片日志文件将以稀疏方式创建—that is,取决于操作系统和文件系统的使用,不一定所有字节都写入磁盘。但是,可以通过该参数来override这个行为,并强制所有字节都被写入,regardless of the platform and file system type being used。InitFragmentLogFiles 可以取两个值:

    • SPARSE. 碎片日志文件以稀疏方式创建。这是默认值。

    • FULL. 强制所有字节的碎片日志文件写入磁盘。

    根据您的操作系统和文件系统,设置InitFragmentLogFiles=FULL可能有助于消除redo日志中的I/O错误。

  • EnablePartialLcp

    Version (or later) NDB 8.4.0
    Type or units boolean
    Default true
    Range ...
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    true,启用部分本地检查点:这意味着每个LCP只记录完整数据库的部分内容,以及自上一个LCP以来更改的行记录;如果没有行更改,则LCP仅更新LCP控制文件而不更新任何数据文件。

    如果EnablePartialLcp被禁用(false),每个LCP只使用单个文件并写入完整检查点;这需要最少的磁盘空间用于LCP,但增加了每个LCP的写入负载。默认值为启用(true)。部分LCPS所占用的空间比例可以通过RecoveryWork配置参数进行修改。

    关于完整和部分LCP文件和目录的更多信息,请见NDB Cluster Data Node File System Directory

    将该参数设置为false也禁用了自适应LCP控制机制的磁盘写入速度计算。

  • LcpScanProgressTimeout

    Version (or later) NDB 8.4.0
    Type or units
    Default 180
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    本地检查点碎片扫描 watchdog 定期检查每个碎片扫描是否有进度,如果在给定的时间内没有进度,则关闭节点。这段时间可以使用LcpScanProgressTimeout数据节点配置参数设置,设置本地检查点碎片扫描 watchdog 可以等待的最大时间。

    默认值为 60 秒(提供与之前版本的兼容性)。将该参数设置为 0 将禁用本地检查点碎片扫描 watchdog altogether。

  • MaxNoOfOpenFiles

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default 0
    Range 20 - 4294967039 (0xFFFFFEFF)
    Restart Type

    该参数设置了为打开文件分配的内部线程的上限。任何需要更改此参数的情况都应该报告为错误

    默认值是 0。然而,这个参数可以设置的最小值是 20。

  • MaxNoOfSavedMessages

    此参数设置错误日志中写入的最大错误数,以及在覆盖现有跟踪文件之前保留的最大跟踪文件数。当节点由于某种原因崩溃时,会生成跟踪文件。

    默认值为 25,这会将这些最大值设置为 25 条错误消息和 25 个跟踪文件。

  • MaxLCPStartDelay

    Version (or later) NDB 8.4.0
    Type or units seconds
    Default 0
    Range 0 - 600
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    在并行数据节点恢复中,只有表数据实际被复制和同步在并行中;元数据,如字典和检查点信息的同步是以串行方式进行的。在此外,恢复字典和检查点信息不能与本地检查点的执行同时进行。这意味着,在同时启动或重启多个数据节点时,数据节点可能需要等待本地检查点的执行,这可能会导致节点恢复时间延长。

    可以强制在本地检查点中插入延迟,以允许更多(可能是所有)数据节点完成元数据同步;一旦每个数据节点的元数据同步完成,所有数据节点都可以并行恢复表数据,即使本地检查点正在执行。要强制这种延迟,请设置MaxLCPStartDelay,该参数确定集群可以等待多少秒开始本地检查点,而数据节点继续同步元数据。这个参数应该在config.ini文件的[ndbd default]部分设置,以便所有数据节点都使用相同的值。最大值为600;默认值为0。

  • NoOfFragmentLogFiles

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 16
    Range 3 - 4294967039 (0xFFFFFEFF)
    Restart Type

    初始节点重启:需要对集群进行滚动重启,每个数据节点都必须使用--initial选项重启。 (NDB 8.4.0)

    初始节点重启:需要对集群进行滚动重启,每个数据节点都必须使用--initial选项重启。 (NDB 8.4.0)

    该参数设置节点的 REDO 日志文件数量,并因此分配给 REDO 记录的空间量。由于 REDO 日志文件以环形组织,因此首个和最后一个日志文件(有时称为“头”“尾”日志文件)不能相互靠近。当这两个日志文件接近时,节点将开始中止所有更新事务,因为缺乏新日志记录的空间。

    This parameter sets the number of REDO log files for the node, and thus the amount of space allocated to REDO logging. Because the REDO log files are organized in a ring, it is extremely important that the first and last log files in the set (sometimes referred to as the head and tail log files, respectively) do not meet. When these approach one another too closely, the node begins aborting all transactions encompassing updates due to a lack of room for new log records.

    直到该日志记录被插入以来,完成了两个所需的本地检查点后,该REDO日志记录才会被删除。checkpointing频率由本章其他地方讨论的配置参数确定。

    默认参数值为16,这意味着默认情况下将创建16个4个16MB文件的集合,总共1024MB。使用FragmentLogFileSize参数可以配置单个日志文件的大小。在需要大量更新的情况下,可能需要将NoOfFragmentLogFiles参数设置为高达300或更高,以提供足够的REDO日志空间。

    如果checkpointing速度慢,数据库写入操作非常频繁,使得日志文件满了且无法将日志尾部移动到前面,而这可能会危及恢复,这时所有更新事务都会被abort,返回内部错误代码410(Out of log file space temporarily)。这种情况直到完成一个检查点并将日志尾部移到前面为止。

    Important

    这个参数不能在运行时更改;您必须使用--initial重新启动节点。如果您想更改所有数据节点的值,请使用滚动式节点重启(使用--initial启动每个数据节点)。

  • RecoveryWork

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 60
    Range 25 - 100
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    LCP 文件存储空间占用百分比。这参数只有在EnablePartialLcp为 true 时才生效,即只有当局部检查点部分启用时才有效。较高的值意味着:

    • 每个 LCP 写入的记录数少,LCPs 占用的空间更多

    • 重启时需要更多工作

    RecoveryWork 的较低值意味着:

    • 每个 LCP 写入的记录数多,但在磁盘上占用的空间少。

    • 重启时需要更少工作,从而实现更快的重启,但是在正常操作中需要更多工作

    例如,将RecoveryWork设置为60意味着LCP的总大小大约是数据checkpoint的大小的1+0.6=1.6倍。这意味着在恢复阶段,需要比使用完整检查点时多做60%的工作。 (这在其他restart阶段中被补偿,以至于使用部分LCP的restart总体仍然比使用完整LCP的restart快.)为了不填满redo日志,需要在checkpoint期间写入数据变化率的1+(1/RecoveryWork)倍—因此,当RecoveryWork=60时,需要写入大约2.67倍的变化率。在其他字中,如果变化率为10 MByte每秒,checkpoint需要写入大约26.7 MByte每秒。

    RecoveryWork设置为40意味着只需要LCP总大小的1.4倍(因此恢复阶段需要10到15%少时间。在这种情况下,checkpoint写入率是变化率的3.5倍。

    NDB源分布包括一个模拟LCP的测试程序。lcp_ simulator.cc可以在storage/ndb/src/kernel/blocks/backup/中找到。要在Unix平台上编译和运行它,执行以下命令:

    $> gcc lcp_simulator.cc
    $> ./a.out

    这个程序除了依赖stdio.h外,没有其他依赖项,也不需要连接到 NDB 集群或 MySQL 服务器。默认情况下,它模拟 300 个 LCP(每个 LCP 包含插入、更新和删除操作),并在每个 LCP 完成后报告 LCP 的大小。你可以通过修改源代码中的recovery_workinsert_workdelete_work的值来改变模拟结果,并重新编译。更多信息,请查看程序的源代码。

  • InsertRecoveryWork

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 40
    Range 0 - 70
    Restart Type

    Node Restart: 需要对集群进行Node Restart: 需要对集群进行

    插入行的百分比,用于RecoveryWork。高值增加本地检查点中的写操作数,减少LCP的总大小。低值减少LCP中的写操作数,但结果是LCP占用更多空间,这意味着恢复时间更长。这参数只有在EnablePartialLcp为真时才生效,即只有当部分本地检查点启用时才有效。

  • EnableRedoControl

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default true
    Range ...
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    启用自适应检查点速度,以控制redo日志使用。

    当启用(默认),EnableRedoControl 允许数据节点在写入LCP到磁盘时拥有更大的灵活性。具体来说,启用这个参数意味着可以使用更高的写入速度,以便更快地完成LCP和清理redo日志,从而减少恢复时间和磁盘空间需求。这项功能允许数据节点更好地利用现代固态存储设备和协议(如固态驱动器(SSDs)使用非易失性记忆体表达(NVMe))提供的更高I/O速度和更大带宽。

    NDB在使用传统硬盘(HDD)的系统上部署时,如果I/O或带宽受到限制,EnableRedoControl机制可能会导致I/O子系统饱和,增加数据节点输入输出等待时间。在特定情况下,这可能会导致NDB磁盘数据表空间或日志文件组与数据节点LCP和redo日志文件共享同一个受限I/O子系统的问题,例如节点或集群故障由于GCP停止错误。将EnableRedoControl设置为false以在这种情况下禁用它。同时,将EnablePartialLcp设置为false也将禁用自适应计算。

Metadata objects. 下一个[ndbd]参数集定义了元数据对象池大小,用于定义索引、事件和复制之间的最大属性数、表、索引和触发器对象数量。

Note

这些参数仅供集群的建议,任何未指定的将回退到显示的默认值。

  • MaxNoOfAttributes

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 1000
    Range 32 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数设置了集群中可以定义的建议最大属性数量;像MaxNoOfTables一样,它不是硬上限。

    (在更早的 NDB 集群版本中,这个参数有时被视为某些操作的硬限制。这可能会导致 NDB 集群复制问题,当可以创建更多表时,但不能被复制,或者在某些情况下无法创建超过 MaxNoOfAttributes 属性。)

    默认值为 1000,minimum 可以是 32,maximum 是 4294967039。每个属性在每个节点上占用约 200 字节的存储空间,因为所有元数据都完全复制到服务器上。

    在设置MaxNoOfAttributes时,需要事先预备可能在将来执行的ALTER TABLE语句。这是因为在对Cluster表执行ALTER TABLE操作时,使用了原表的3倍属性数量,因此建议允许双倍这个数量。例如,如果NDB Cluster表具有最多属性(greatest_number_of_attributes)为100个,那么MaxNoOfAttributes的初始值可以设置为6 * greatest_number_of_attributes = 600.

    您还应该估算每个表的平均属性数量,然后乘以MaxNoOfTables。如果这个值大于前面paragraph中获得的值,您应该使用较大的值。

    假设您可以创建所有所需的表格无问题,您也应该验证这个数字是否足够,通过尝试实际ALTER TABLE语句后配置参数。如果这不成功,请增加MaxNoOfAttributes的值,直到可以成功测试。

  • MaxNoOfTables

    Version (or later) NDB 8.4.0
    Type or units 整数
    Default 128
    Range 8 - 20320
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对每个表和每个唯一哈希索引在集群中分配一个表对象。这参数设置了整个集群的建议最大表对象数目,像MaxNoOfAttributes一样,不是硬性上限。

    (在较早的 NDB 集群版本中,这个参数有时被视为某些操作的硬限制,这导致了 NDB 集群复制问题,当可能创建更多表格而不能被复制时,或者在某些情况下无法创建超过MaxNoOfTables 表格时会出现混淆。)

    对于每个具有BLOB数据类型的属性,-extra 表将用来存储大多数BLOB数据。这些表也必须在定义总表数量时被考虑。

    这个参数的默认值是 128。最小值是 8,最大值是 20320。每个表对象约占用 20KB 的存储空间。

    Note

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes的总和不能超过232 − 2(4294967294)。

  • MaxNoOfOrderedIndexes

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 128
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对于每个有序索引在集群中,每个对象都被分配,以描述正在被索引的内容及其存储段。默认情况下,每个定义的索引也定义了一个有序索引。每个唯一索引和主键都同时具有有序索引和哈希索引。MaxNoOfOrderedIndexes 设置了系统中可以同时使用的有序索引总数。

    该参数的默认值是 128。每个索引对象占用大约 10KB 的数据在每个节点上。

    Note

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 的总和不能超过 232 − 2 (4294967294)。

  • MaxNoOfUniqueHashIndexes

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 64
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对于每个唯一索引(不是主键),将分配一个特殊表,该表映射唯一键到被索引表的主键。默认情况下,对于每个唯一索引还定义了有序索引。如果想防止这种行为,您必须在定义唯一索引时指定USING HASH选项。

    默认值为 64。每个索引约占用 15KB 的存储空间。

    Note

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes的总和不能超过2^32 - 2(4294967294)。

  • MaxNoOfTriggers

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 768
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    内部更新、插入和删除触发器为每个唯一哈希索引分配。 (这意味着对每个唯一哈希索引创建了三个触发器对象。)然而,有序索引只需要单个触发器对象。备份也使用三个触发器对象来处理每个正常表。

    集群之间的复制还使用内部触发器。

    这个参数设置了集群中的最大触发器对象数。

    默认值为768。

  • MaxNoOfSubscriptions

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    每个NDB表在 NDB 集群中都需要在 NDB 内核中订阅。对于某些 NDB API 应用程序,可能需要或有必要更改这个参数。但是,对于正常使用 MySQL 服务器作为 SQL 节点时,没有任何需要这样做的需求。

    MaxNoOfSubscriptions 的默认值为 0,这被视为等同于MaxNoOfTables。每个订阅占用 108 字节。

  • MaxNoOfSubscribers

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    当使用 NDB 集群复制时,这个参数才是有趣的。默认值为 0, treated as 2 * MaxNoOfTables + 2 * [API 节点数量]。对于每两个 MySQL 服务器(一个作为 replication 源,另一个作为副本),每个表都有一个订阅,每个订阅使用 16 字节的内存。

    在使用环形复制、多源复制和其他涉及更多于 2 个 MySQL 服务器的复制设置时,您应该将这个参数设置为 replication 中包含的 mysqld 进程数量(这通常,但不是总是,等于集群数量)。例如,如果您有一个环形复制设置,使用三个 NDB 集群,每个集群都连接一个 mysqld 进程,并且每个进程都作为源和副本,您应该将 MaxNoOfSubscribers 设置为 3 * MaxNoOfTables

    更多信息,请见第 25.7 节,“NDB 集群复制”

  • MaxNoOfConcurrentSubOperations

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default 256
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数设置了集群中所有 API 节点同时可以执行的操作数量上限。默认值(256)对于正常操作通常足够,可能需要在有许多 API 节点,每个节点都执行高并发操作的情况下进行调整。

布尔参数。NDB 集群的数据节点行为也受影响于一组以 boolean 值设置的[ndbd]参数。这些参数可以每个被指定为TRUE,通过将其设置为1Y,或者指定为FALSE,通过将其设置为0N

  • CompressedLCP

    Version (or later) NDB 8.4.0
    Type or units 布尔
    Default false
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    将该参数设置为1会导致本地检查点文件被压缩。使用的压缩算法等同于gzip --fast,可以将数据节点存储未压缩检查点文件所需空间减少50%或更多。启用压缩LCP可以单独对每个数据节点启用,也可以对所有数据节点启用(通过在config.ini文件的[ndbd default]部分设置该参数)。

    Important

    不能将压缩的本地检查点恢复到不支持该特性的MySQL集群中。

    默认值为0(禁用)。

  • CrashOnCorruptedTuple

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default true
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    当该参数启用时(默认),它强制数据节点在遇到损坏的元组时关闭。

  • 无盘

    Version (or later) NDB 8.4.0
    Type or units true|false (1|0)
    Default false
    Range true, false
    Restart Type

    初始系统重启:需要对集群进行完全关闭,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    可以将 NDB 集群表指定为无盘ndbd

    Important

    启用该特性将使整个集群以磁盘模式操作。

    在启用该特性时,NDB 集群在线备份将被禁用。此外,集群的部分启动不可能。

    Diskless 默认处于禁用状态。

  • EncryptedFileSystem

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default 0
    Range 0 - 1
    Restart Type

    Initial Node Restart: 需要对集群进行滚动重启,每个数据节点都必须使用--initial重新启动。 (NDB 8.4.0)

    加密 LCP 和表空间文件,包括undo日志和redo日志。默认禁用(0),设置为1以启用。

    Important

    启用文件系统加密时,您必须在启动数据节点时使用其中之一选项提供密码:--filesystem-password--filesystem-password-从标准输入。否则,数据节点无法启动。

    更多信息,请见第25.6.14节,“NDB 集群文件系统加密”

  • LateAlloc

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 1
    Range 0 - 1
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    在与管理服务器建立连接后分配内存给该数据节点。默认启用。

  • LockPagesInMainMemory

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 2
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    在一些操作系统中,包括 Solaris 和 Linux,它可以锁定进程到内存中,以避免将其交换到磁盘。这可以用来帮助确保集群的实时特性。

    这个参数接受整数值012,它们按照以下列表所示进行操作:

    • 0:禁用锁定。这是默认值。

    • 1:在分配进程内存后执行锁定。

    • 2:在分配进程内存前执行锁定。

    如果操作系统不允许非特权用户锁定页面,那么使用这个参数的数据节点进程可能需要以系统 root 运行。 (LockPagesInMainMemory 使用 mlockall 函数。从 Linux 内核 2.6.9 起,非特权用户可以锁定内存,以限制为 max locked memory。更多信息,请见 ulimit -lhttp://linux.die.net/man/2/mlock)。

    Note

    在较早的 NDB 集群版本中,这个参数是一个布尔值。0false 是默认设置,禁用锁定。1true 启用锁定进程的内存分配后。 NDB 集群 8.4 将truefalse 作为该参数值的错误处理。

    Important

    从 glibc 2.10 开始,glibc 使用每个线程的arena来减少共享池中的锁定竞争,这消耗了实际内存。在一般情况下,数据节点进程不需要每个线程的arena,因为它在启动后不再执行任何内存分配操作。(这不同之处似乎对性能没有太大影响。)

    glibc 的行为旨在通过环境变量MALLOC_ARENA_MAX来配置,但是prior to glibc 2.16 中的bug使得该变量不能设置为小于8,因此无法回收浪费的内存。(Bug #15907219;请参阅http://sourceware.org/bugzilla/show_bug.cgi?id=13137以获取更多关于这个问题的信息。)

    一个可能的解决方案是使用环境变量LD_PRELOAD来预加载一个jemalloc内存分配库,以取代 glibc 提供的库。

  • ODirect

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    启用该参数使NDB尝试使用O_DIRECT写入LCP、备份和redo日志,通常降低kswapd和CPU使用率。在使用 NDB 集群时,在 Linux 上启用ODirect如果您正在使用 2.6 或更高版本的内核。

    ODirect默认禁用。

  • ODirectSyncFlag

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    当该参数启用时,redo日志写入将以每个完成的文件系统写入作为对fsync的调用进行处理。如果至少满足以下条件之一,该参数的设置将被忽略:

    • ODirect 未启用。

    • InitFragmentLogFiles 设置为 SPARSE

    默认禁用。

  • RequireCertificate

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range ...
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    节点重启:如果该参数设置为 true,数据节点将在 TLS 搜索路径中查找密钥和有效的当前证书,如果找不到它们,则不能启动。

  • RequireTls

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range ...
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    如果将该参数设置为true,对这个数据节点的连接必须使用 TLS 进行身份验证。

  • RestartOnErrorInsert

    Version (or later) NDB 8.4.0
    Type or units 错误代码
    Default 2
    Range 0 - 4
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个功能只有在构建调试版本时可用,在测试中可以将错误插入到代码块的执行中。

    这个功能默认禁用。

  • StopOnError

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default 1
    Range 0, 1
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数指定了数据节点进程在遇到错误情况时是否退出或自动重启。

    该参数的默认值为1,这意味着默认情况下,错误会导致数据节点进程停止。

    当遇到错误且StopOnError为0时,数据节点进程将被重启。

    MySQL 集群管理器的用户应注意,在StopOnError等于1时,这会防止 MySQL 集群管理器代理在其自己的重启和恢复后重启任何数据节点。请参阅Linux 上的 Agent 启动和停止,了解更多信息。

  • UseShm

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    在该数据节点和 API 节点(运行于同一主机)之间启用共享内存连接。设置为 1 可以启用。

有多个[ndbd]参数,用于指定集群数据节点中的超时和间隔时间。绝大多数超时值都是以毫秒为单位的。只有在特殊情况下才会出现其他单位的超时值。

  • TimeBetweenWatchDogCheck

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 6000
    Range 70 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数可以轻松地更改,以适应实验或本地条件。它可以在每个节点上指定,但是似乎没有太多的理由这样做。

    默认超时时间为 6000 毫秒(6 秒)。

  • TimeBetweenWatchDogCheckInitial

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 6000
    Range 70 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数类似于TimeBetweenWatchDogCheck,except that TimeBetweenWatchDogCheckInitial控制在早期启动阶段内存分配时执行检查之间的时间间隔。

    默认超时时间为 6000 毫秒(6 秒)。

  • StartPartialTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 30000
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数指定了集群等待所有数据节点启动完成之前,初始化程序被调用所需的时间。这一超时用于尽量避免部分集群启动。

    在进行初始启动或初始重启集群时,这个参数将被覆盖。

    默认值是 30000 毫秒(30 秒)。0 表示禁用超时,在这种情况下,集群可能只在所有节点都可用时才能启动。

  • StartPartitionedTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    如果集群在等待StartPartialTimeout毫秒后仍可能处于分区状态,集群将等待这个超时期限过期。如果StartPartitionedTimeout设置为0,集群将等待不定期限(232−1 ms,约49.71天)。

    这个参数在执行初始启动或初始重启集群时被覆盖。

  • StartFailureTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 0
    Range 0 - 4294967039(0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群执行滚动重启。(NDB 8.4.0)

    如果数据节点在指定时间内未完成启动序列,节点启动失败。将这个参数设置为0(默认值),表示不应用数据节点超时。

    对于非零值,这个参数以毫秒为单位。对于包含大量数据的数据节点,这个参数应该增加。例如,在包含数 GB 数据的数据节点中,可能需要一个长达 10-15 分钟(即 600000 到 1000000 毫秒)的时间来执行节点重启。

  • StartNoNodeGroupTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 15000
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群执行滚动重启。 (NDB 8.4.0)

    当数据节点配置了Nodegroup = 65536时,视为未分配到任何节点组。当这样做时,集群等待StartNoNodeGroupTimeout毫秒,然后将这些节点视为传递给--nowait-nodes选项的列表,并开始。默认值是15000(即管理服务器等待 15 秒)。将这个参数设置为0意味着集群等待无限时间。

    StartNoNodegroupTimeout 必须在集群中的所有数据节点上相同;因此,您应该总是将其设置在 [ndbd default] 部分的 config.ini 文件中,而不是为单个数据节点。

    请参阅第25.6.7节,“在线添加NDB集群数据节点”,了解更多信息。

  • HeartbeatIntervalDbDb

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 5000
    Range 10 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    心跳机制是发现失败节点的主要方法之一。这参数确定了心跳信号发送的频率和期望接收的心跳信号的频率。心跳信号不能被禁用。

    如果连续四次心跳间隔都没有收到信号,那么该节点将被宣布死亡。因此,通过心跳机制发现故障的最大时间是五个心跳间隔的总和。

    默认心跳间隔为5000毫秒(5秒)。这个参数不能大幅更改,并且在不同节点之间 shouldn't vary widely。如果一个节点使用5000毫秒,而监控它的节点使用1000毫秒,那么显然该节点很快被宣布死亡。这参数可以在在线软件升级期间更改,但只能以小步骤进行。

    请参见网络通信和延迟,以及ConnectCheckIntervalDelay配置参数的描述。

  • HeartbeatIntervalDbApi

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 1500
    Range 100 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    每个数据节点向 MySQL 服务器(SQL 节点)发送心跳信号,以确保保持联系。如果 MySQL 服务器在规定时间内无法发送心跳信号,它将被宣布“死亡”,在这种情况下,所有正在进行的事务将被完成,并释放所有资源。 SQL 节点不能重新连接,直到前一个 MySQL 实例启动的所有活动都已完成。用于确定此判定的三个心跳标准与HeartbeatIntervalDbDb中描述的一致。

    默认间隔为 1500 毫秒(1.5 秒)。这个间隔可以在个体数据节点之间发生变化,因为每个数据节点独立地监控连接到它的 MySQL 服务器。

    更多信息,请见网络通信和延迟

  • HeartbeatOrder

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 0
    Range 0 - 65535
    Restart Type

    System Restart: 需要完整地关闭和重新启动集群。 (NDB 8.4.0)

    数据节点之间以环形方式发送心跳信号,每个数据节点监控前一个节点。如果某个数据节点未检测到心跳信号,它将宣布前一个数据节点“死亡”(即不再由集群可访问)。确定数据节点死亡的判定是全球性的,即一旦数据节点被宣布死亡,它将被所有集群节点视为死亡。

    在不同的主机上运行的数据节点之间可能存在心跳信号传输速度太慢的问题(例如,由于heartbeat间隔太短或临时连接问题),导致数据节点被宣布死亡,即使该节点仍然可以作为集群的一部分。。

    在这种情况下,心跳信号之间的顺序可能会影响某个数据节点是否被宣布死亡。如果这种宣布是非必要的,这可能会导致节点组的无谓丢失,从而导致集群失败。

    考虑一个设置,其中有4个数据节点A、B、C和D运行在2个主机计算机host1host2上,并且这些数据节点组成2个节点组,如下表所示:

    表25.9:四个数据节点A、B、C、D运行在两个主机计算机host1、host2上,每个数据节点属于两个节点组之一。

    Node Group Nodes Running on host1 Nodes Running on host2
    Node Group 0: Node A Node B
    Node Group 1: Node C Node D

    假设心跳信号以顺序A->B->C->D->A发送。在这种情况下,主机之间的心跳丢失导致节点B将节点A宣布死亡,节点C将节点B宣布死亡。这 ultimately 导致 Node Group 0 失败,从而导致集群崩溃。反之,如果心跳信号顺序为 A->B->D->C->A(其他条件保持不变),那么心跳丢失将导致节点A和D被宣布死亡;在这种情况下,每个节点组都有一个存活的节点,集群可以幸免。

    HeartbeatOrder 配置参数使得心跳传输顺序可由用户配置。 HeartbeatOrder 的默认值为零;在所有数据节点上使用默认值将使心跳传输顺序由 NDB 决定。如果使用了该参数,它必须在每个数据节点中设置一个非零值(最大65535),且每个数据节点的值必须唯一;这将导致心跳传输从数据节点到数据节点按照它们的 HeartbeatOrder 值从低到高进行(然后是从具有最高 HeartbeatOrder 值的数据节点到具有最低值的数据节点,完成循环)。这些值不需要连续。例如,要强制心跳传输顺序为 A->B->D->C->A,如下所示,可以将 HeartbeatOrder 值设置为以下内容:

    表25.10:强制心跳传输顺序为 A->B->D->C->A的 HeartbeatOrder 值。

    Node HeartbeatOrder Value
    A 10
    B 20
    C 30
    D 25

    要在运行的 NDB 集群中更改心跳传输顺序,您必须首先在集群的全局配置文件(config.ini)中为每个数据节点设置HeartbeatOrder。要使更改生效,您必须执行以下之一:

    • 完全关闭整个集群,然后重新启动。

    两次顺序重启集群。所有节点都必须在两个顺序重启中以相同的顺序重新启动

  • ConnectCheckIntervalDelay

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 0
    Range 0 - 4294967039(0xFFFFFEFF)
    Restart Type

    节点重启:需要节点重启:需要

    该参数在数据节点之间启用连接检查,检查失败的心跳检查后5个时间间隔,每个间隔最长为HeartbeatIntervalDbDb毫秒。

    在这些时间间隔内,如果数据节点继续无法响应,且在ConnectCheckIntervalDelay毫秒的时间间隔内,则该数据节点被认为是可疑的,并在两个这样的时间间隔后被认为已经死亡。这可以在存在延迟问题的设置中非常有用。

    该参数的默认值为0(禁用)。

  • TimeBetweenLocalCheckpoints

    Version (or later) NDB 8.4.0
    Type or units 以2为底的4字节单词数量
    Default 20
    Range 0 - 31
    Restart Type

    此参数是一个例外,它没有指定在开始新的本地检查点之前要等待的时间;相反,它用于确保在更新相对较少的集群中不执行本地检查点。在大多数具有高更新率的集群中,很可能在上一个本地检查点完成后立即启动一个新的本地检查点。

    自上一个本地检查点开始执行的所有写操作的大小被添加。这参数也异常,因为它是指定为4字节单词的base-2对数,所以默认值20表示4MB(4 × 220)的写操作,21将意味着8MB,以此类推,直到最大值31,即8GB的写操作。

    集群中的所有写操作被添加起来。将TimeBetweenLocalCheckpoints设置为6或更少意味着,独立于集群的工作负载,不会中断地执行本地检查点。

  • TimeBetweenGlobalCheckpoints

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 2000
    Range 20 - 32000
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    当事务被提交时,它将在所有镜像数据的节点中在主内存中提交。但是,事务日志记录不会作为提交的一部分被刷新到磁盘。这种行为的原因是,在至少两个独立主机上安全地提交事务应该满足合理的持久性标准。

    在确保最坏的情况下(整个集群崩溃)被正确处理时,也非常重要。为了 guarantee 这种情况的发生,所有在给定时间间隔内进行的事务都将被放入全局检查点中,这可以被认为是一个已经flush到磁盘上的已提交事务集合。在其他字面上,作为 commit 过程的一部分,事务将被放入一个全局检查点组中。后来,这个组的日志记录将被flush到磁盘,然后整个组的事务将在集群中的所有计算机上安全地commit到磁盘。

    当使用固态硬盘(特别是使用 NVMe 的)与 Disk Data 表时,我们建议您减少这个值。在这种情况下,您还应该确保MaxDiskDataLatency被设置为合适的级别。

    这个参数定义了全局检查点之间的间隔。默认是 2000 毫秒。

  • TimeBetweenGlobalCheckpointsTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 120000
    Range 10 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数定义了全局检查点之间的最小超时时间。默认值为120000毫秒。

  • TimeBetweenEpochs

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 100
    Range 0 - 32000
    Restart Type

    Node Restart: 需要对集群进行滚动重启(NDB 8.4.0)

    该参数定义了 NDB 集群复制的同步epochs之间的间隔。默认值为100毫秒。

    TimeBetweenEpochs 是 NDB 集群复制实现的一部分,可以用于改进 NDB 集群复制的性能。

  • TimeBetweenEpochsTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 0
    Range 0 - 256000
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数定义了 NDB 集群复制的同步epochs超时时间。如果节点在该时间内无法参与全局检查点,节点将被关闭。默认值为 0,即超时时间被禁用。

    TimeBetweenEpochsTimeout 是 NDB 集群复制的实现的一部分,可以用于改进 NDB 集群复制的性能。

    每当 GCP 保存时间超过 1 分钟或 GCP 提交时间超过 10 秒时,这个参数的当前值和警告将被写入集群日志。

    将这个参数设置为零将禁用由超时引起的 GCP 停止,包括保存超时、提交超时或两者。这个参数的最大可能值是 256000 毫秒。

  • MaxBufferedEpochs

    Version (or later) NDB 8.4.0
    Type or units epochs
    Default 100
    Range 0 - 100000
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    订阅节点可以延迟的未处理epochs数量。如果超过这个数字,会导致延迟的订阅节点被断开连接。

    默认值100通常足够满足正常操作。如果订阅节点延迟到导致断开连接,这通常是由于网络或进程/线程调度问题。 (在极少数情况下,可能是NDB客户端的bug) 在epochs较长时,可能需要将值设置低于默认值。

    断开连接可以防止客户端问题影响数据节点服务,避免由于缓冲数据而运行出内存,最后关闭。相反,只有客户端受到影响(例如,二进制日志中的gap事件),迫使客户端重新连接或重启进程。

  • MaxBufferedEpochBytes

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 26214400
    Range 26214400 (0x01900000) - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该节点为缓冲epochs分配的总字节数。

  • TimeBetweenInactiveTransactionAbortCheck

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 1000
    Range 1000 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    超时处理是通过在每个事务中检查一个计时器,每隔指定的时间间隔一次进行的。因此,如果该参数设置为1000毫秒,那么每个事务将在每秒钟被检查以确定是否超时。

    默认值为1000毫秒(1秒)。

  • TransactionInactiveTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 4294967039(0xFFFFFEFF)
    Range 0 - 4294967039(0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。(NDB 8.4.0)

    该参数指定了在同一事务中操作之间允许的最大时间间隔,以防止事务被终止。

    该参数的默认值为4G(也就是最大值)。对于需要确保事务不持锁太久的实时数据库,这个参数应该设置为一个相对较小的值。将其设置为0意味着应用程序从不超时。单位是毫秒。

  • TransactionDeadlockDetectionTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 1200
    Range 50 - 4294967039(0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    当节点执行涉及事务的查询时,节点将等待集群中的其他节点响应,然后继续执行。这参数设置了事务在数据节点上执行的时间限制,即事务协调器等待每个参与事务的数据节点执行请求的时间。

    无法响应可能是由于以下原因之一:

    • 节点已死亡

    • 操作已经进入锁队列

    • 节点请求执行操作可能被严重过载。

    这个超时参数确定了事务协调器等待另一个节点执行查询的时间限制,直到事务被中止,并且对节点故障处理和死锁检测都非常重要。

    默认超时值为 1200 毫秒(1.2 秒).

    这个参数的最小值是 50 毫秒.

  • DiskSyncSize

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 4M
    Range 32K - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这是存储数据到本地检查点文件之前可以存储的最大字节数量。这是为了防止写缓冲,否则可能会严重影响性能。此参数不是TimeBetweenLocalCheckpoints的替代品。

    Note

    ODirect启用时,不需要设置DiskSyncSize;实际上,在这种情况下,它的值将被忽略。

    默认值为 4M(4 megabytes).

  • MaxDiskWriteSpeed

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 20M
    Range 1M - 1024G
    Restart Type

    系统重启:需要对集群进行完整的关闭和重启。 (NDB 8.4.0)

    在无其他数据节点重启的情况下,设置磁盘写入的最大速率(以字节每秒为单位),由本地检查点和备份操作执行。

    要设置在本数据节点重启时允许的磁盘写入速度,请使用MaxDiskWriteSpeedOwnRestart。要设置在其他数据节点重启时允许的磁盘写入速度,请使用MaxDiskWriteSpeedOtherNodeRestart。所有LCP和备份操作的磁盘写入最小速度可以通过设置MinDiskWriteSpeed进行调整。

  • MaxDiskWriteSpeedOtherNodeRestart

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 50M
    Range 1M - 1024G
    Restart Type

    系统重启:需要整个集群的完全关闭和重启。 (NDB 8.4.0)

    在本 NDB 集群中有一个或多个数据节点正在重启(除此节点外)时,设置磁盘写入的最大速率(以字节每秒为单位),由本地检查点和备份操作执行。

    在数据节点重启时设置磁盘写入的最大速率,使用MaxDiskWriteSpeedOwnRestart。在集群中没有数据节点重启时设置磁盘写入的最大速率,使用MaxDiskWriteSpeed。所有LCP和备份操作的磁盘写入最小速度可以通过设置MinDiskWriteSpeed进行调整。

  • MaxDiskWriteSpeedOwnRestart

    Version (or later) NDB 8.4.0
    Type or units 数字
    Default 200M
    Range 1M - 1024G
    Restart Type

    系统重启:需要集群的完整关闭和重启。 (NDB 8.4.0)

    使用本地检查点和备份操作在数据节点重启时设置磁盘写入的最大速率,单位为字节每秒。

    为了在其他数据节点重启时设置磁盘写入的最大速率,使用MaxDiskWriteSpeedOtherNodeRestart。为了在集群中没有任何数据节点重启时设置磁盘写入的最大速率,使用MaxDiskWriteSpeed。所有LCP和备份操作的磁盘写入速度的最小值可以通过设置MinDiskWriteSpeed进行调整。

  • MinDiskWriteSpeed

    Version (or later) NDB 8.4.0
    Type or units 数字
    Default 10M
    Range 1M - 1024G
    Restart Type

    系统重启:需要完全关闭和重新启动集群。 (NDB 8.4.0)

    通过设置本地检查点和备份操作的磁盘写入速率(以字节每秒为单位),将最小速度进行调整。

    使用参数MaxDiskWriteSpeedMaxDiskWriteSpeedOwnRestartMaxDiskWriteSpeedOtherNodeRestart可以调整磁盘写入速率的最大值,用于LCPs和备份在不同情况下。请查看这些参数的描述以获取更多信息。

  • ArbitrationTimeout

    Version (or later) NDB 8.4.0
    Type or units 毫秒
    Default 7500
    Range 10 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数指定数据节点等待仲裁员对仲裁消息的响应时间。如果超出这个时间,网络将被假设已经分裂。

    默认值为7500毫秒(7.5秒)

  • Arbitration

    Version (or later) NDB 8.4.0
    Type or units 枚举
    Default 默认
    Range 默认、禁用、等待外部
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    参数Arbitration启用了仲裁方案的选择,相应于该参数的三个可能值之一:

    • 默认。 这使得仲裁继续按照管理节点和 API 节点的ArbitrationRank设置进行。这个是默认值。

    • 禁用。[ndbd default]部分的config.ini文件中设置Arbitration = Disabled,可以实现将ArbitrationRank设置为 0 的所有管理节点和 API 节点的效果。当Arbitration被设置时,任何ArbitrationRank设置都将被忽略。

    • WaitExternal.  Arbitration 参数也使得可以配置仲裁,以便在外部集群管理应用程序完成仲裁后,等待指定的时间,而不是内部处理仲裁。这可以通过将Arbitration = WaitExternal设置在config.ini文件中的[ndbd default]部分来实现。为了获得最佳结果,建议将ArbitrationTimeout设置为外部集群管理应用程序执行仲裁所需的时间的两倍。

    Important

    这个参数只能在集群配置文件中的[ndbd default]部分使用。集群行为在Arbitration设置为不同值时是未指定的。

  • RestartSubscriberConnectTimeout

    Version (or later) NDB 8.4.0
    Type or units ms
    Default 12000
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数确定数据节点等待订阅 API 节点连接的时间。一旦超时,任何缺失API 节点将从集群中断开。要禁用超时,请将 RestartSubscriberConnectTimeout 设置为 0。

    虽然这个参数指定了毫秒,但超时本身将被解析到下一个整秒。

  • KeepAliveSendInterval

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 60000
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    您可以通过设置该参数来启用和控制数据节点之间的keep-alive信号间隔。KeepAliveSendInterval 的默认值为 60000 毫秒(一分钟),将其设置为 0 可以禁用keep-alive信号。1 到 10 之间的值将被视为 10。

    在监控和断开闲置 TCP 连接的环境中,这个参数可能会有所帮助,防止在集群空闲时出现不必要的数据节点故障。

管理节点和数据节点之间的心跳间隔始终为 100 毫秒,并且不可配置。

缓冲和日志记录。多个[ndbd] 配置参数允许高级用户控制节点进程使用的资源,并根据需要调整各种缓冲区大小。

这些缓冲区用作文件系统的前端,当将日志记录写入磁盘时。如果节点在磁盘模式下运行,这些参数可以设置为最小值,因为 NDB 存储引擎的文件系统抽象层会将磁盘写操作“模拟”。

  • UndoIndexBuffer

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default 2M
    Range 1M - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    此参数以前设置了undo索引缓冲区的大小,但在当前 NDB 集群版本中无效。

    在集群配置文件中使用该参数将生成弃用警告;您应该期望它在未来 NDB 集群版本中被删除。

  • UndoDataBuffer

    Version (or later) NDB 8.4.0
    Type or units 无符号
    Default 16M
    Range 1M - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    此参数以前设置了undo数据缓冲区的大小,但在当前 NDB 集群版本中无效。

    在集群配置文件中使用该参数将生成弃用警告;您应该期望它在未来 NDB 集群版本中被删除。

  • RedoBuffer

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 32M
    Range 1M - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    所有更新活动也需要被记录。REDO日志使得在系统重新启动时可以回放这些更新。NDB恢复算法使用数据的“模糊”检查点 zusammen mit UNDO日志,然后将 REDO日志应用于播放所有更改到恢复点。

    RedoBuffer 设置了在其中写入 REDO日志的缓冲区大小。默认值为 32MB;最小值为 1MB。

    如果这个缓冲区太小,NDB存储引擎将发出错误代码 1221(REDO日志缓冲区过载)。因此,在在线更改集群配置时,您应该小心地尝试减少 RedoBuffer 的值。

    ndbmtd为每个LDM线程分配单独的缓冲区(见ThreadConfig)。例如,在4个LDM线程的情况下,ndbmtd数据节点实际拥有4个缓冲区,并将RedoBuffer字节分配给每一个,总共为4 * RedoBuffer字节。

  • EventLogBufferSize

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 8192
    Range 0 - 64K
    Restart Type

    系统重启:需要完整地关闭和重新启动集群。 (NDB 8.4.0)

    控制 NDB 日志事件在数据节点中的圆形缓冲区大小。

控制日志消息.  在管理集群时,能够控制不同事件类型的日志消息发送到stdout非常重要。对于每个事件类别,有16个可能的事件级别(从0到15)。将事件报告设置为给定事件类别的级别15意味着该类别中的所有事件报告都将被发送到stdout;将其设置为0意味着该类别中的无事件报告将被制作。

默认情况下,只有启动消息被发送到stdout,剩余的事件报告级别默认设置为0。原因是这些消息也将被发送到管理服务器的集群日志中。

类似地,可以对管理客户端设置一个相似的级别来确定哪些事件级别在集群日志中记录。

  • LogLevelStartup

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 1
    Range 0 - 15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    启动进程生成事件时的报告级别。

    默认级别为1。

  • LogLevelShutdown

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 0
    Range 0 - 15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    在节点优雅关闭时生成事件的报告级别。

    默认级别为 0。

  • LogLevelStatistic

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 0
    Range 0 - 15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    统计事件,如主键读取次数、更新次数、插入次数等,以及缓存使用情况等信息的报告级别。

    默认级别为 0。

  • LogLevelCheckpoint

    Version (or later) NDB 8.4.0
    Type or units 日志级别
    Default 0
    Range 0-15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对本地和全局检查点生成事件的报告级别。

    默认级别为 0。

  • LogLevelNodeRestart

    Version (or later) NDB 8.4.0
    Type or units 整数
    Default 0
    Range 0-15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对节点重启期间生成事件的报告级别。

    默认级别为 0。

  • LogLevelConnection

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 0
    Range 0 - 15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    连接集群节点生成事件的报告级别。

    默认级别为 0。

  • LogLevelError

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 0
    Range 0 - 15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    集群作为整体生成的错误和警告事件的报告级别。这些错误不会导致节点失败,但仍然值得报告。

    默认级别为 0。

  • LogLevelCongestion

    Version (or later) NDB 8.4.0
    Type or units 级别
    Default 0
    Range 0 - 15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对堵塞事件生成的报告级别。这类错误不会导致节点失败,但仍然值得报告。

    默认级别是 0。

  • LogLevelInfo

    Version (or later) NDB 8.4.0
    Type or units 整数
    Default 0
    Range 0 - 15
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    对集群总体状态信息生成的报告级别。

    默认级别是 0。

  • MemReportFrequency

    Version (or later) NDB 8.4.0
    Type or units 无符号整数
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数控制数据节点内存使用报告在集群日志中的记录频率;它是一个表示秒数之间报告的整数值。

    每个数据节点的数据内存和索引内存使用将被记录为百分比和32 KB页面的DataMemory的数量,根据在config.ini文件中设置的值。例如,如果DataMemory等于100 MB,而某个数据节点正在使用50 MB存储数据内存,那么对应的集群日志中的一行可能如下所示:

    此参数控制数据节点内存使用情况报告在集群日志中记录的频率;它是一个整数值,表示报告之间的秒数。

    每个数据节点的数据内存和索引内存使用情况都记录为百分比和 32 KB 页的 DataMemory 的数量,如 config.ini 文件中设置的那样。例如,如果 DataMemory 等于 100 MB,并且给定数据节点正在使用 50 MB 用于数据内存存储,则集群日志中的相应行可能如下所示:

    2006-12-24 01:18:16 [MgmSrvr] INFO -- Node 2: Data usage is 50%(1280 32K pages of total 2560)

    MemReportFrequency不是必需参数。如果使用,可以在config.ini文件的[ndbd default]部分为所有集群数据节点设置,并且可以在对应的[ndbd]部分单独设置或覆盖该参数。最小值也是默认值是0,在这种情况下,内存报告将在内存使用达到某些百分比(80%、90%和100%)时被记录,如第25.6.3.2节,“NDB Cluster Log Events”中讨论的统计事件。

  • StartupStatusReportFrequency

    Version (or later) NDB 8.4.0
    Type or units
    Default 0
    Range 0 - 4294967039(0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。(NDB 8.4.0)

    当数据节点使用--initial选项启动时,它将在启动阶段4(见第25.6.4节,“NDB集群启动阶段总结”)中初始化redo日志文件。当设置了NoOfFragmentLogFilesFragmentLogFileSize或二者很大的值,这个初始化过程可能需要很长时间。您可以通过StartupStatusReportFrequency配置参数强制在这个过程中间期望报告被记录,例如每隔StartupStatusReportFrequency秒。在这种情况下,这些报告将在集群日志中以文件数量和空间大小的形式记录,如下所示:

    2009-06-20 16:39:23 [MgmSrvr] INFO -- Node 1: Local redo log file initialization status:
    #Total files: 80, Completed: 60
    #Total MBytes: 20480, Completed: 15557
    2009-06-20 16:39:23 [MgmSrvr] INFO -- Node 2: Local redo log file initialization status:
    #Total files: 80, Completed: 60
    #Total MBytes: 20480, Completed: 15570

    这些报告每StartupStatusReportFrequency秒在启动阶段4中被记录。如果StartupStatusReportFrequency为0(默认值),那么这些报告将只在redo日志文件初始化过程的开始和结束时被写入到集群日志中。

以下参数旨在用于测试或调试数据节点,而不是用于生产环境。

  • DictTrace

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 未定义
    Range 0 - 100
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    可以使用DictTrace参数来导致事件生成时对表创建和删除进行日志记录。这只在调试 NDB 内核代码时有用。DictTrace参数接受整数值。0 是默认值,表示不执行日志记录;1 启用 trace 日志记录;2 启用额外DBDICT调试输出。

  • WatchdogImmediateKill

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    您可以通过启用WatchdogImmediateKill数据节点配置参数,使得在 watchdog 发生问题时立即杀死线程。这一参数仅供调试或故障排除使用,以获取 trace 文件,报告执行中止的确切情况。

备份参数。 [ndbd] 参数在本节中讨论,定义了在线备份执行时设置的内存缓冲区。

  • BackupDataBufferSize

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 16M
    Range 512K - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 7.6 中)
    Restart Type

    在创建备份时,用于将数据发送到磁盘的两个缓冲区。备份数据缓冲区用于填充扫描节点表中的数据。一旦这个缓冲区被填满到指定的BackupWriteSize级别,页面将被发送到磁盘。在将数据写入磁盘时,备份过程可以继续填充这个缓冲区直到它没有空间了。当这发生时,备份过程会暂停扫描并等待一些磁盘写入完成,以释放内存以便继续扫描。

    该参数的默认值是 16MB。最小值是 512K。

  • BackupDiskWriteSpeedPct

    Version (or later) NDB 8.4.0
    Type or units 百分比
    Default 50
    Range 0 - 90
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    BackupDiskWriteSpeedPct 只在备份是单线程时生效;由于 NDB 8.4 支持多线程备份,因此通常不需要调整这个参数,因为它在多线程情况下没有影响。以下讨论เฉพาะ单线程备份。

    在正常运行中,数据节点尝试最大化用于本地快照和备份的磁盘写入速度,同时保持由MinDiskWriteSpeedMaxDiskWriteSpeed设置的边界。磁盘写入调速将每个LDM线程分配等量的总预算。这允许并行LCPs同时进行,而不超过磁盘I/O预算。由于备份由单个LDM线程执行,这实际上导致了预算削减,结果是备份完成时间延长,如果变化率足够高,还可能导致备份无法完成,当备份日志缓冲区填充率高于可达的写入速率时。

    可以通过使用BackupDiskWriteSpeedPct配置参数来解决这个问题,该参数取值范围为0-90(包括),被解释为节点的最大写入速率预算中保留的百分比,用于LCPs。执行备份的LDM线程将获得整个写入速率预算加上其(减少)的写入速率预算份额用于本地快照。

    该参数的默认值为50(被解释为50%)。

  • BackupLogBufferSize

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 16M
    Range 2M - 4294967039(0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    备份日志缓冲区扮演着与备份数据缓冲区相似的角色,除了用于生成在备份执行期间所有表写入的日志记录。对于写入这些页面,同样适用备份数据缓冲区的原则,只是当备份日志缓冲区没有更多空间时,备份将失败。在这种情况下,备份日志缓冲区的大小必须足够处理由写活动引起的负载。请参阅第25.6.8.3节,“NDB 集群备份配置”

    这个参数的默认值对于大多数应用程序来说应该足够。实际上,备份失败更可能是由于磁盘写入速度不足,而不是备份日志缓冲区满了。如果磁盘子系统未配置为处理由应用程序引起的写入负载,那么集群就 unlikely 能够执行所需操作。

    最好将集群节点配置为使处理器成为瓶颈,而不是磁盘或网络连接。

    这个参数的默认值是 16MB。

  • BackupMemory

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 32M
    Range 0 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 7.4 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数已经弃用,可能在未来的 NDB 集群版本中被删除。对其设置将被忽略。

  • BackupReportFrequency

    Version (or later) NDB 8.4.0
    Type or units
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数控制在备份过程中,管理客户端中备份状态报告的频率,以及将这些报告写入集群日志(假设已配置了集群事件记录—见Logging and checkpointing)。BackupReportFrequency表示备份状态报告之间的时间间隔(以秒为单位)。

    默认值是0。

  • BackupWriteSize

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 256K
    Range 32K - 4294967039(0xFFFFFEFF)
    Deprecated 是(在 NDB 7.6 中)
    Restart Type

    Node Restart: 需要对集群进行滚动重启。(NDB 8.4.0)

    该参数指定备份日志和备份数据缓冲区中写入到磁盘的消息默认大小。

    该参数的默认值为256KB。

  • BackupMaxWriteSize

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 1M
    Range 256K - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 7.6 中)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    备份参数:指定备份日志和数据缓冲区中写入到磁盘的最大消息大小。

    该参数的默认值为 1MB。

  • CompressedBackup

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    启用该参数将使备份文件被压缩。使用的压缩算法等同于gzip --fastconfig.ini文件的[ndbd default]部分设置该参数)。

    Important

    不能将压缩备份恢复到不支持该特性的MySQL集群中运行的节点上。

    默认值为0(禁用)。

  • RequireEncryptedBackup

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 0
    Range 0 - 1
    Restart Type

    Node Restart: 需要对集群进行滚动重启。 (NDB 8.4.0)

    如果设置为1,备份必须加密。虽然可以单独为每个数据节点设置该参数,但建议在[ndbd default]部分的config.ini全局配置文件中设置它。有关使用加密备份的更多信息,请参阅第25.6.8.2节,“使用NDB集群管理客户端创建备份”

Note

备份文件的位置由BackupDataDir数据节点配置参数确定。

附加要求。 在指定这些参数时,以下关系必须成立。否则,数据节点无法启动。

  • BackupDataBufferSize >= BackupWriteSize + 188KB

  • BackupLogBufferSize >= BackupWriteSize + 16KB

  • BackupMaxWriteSize >= BackupWriteSize

本节中讨论的[ndbd]参数用于在多处理器数据节点主机上排程和锁定线程到特定的CPU。

Note

要使用这些参数,数据节点进程必须以系统root身份运行。

  • BuildIndexThreads

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 128
    Range 0 - 128
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数确定在系统或节点启动时,以及在运行ndb_restore--rebuild-indexes时,重建有序索引的线程数。它仅在每个数据节点中表的碎片数量大于1时支持(例如,在使用CREATE TABLE时,添加了COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_LDM_X_2")。

    将这个参数设置为0(默认值)禁用多线程的有序索引重建。

    这个参数在使用ndbdndbmtd时支持。

    您可以在数据节点初始重启时启用多线程构建,通过将TwoPassInitialNodeRestartCopy数据节点配置参数设置为TRUE.

  • LockExecuteThreadToCPU

    Version (or later) NDB 8.4.0
    Type or units CPU ID 集合
    Default 0
    Range ...
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    在使用ndbd时,这个参数(现在是一个字符串)指定了处理NDBCLUSTER执行线程的 CPU ID。在使用ndbmtd时,这个参数的值是一个逗号分隔的 CPU ID 列表,用于处理执行线程。每个 CPU ID 在列表中都应该是一个介于 0 到 65535 之间(包括)的整数。

    指定的 ID 数量应该与MaxNoOfExecutionThreads确定的执行线程数量相匹配。然而,在使用该参数时,没有保证线程将被分配给 CPU 的任何顺序。你可以使用ThreadConfig来获得更细粒度的控制。

    LockExecuteThreadToCPU没有默认值。

  • LockMaintThreadsToCPU

    Version (or later) NDB 8.4.0
    Type or units CPU ID
    Default 0
    Range 0 - 64K
    Restart Type

    Node Restart: 需要对集群进行Node Restart: 需要对集群进行该参数指定了处理NDBCLUSTER维护线程的 CPU ID。

    该参数的值是一个介于 0 到 65535 之间(包括)的整数。没有默认值.

    This parameter specifies the ID of the CPU assigned to handle NDBCLUSTER maintenance threads.

    The value of this parameter is an integer in the range 0 to 65535 (inclusive). There is no default value.

  • Numa

    Version (or later) NDB 8.4.0
    Type or units 数字
    Default 1
    Range ...
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数确定了是否由操作系统或数据节点进程控制非uniform memory access(NUMA),数据节点是否使用ndbdndbmtd。默认情况下,NDB 尝试在任何提供NUMA支持的主机操作系统上使用交错NUMA内存分配策略。

    Numa = 0设置意味着数据节点进程不会自己尝试为内存分配设置策略,而是允许操作系统根据numactl工具的指导来确定该行为。换言之,Numa = 0将导致系统默认行为,可以通过numactl进行自定义。在许多 Linux 系统中,系统默认行为是将 socket本地内存分配给任何进程,以便在分配时。但是在使用ndbmtd时,这可能会导致问题,因为ndbmtd在启动时分配所有内存,从而导致不均衡,给不同 socket 提供不同的访问速度,特别是在锁定主内存页时。

    Numa = 1设置意味着数据节点进程使用libnuma请求交错内存分配。 (这也可以通过操作系统级别的numactl来实现。) 使用交错分配实际上告诉数据节点进程忽略非uniform 内存访问,但不尝试利用快速本地内存,而是尝试避免由于慢速远端内存导致的不均衡。如果不想使用交错分配,请将Numa设置为 0,以便在操作系统级别上确定所需行为。

    只有在 Linux 系统中存在libnuma.so文件时,Numa配置参数才被支持。

  • RealtimeScheduler

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    将该参数设置为1,启用数据节点线程的实时调度。

    默认值是0(调度禁用)。

  • SchedulerExecutionTimer

    Version (or later) NDB 8.4.0
    Type or units 微秒
    Default 50
    Range 0 - 11000
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数指定了调度器在执行线程之前等待的微秒数。将其设置为0可以最小化响应时间;为了提高吞吐量,可以增加值,但这将导致更长的响应时间。

    默认值为 50 微秒,我们的测试结果表明,在高负载情况下,稍微增加吞吐量不会显著延迟请求。

  • SchedulerResponsiveness

    NDB 调度器中设置速度和吞吐量之间的平衡。此参数采用一个整数,其值在 0-10 范围内(包括 0 和 10),默认值为 5。较高的值相对于吞吐量提供更好的响应时间。较低的值以更长的响应时间为代价提供更高的吞吐量。

  • SchedulerSpinTimer

    Version (or later) NDB 8.4.0
    Type or units µs
    Default 0
    Range 0 - 500
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数指定了调度器在执行线程之前需要等待的微秒数。

    Note

    如果设置了SpinMethod,则忽略该参数的任何设置。

  • SpinMethod

    Version (or later) NDB 8.4.0
    Type or units 枚举
    Default 静态旋转
    Range 基于成本的旋转、延迟优化的旋转、数据库机器旋转、静态旋转
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数提供了一个简单的接口来控制数据节点上的自适应旋转,具有四个可能值,可以为旋转参数值提供预设值,如以下列表所示:

    1. StaticSpinning(默认):将EnableAdaptiveSpinning设置为false,并将SchedulerSpinTimer设置为0。(SetAllowedSpinOverhead在这种情况下无关紧要。)

    2. CostBasedSpinning:将EnableAdaptiveSpinning设置为trueSchedulerSpinTimer设置为100,并将SetAllowedSpinOverhead设置为200。

    3. LatencyOptimisedSpinning:将EnableAdaptiveSpinning设置为trueSchedulerSpinTimer设置为200,并将SetAllowedSpinOverhead设置为1000。

    4. DatabaseMachineSpinning:将EnableAdaptiveSpinning设置为trueSchedulerSpinTimer设置为500,并将SetAllowedSpinOverhead设置为10000。这旨用于在线程拥有自己的CPU的情况下使用。

    SpinMethod修改的spin参数列表如下:

    • SchedulerSpinTimer: 这是数据节点配置参数的同名设置。通过SpinMethod应用的设置将覆盖在config.ini文件中设置的值。

    • EnableAdaptiveSpinning: 启用或禁用自适应旋转。禁用它将导致旋转不进行任何CPU资源检查。这参数不能直接在集群配置文件中设置,通常情况下也无需设置,但可以使用DUMP 104004 1DUMP 104004 0ndb_mgm管理客户端中启用或禁用。

    • SetAllowedSpinOverhead: 设置允许的旋转延迟时间。这参数不能直接在config.ini文件中设置。在大多数情况下,SpinMethod应用的设置应该足够,但如果需要更改它,可以使用DUMP 104002 overhead,其中overhead是一个介于0到10000之间的值;请参阅指示的DUMP命令的描述以获取详细信息。

    在缺乏可用的旋转指令的平台上,例如PowerPC和一些SPARC平台上,spin时间被设置为0,在所有情况下忽略SpinMethod的值,除了StaticSpinning

  • TwoPassInitialNodeRestartCopy

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default true
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    可以通过将该配置参数设置为true(默认值)来启用多线程构建有序索引的功能,以便在数据节点的初始重启时进行两次复制操作。

    您还需要将BuildIndexThreads设置为非零值。

NDBMtd 多线程配置参数 ndbmtd 默认情况下以单线程方式运行,需要使用配置文件config.ini中的参数来启用多线程。有两种方法可以实现,这两种方法都需要在config.ini文件中设置相应的参数。第一种方法是简单地将适当值赋给MaxNoOfExecutionThreads配置参数。第二种方法使得可以设置更复杂的规则来控制ndbmtd的多线程使用ThreadConfig。下面几段内容将提供这些参数和它们在多线程数据节点中的用法信息。

Note

使用并行备份数据节点需要在所有数据节点中启用多个LDMs,以便在备份之前启动备份。更多信息请见第25.6.8.5节,“使用并行数据节点进行NDB备份”,以及从并行备份中恢复

  • AutomaticThreadConfig

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

    初始系统重启:需要完全关闭集群,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    初始系统重启:需要完全关闭集群,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    (Note: I translated "boolean" to "布尔值", and kept the rest of the text as is, since it seems to be a technical documentation.)

    设置为1时,启用自动线程配置,使用数据节点可用的CPU数量,并考虑由tasksetnumactl、虚拟机、Docker等控制哪些CPU可供给定的应用程序(在Windows平台上,自动线程配置使用所有在线的CPU)。Alternatively,您可以将NumCPUs设置为所需的CPU数量(最多1024,自动线程配置可处理的最大CPU数量)。ThreadConfigMaxNoOfExecutionThreads的设置将被忽略。此外,启用该参数自动禁用ClassicFragmentation

  • ClassicFragmentation

    Version (or later) NDB 8.4.0
    Type or units 布尔值
    Default true
    Range true, false
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    当设置为true时,NDB将fragments分布到LDMs中,以使每个节点的默认分区数等于每个数据节点的最小本地数据管理器(LDM)线程数。

    对于新集群,设置ClassicFragmentationfalse在第一次设置集群时更好一些;这样做将使每个节点的分区数等于PartitionsPerNode的值,从而确保所有分区都被均匀地分布在所有LDMs之间。

    这个参数和AutomaticThreadConfig是互斥的;启用AutomaticThreadConfig将自动禁用ClassicFragmentation

  • EnableMultithreadedBackup

    Version (or later) NDB 8.4.0
    Type or units 无符号整数
    Default 1
    Range 0 - 1
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    启用多线程备份。如果每个数据节点至少有2个LDM,所有LDM线程将参与备份,该备份使用一个子目录per LDM线程,并且每个子目录包含.ctl.Data.log备份文件。

    这个参数通常在ndbmtd中启用(设置为1)。要强制单线程备份,可以使用更老版本的ndb_restore进行恢复, disable multi-threaded backup by setting this parameter to 0。需要对每个数据节点在集群中设置该参数。

    请参阅第25.6.8.5节,“使用并行数据节点进行NDB 备份”从并行备份恢复,获取更多信息。

  • MaxNoOfExecutionThreads

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 2
    Range 2 - 72
    Restart Type

    系统重启:需要完全关闭和重新启动集群。 (NDB 8.4.0)

    这个参数直接控制ndbmtd使用的执行线程数,直到达到最大值72。虽然这个参数在[ndbd][ndbd default]部分的config.ini文件中设置,但它是独特的ndbmtd的,并不适用于ndbd

    启用AutomaticThreadConfig将忽略这个参数的设置。

    设置MaxNoOfExecutionThreads将确定每种类型的线程数,根据文件storage/ndb/src/common/mt_thr_config.cpp中的矩阵。下表显示了可能的MaxNoOfExecutionThreads值对应的线程数。

    表25.11 MaxNoOfExecutionThreads值和对应的线程数(LQH,TC,Send,Receive)

    MaxNoOfExecutionThreads Value LDM Threads TC Threads Send Threads Receive Threads
    0 .. 3 1 0 0 1
    4 .. 6 2 0 0 1
    7 .. 8 4 0 0 1
    9 4 2 0 1
    10 4 2 1 1
    11 4 3 1 1
    12 6 2 1 1
    13 6 3 1 1
    14 6 3 1 2
    15 6 3 2 2
    16 8 3 1 2
    17 8 4 1 2
    18 8 4 2 2
    19 8 5 2 2
    20 10 4 2 2
    21 10 5 2 2
    22 10 5 2 3
    23 10 6 2 3
    24 12 5 2 3
    25 12 6 2 3
    26 12 6 3 3
    27 12 7 3 3
    28 12 7 3 4
    29 12 8 3 4
    30 12 8 4 4
    31 12 9 4 4
    32 16 8 3 3
    33 16 8 3 4
    34 16 8 4 4
    35 16 9 4 4
    36 16 10 4 4
    37 16 10 4 5
    38 16 11 4 5
    39 16 11 5 5
    40 20 10 4 4
    41 20 10 4 5
    42 20 11 4 5
    43 20 11 5 5
    44 20 12 5 5
    45 20 12 5 6
    46 20 13 5 6
    47 20 13 6 6
    48 24 12 5 5
    49 24 12 5 6
    50 24 13 5 6
    51 24 13 6 6
    52 24 14 6 6
    53 24 14 6 7
    54 24 15 6 7
    55 24 15 7 7
    56 24 16 7 7
    57 24 16 7 8
    58 24 17 7 8
    59 24 17 8 8
    60 24 18 8 8
    61 24 18 8 9
    62 24 19 8 9
    63 24 19 9 9
    64 32 16 7 7
    65 32 16 7 8
    66 32 17 7 8
    67 32 17 8 8
    68 32 18 8 8
    69 32 18 8 9
    70 32 19 8 9
    71 32 20 8 9
    72 32 20 8 10

    总是有一個SUMA(复制)线程。

    NoOfFragmentLogParts 应该设置为 ndbmtd 使用的 LDM 线程数,以确定该参数的设置。这比率不应该超过 4:1;在这种情况下,配置是明确禁止的。

    LDM 线程数还决定了未经显式分区的 NDB 表使用的分区数,这是 LDM 线程数乘以集群中的数据节点数。 (如果在数据节点上使用ndbd,而不是ndbmtd,那么总是有一个 LDM 线程;在这种情况下,自动创建的分区数等于数据节点数。请参阅第 25.2.2 节,“NDB 集群节点、节点组、分片副本和分区”,了解更多信息。

    在使用多个LDM线程时,为 Disk Data 表空间添加大型表空间可能会导致资源和 CPU 使用率问题,如果磁盘页面缓冲区大小不足见DiskPageBufferMemory配置参数的描述,以获取更多信息。

    线程类型在本节后面进行描述(见ThreadConfig)。

    将该参数设置到允许的值范围外,管理服务器在启动时会_abort_WithErrorError line number: Illegal value value for parameter MaxNoOfExecutionThreads

    对于MaxNoOfExecutionThreads,值为0或1将被NDB内部向上舍入到2,因此2被认为是该参数的默认值和最小值。

    MaxNoOfExecutionThreads通常旨在设置为可用的CPU线程数,并分配每种类型的线程,以适应典型工作负载。它不将特定的线程分配到指定的CPU中。在需要从提供的设置中异步或将线程绑定到CPU时,您应该使用ThreadConfig,它允许您将每个线程直接分配给所需的类型、CPU或双方。

    多线程数据节点进程总是至少.spawn_以下线程:

    • 1 个本地查询处理线程(LDM)

    • 1 个接收线程

    • 1 个订阅管理器(SUMA 或复制)线程

    对于MaxNoOfExecutionThreads值为 8 或以下,无TC线程将被创建,而是由主线程执行 TC 处理。

    更改 LDM 线程数量通常需要系统重启,是否使用该参数或ThreadConfig都可以,但是在满足以下两个条件的情况下,可以使用节点初始重启(NI):

    • 每个 LDM 线程处理的最大碎片数为 8,

    • 总表碎片数量是 LDM 线程数量的整数倍。

  • MaxSendDelay

    Version (or later) NDB 8.4.0
    Type or units 微秒
    Default 0
    Range 0 - 11000
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数可以用于导致数据节点在发送数据到 API 节点之前暂停一会儿;在某些情况下,描述在以下段落中,这可能会导致更高的数据传输效率和总体吞吐量。

    MaxSendDelay 在 API 节点饱和或接近饱和时非常有用,这可能会导致性能波动。这种情况发生在数据节点能够快速将结果返回给 API 节点,且发送许多小包,以便处理较长的字节流,从而减慢 API 节点;后来,数据节点开始发送更大的包。

    为了处理这种场景,您可以将 MaxSendDelay 设置为非零值,这样可以确保响应不会立即返回给 API 节点。当没有其他竞争流量时,响应会立即发送,但当有竞争流量时,设置 MaxSendDelay 会导致数据节点等待足够长的时间,以便发送更大的包。实际上,这引入了一个人为瓶颈到发送过程中,可以实际提高吞吐量。

  • NoOfFragmentLogParts

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 4
    Range 4, 6, 8, 10, 12, 16, 20, 24, 32
    Restart Type

    Initial Node Restart: 需要对集群进行滚动重启,每个数据节点都必须使用--initial重启。 (NDB 8.4.0)

    设置redo日志组的数量,为ndbmtd所属的redo日志。该参数的值应该设置为ndbmtd中LDM线程的数量,根据MaxNoOfExecutionThreads的设置确定。使用超过4个redo日志部分per LDM的配置是被禁止的。

    请查看MaxNoOfExecutionThreads的描述以获取更多信息。

  • NumCPUs

    Version (or later) NDB 8.4.0
    Type or units 整数
    Default 0
    Range 0 - 1024
    Restart Type

    初始系统重启:需要完全关闭集群,擦除并从备份中恢复集群文件系统,然后重新启动集群。 (NDB 8.4.0)

    使自动线程配置使用指定数量的 CPU。无效,如果AutomaticThreadConfig未启用。

  • PartitionsPerNode

    Version (or later) NDB 8.4.0
    Type or units integer
    Default 2
    Range 1 - 32
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    设置每个节点上使用的分区数,当创建新的NDB表时。这使得可以避免在数据管理器(LDMs)数量高时将表分割到过多的分区中。

    虽然可以在不同的数据节点上设置不同的值,但这也没有什么好处;因此,建议简单地在全局config.ini文件中的[ndbd default]部分设置一次,为所有数据节点。

    如果启用了ClassicFragmentation,则对该参数的设置将被忽略。(请记住,启用AutomaticThreadConfig将禁用ClassicFragmentation。)

  • ThreadConfig

    Version (or later) NDB 8.4.0
    Type or units 字符串
    Default ''
    Range ...
    Restart Type

    系统重启:需要完全关闭和重新启动集群。 (NDB 8.4.0)

    该参数与ndbmtd一起使用,以将不同类型的线程分配到不同的CPU上。其值是一个字符串,格式如下:

    ThreadConfig := entry[,entry[,...]]
    
    entry := type={param[,param[,...]]}
    
    type := ldm | query | recover | main | recv | send | rep | io | tc | watchdog | idxbld
    
    param := count=number
      | cpubind=cpu_list
      | cpuset=cpu_list
      | spintime=number
      | realtime={0|1}
      | nosend={0|1}
      | thread_prio={0..10}
      | cpubind_exclusive=cpu_list
      | cpuset_exclusive=cpu_list

    括号({...})围绕参数列表是必需的,即使参数列表中只有一个参数。

    param(参数)指定以下信息中的任何或所有:

    • 给定类型线程的数量(count)。

    • 将给定类型线程非独占地绑定到CPU集。由cpubindcpuset之一确定。cpubind使每个线程非独占地绑定到CPU集中;cpuset意味着每个线程非独占地绑定到指定的CPU集。

      在Solaris上,您可以将给定类型线程非独占地或独占地绑定到CPU集。cpubind_exclusive使每个线程独占地绑定到CPU集中;cpuset_exclusive意味着每个线程独占地绑定到指定的CPU集。

      在单个配置中只能提供一个cpubindcpusetcpubind_exclusivecpuset_exclusive

    • spintime确定线程在睡眠前旋转的微秒数。

      spintime的默认值是SchedulerSpinTimer数据节点配置参数的值。

      spintime不适用于I/O线程、watchdog或离线索引构建线程,因此不能为这些线程类型设置该值。

    • realtime 可以设置为 0 或 1。如果设置为 1,线程将以实时优先级运行。这也意味着不能设置thread_

      默认情况下,realtime 参数的值是RealtimeScheduler数据节点配置参数的值。

      realtime 不能用于离线索引构建线程。

    • nosend设置为 1,可以防止主、ldm、rep 或 tc 线程协助发送线程。这参数默认值为 0,且不能与其他类型的线程一起使用。

    • thread_ 是一个线程优先级级别,可以从 0 到 10 设置,其中 10 表示最高优先级。默认值为 5。该参数的确切效果取决于平台,后续将在本节中详细描述。

      不能设置离线索引构建线程的线程优先级。

    thread_ 设置和每个平台的效果. thread_ 在 Linux/FreeBSD、Solaris 和 Windows 平台上实现不同。在以下列表中,我们将讨论每个平台上的实现:

    • Linux 和 FreeBSD:我们将thread_ 映射到一个供给给 nice 系统调用值。由于进程的 niceness 值越低表示进程优先级越高,因此增加 thread_ 的效果是降低 nice 值。

      表25.12:Linux和FreeBSD上thread_prio到nice值的映射

      thread_prio value nice value
      0 19
      1 16
      2 12
      3 8
      4 4
      5 0
      6 -4
      7 -8
      8 -12
      9 -16
      10 -20

      一些操作系统可能提供20个进程nice值的最大级别,但是这不是所有目标版本都支持的缘故,我们选择19作为可以设置的nice值的最大值。

    • Solaris: 设置Solaris FX优先级,映射如以下表所示:

      表25.13:Solaris上thread_prio到FX优先级的映射

      thread_prio value Solaris FX priority
      0 15
      1 20
      2 25
      3 30
      4 35
      5 40
      6 45
      7 50
      8 55
      9 59
      10 60

      Solaris上thread_prio设置为9将映射到特殊的FX优先级值59,这意味着操作系统也尝试强制线程在其自己的CPU核心上运行。

    • Windows: 我们将thread_映射到 Windows API SetThreadPriority()函数的 Windows 线程优先级值。下表显示了该映射:

      Table 25.14 Windows线程优先级映射

      thread_prio value Windows thread priority
      0 - 1 THREAD_最低
      2 - 3 THREAD_BELOW_NORMAL
      4 - 5 THREAD_NORMAL
      6 - 7 THREAD_ABOVE_NORMAL
      8 - 10 THREAD_HIGHEST

    属性type表示 NDB 线程类型。支持的线程类型和每种类型中允许的count值范围在以下列表中提供:

    • ldm: 本地查询处理器 (DBLQH kernel block) 负责处理数据。使用的 LDM 线程越多,数据变得越高分区。

      ClassicFragmentation设置为0时,分区的数量独立于LDM线程的数量,而取决于PartitionsPerNode的值。每个LDM线程维护自己的数据和索引分区,以及自己的redo日志。ldm可以设置为0到332之间的任何值。当将其设置为0时,mainreptc必须也设置为0,并且recv必须设置为1;这样做会导致ndbmtd模拟ndbd

      每个LDM线程通常与1个查询线程组成一个LDM组。4到8个LDM组被分组到一个轮询组中。每个LDM线程可以由同一个轮询组中的任何查询或线程协助执行。NDB尝试形成轮询组,使得每个轮询组中的所有线程都锁定到相同的L3缓存附加CPU中,遵循轮询组大小范围的限制。

      更改LDM线程的数量通常需要系统重新启动,以确保集群操作的安全性;在某些情况下,这个要求可以放松,后续部分将对此进行解释。这也适用于使用MaxNoOfExecutionThreads时的情况。

      在使用Disk Data表的LDM时,添加大型表空间(数百GB或更多)可能会导致资源和CPU使用问题,如果DiskPageBufferMemory不够大。

      如果ldm未包含在ThreadConfig值字符串中,则将创建一个ldm线程。

    • query: 查询线程与LDM组成一个组,仅对READ COMMITTED查询进行操作。查询线程的数量必须设置为0、1、2或3倍LDM线程的数量。除非将query设置为非零值或启用AutomaticThreadConfig参数,否则查询线程将不被使用。

      查询线程也可以作为恢复线程(见下一个项目),但反之不成立。

      更改查询线程的数量需要节点重新启动。

    • recover: 恢复线程将在LCP中从片段恢复数据。

      更改恢复线程的数量也需要节点重新启动。

    • tc:事务协调线程(DBTC kernel block),包含当前事务的状态。最大 TC 线程数为 128。

      理想情况下,每个新的事务都可以被分配到一个新的 TC 线程。在大多数情况下,1 TC 线程对应 2 LDM 线程足以确保这一点。在读写比率较小的场景中,可能只需要 1 TC 线程对应 4 LQH 线程来维护事务状态。反之,在执行大量更新操作的应用程序中,TC 线程到 LDM 线程的比例可能需要接近 1(例如,3 TC 线程对应 4 LDM 线程)。

      tc设置为 0 将使 TC 处理由主线程处理。在大多数情况下,这与将其设置为 1相同。

      范围:0-64

    • main:数据字典和事务协调(DBDIHDBTC kernel blocks),提供架构管理。也可以指定 0 或 2 个主线程。

      范围:0-2。

      main设置为0,并将rep设置为1,会将main块放入rep线程中;组合线程在ndbinfo.threads表中显示为main_rep。这等同于将rep设置为1,并将main设置为0。

      还可以将mainrep都设置为0,在这种情况下,两个线程都会被放入第一个recv线程中;组合线程在threads表中显示为main_rep_recv

      如果在ThreadConfig值字符串中省略了main,将创建一个main线程。

    • recv:接收线程(CMVMI内核块)。每个接收线程处理与NDB集群中的其他节点之间通信的一个或多个套接字,每个套接字对应一个节点。NDB集群支持多个接收线程;最大值为16个线程。

      范围:1 - 64。

      如果省略了recvThreadConfig值字符串中,将创建一个recv线程。

    • send: 发送线程(CMVMI kernel block)。为了提高吞吐量,可以从一个或多个单独的、专门的线程(最多8个)中执行发送。

      使用过多的发送线程可能会对可扩展性产生不良影响。

      之前,所有线程都负责自己的直接发送;这仍然可以通过将发送线程数设置为0来实现(在MaxNoOfExecutionThreads小于10时也会发生)。虽然这样可能会对吞吐量产生不良影响,但是在某些情况下也可以提供减少延迟的效果。

      范围:

      • 0 - 64

    • rep: 复制线程(SUMA kernel block)。这个线程也可以与主线程组合(见范围信息)。

      范围:0-1。

      rep设置为0,并将main设置为1,会将rep块置于main线程中;组合线程在ndbinfo.threads表中显示为main_rep。这实际上等同于将main设置为1,并将rep设置为0。

      还可以将mainrep都设置为0,在这种情况下,两个线程都会被放置在第一个recv线程中;结果的组合线程在threads表中被命名为main_rep_recv

      如果repThreadConfig值字符串中省略,一個rep线程将被创建。

    • io: 文件系统和其他杂项操作。这些任务不太繁重,总是由单个专门的I/O线程来处理。

      范围:1只。

    • watchdog:与该类型相关的参数设置实际上应用于多个线程,每个线程都有特定的用途。这些线程包括SocketServer线程,用于从其他节点接收连接设置;SocketClient线程,用于尝试与其他节点建立连接;以及检查线程是否在进度的watchdog线程。

      范围:1只。

    • idxbld:离线索引构建线程。与前面列出的其他线程类型不同,这些线程是临时的,仅在节点或系统重启时创建和使用,也可以在运行ndb_restore--rebuild-indexes时创建。它们可能绑定到与永久线程类型绑定的CPU集。

      thread_priorealtimespintime值不能用于离线索引构建线程。此外,count也将被忽略。

      如果未指定idxbld,默认行为如下:

      • 离线索引构建线程不绑定,如果I/O线程也未绑定,这些线程将使用任何可用的核心。

      • 如果I/O线程已绑定,那么离线索引构建线程将绑定到整个绑定的线程集中,因为这些线程没有其他任务要执行。

      范围:0 - 1。

    更改ThreadConfig通常需要系统初始重启,但在某些情况下可以放松这个要求:

    • 如果在更改后,LDM线程的数量保持不变,可以简单地执行节点重启(滚动重启或N)来实现更改。

    • 否则(即如果LDM线程数发生变化),可以使用节点初始重启(NI)来实现更改,提供以下两个条件被满足:

      1. 每个LDM线程处理的最大碎片数量为8,并且

      2. 总表碎片数量是LDM线程数的整数倍。

    在任何其他情况下,系统初始重启是必要的,以更改这个参数。

    NDB可以根据以下两个标准来区分线程类型:

    • 该线程是否为执行线程。类型mainldmqueryrecvreptcsend的线程是执行线程;类型iorecoverwatchdogidxbld的线程不是执行线程。

    • 该线程是否将分配给特定任务是永久或临时的。当前所有线程类型exceptidxbld都被认为是永久的;idxbld线程被视为临时线程。

    简单示例:

    # Example 1.
    
    ThreadConfig=ldm={count=2,cpubind=1,2},main={cpubind=12},rep={cpubind=11}
    
    # Example 2.
    
    Threadconfig=main={cpubind=0},ldm={count=4,cpubind=1,2,5,6},io={cpubind=3}

    在配置数据节点主机的线程使用时,通常是有必要保留一个或多个CPU用于操作系统和其他任务。因此,在拥有24个CPU的主机机器上,您可能想使用20个CPU线程(留下4个为其他用途),8个LDM线程、4个TC线程(与LDM线程数量相同的一半)、3个发送线程、3个接收线程,以及每个用于架构管理、异步复制和I/O操作的线程。 (这几乎是当MaxNoOfExecutionThreads设置为20时使用的线程分布。)以下ThreadConfig设置执行这些分配,并将所有这些线程绑定到特定的CPU上:

    ThreadConfig=ldm{count=8,cpubind=1,2,3,4,5,6,7,8},main={cpubind=9},io={cpubind=9}, \
    rep={cpubind=10},tc{count=4,cpubind=11,12,13,14},recv={count=3,cpubind=15,16,17}, \
    send{count=3,cpubind=18,19,20}

    在大多数情况下,可以将主要(架构管理)线程和I/O线程绑定到同一个CPU上,就像我们在前面的示例中所做的那样。

    以下示例结合使用了cpusetcpubind定义的CPU组,以及线程优先级的使用。

    ThreadConfig=ldm={count=4,cpuset=0-3,thread_prio=8,spintime=200}, \
    ldm={count=4,cpubind=4-7,thread_prio=8,spintime=200}, \
    tc={count=4,cpuset=8-9,thread_prio=6},send={count=2,thread_prio=10,cpubind=10-11}, \
    main={count=1,cpubind=10},rep={count=1,cpubind=11}

    在这种情况下,我们创建两个LDM组;第一个使用cpubind,第二个使用cpusetthread_priospintime对每个组设置相同的值,这意味着总共有八个LDM线程。(您应该确保NoOfFragmentLogParts也设置为8。)四个TC线程只使用两个CPU;使用cpuset时,可以指定少于线程组中的CPU数目。(这对于cpubind不成立。)发送线程使用两个线程,使用cpubind将这些线程绑定到CPU 10和11上。主线程和复制线程可以重用这些CPU。

    这个示例展示了如何在24-CPU主机上启用超线程,留下CPU 10、11、22和23可用于操作系统函数和中断:

    NoOfFragmentLogParts=10
    ThreadConfig=ldm={count=10,cpubind=0-4,12-16,thread_prio=9,spintime=200}, \
    tc={count=4,cpuset=6-7,18-19,thread_prio=8},send={count=1,cpuset=8}, \
    recv={count=1,cpuset=20},main={count=1,cpuset=9,21},rep={count=1,cpuset=9,21}, \
    io={count=1,cpuset=9,21,thread_prio=8},watchdog={count=1,cpuset=9,21,thread_prio=9}

    接下来的一些示例包括idxbld的设置。第一个两个示例演示了如何使用cpusetcpubind定义的CPU集可以与其他(永久)线程类型的CPU集重叠,第一个使用cpuset,第二个使用cpubind

    ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
    io={cpubind=8},idxbld={cpuset=1-8}
    
    ThreadConfig=main,ldm={count=1,cpubind=1},idxbld={count=1,cpubind=1}

    下一个示例指定了I/O线程的CPU,但没有指定索引构建线程的CPU:

    ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
    io={cpubind=8}

    由于ThreadConfig设置只锁定线程到8个核心编号为1至8的核心,因此它等效于显示的设置:

    ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
    io={cpubind=8},idxbld={cpuset=1,2,3,4,5,6,7,8}

    为了充分利用ThreadConfig的增强稳定性,需要确保CPU被隔离,不受操作系统的中断或调度其他任务影响。在许多Linux系统上,您可以通过在/etc/sysconfig/irqbalance文件中设置IRQBALANCE_BANNED_CPUS0xFFFFF0,并使用isolcpus引导选项在grub.conf文件中来实现。具体信息,请参阅您的操作系统或平台文档。

磁盘数据配置参数. 影响Disk Data行为的配置参数包括以下内容:

  • DiskPageBufferEntries

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 64MB
    Range 4MB - 16TB
    Restart Type

    节点重启:需要对集群进行节点重启:需要对集群进行

    这是分配的页面条目(页面引用)的数量。它在DiskPageBufferMemory中指定为32K页面数。默认值通常足够,但如果您遇到非常大的事务问题在磁盘数据表上,您可能需要增加该参数的值。每个页面条目约需100字节。

  • DiskPageBufferMemory

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 64M
    Range 4M - 16T
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这确定了在磁盘上用于缓存页面的空间大小(以字节为单位),并在config.ini文件中的[ndbd][ndbd default]部分设置。

    如果将DiskPageBufferMemory的值设置太低,同时使用了默认数量以上的LDM线程(例如在ThreadConfig中设置为{ldm=6...}),当尝试将大型(例如500G)数据文件添加到磁盘基于的NDB表时,可能会出现问题,其中进程将长时间占用一个CPU核心。

    这是因为,当添加数据文件到表空间时,extent页面将被锁定在内存中,以便快速访问元数据。添加大型文件时,这个worker线程没有足够的内存来存储所有数据文件元数据。在这种情况下,您可以增加DiskPageBufferMemory值或添加较小的表空间文件。您可能还需要调整DiskPageBufferEntries

    您可以查询ndbinfo.diskpagebuffer表来帮助确定是否需要增加该参数的值以最小化不必要的磁盘 seeks。请参阅第25.6.17.31节,“The ndbinfo diskpagebuffer Table”,了解更多信息。

  • SharedGlobalMemory

    Version (or later) NDB 8.4.0
    Type or units 字节
    Default 128M
    Range 0 - 64T
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    该参数确定用于日志缓冲、磁盘操作(如页面请求和等待队列)、表空间元数据、日志文件组、UNDO 文件和数据文件的内存量。共享全局内存池还提供了满足UNDO_BUFFER__SIZE选项(用于CREATE LOGFILE GROUPALTER LOGFILE GROUP语句)的内存需求,包括由InitialLogFileGroup数据节点配置参数设置的默认值。可以在config.ini配置文件中的[ndbd]或[ndbd default]部分中设置SharedGlobalMemory,以字节为单位。

    默认值是128M

  • DiskIOThreadPool

    Version (or later) NDB 8.4.0
    Type or units 线程
    Default 2
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    这个参数确定了用于 Disk Data 文件访问的未绑定线程数。在DiskIOThreadPool引入之前,每个 Disk Data 文件都将创建一个线程,这可能会导致性能问题,特别是在使用非常大数据文件时。使用DiskIOThreadPool,您可以—例如—使用多个线程并行访问单个大型数据文件。

    这个参数只适用于 Disk Data I/O 线程。

    这个参数的最佳值取决于您的硬件和配置,并考虑以下因素:

    • 磁盘数据文件的物理分布。您可以通过将数据文件、undo日志文件和数据节点文件系统分配到不同的物理磁盘上来获得更好的性能。如果您这样做了某些或所有这些文件集,那么您可以(并且应该)设置DiskIOThreadPool以启用每个磁盘上的单独线程来处理文件。

      您还应该在使用单独的磁盘或磁盘组为 Disk Data 文件时禁用DiskDataUsingSameDisk;这将增加 Disk Data 表空间的检查点速度。

    • 磁盘性能和类型 。 Disk Data 文件处理可以容纳的线程数也取决于磁盘的速度和吞吐量。更快的磁盘和更高的吞吐量允许更多的磁盘 I/O 线程。我们的测试结果表明,固态硬盘驱动器可以处理许多更多的磁盘 I/O 线程,而传统磁盘则不能,因此建议将DiskIOThreadPool的值设置得更高。

      在使用固态硬盘驱动器时,特别是 NVMe 硬盘驱动器,还建议减少TimeBetweenGlobalCheckpoints的值。请参阅Disk Data latency parameters

    该参数的默认值为 2。

  • Disk Data 文件系统参数 。以下参数使得可以将 NDB 集群 Disk Data 文件置于特定目录中,而无需使用符号链接。

    更多信息,请见第25.6.11.1节,“NDB 集群磁盘数据对象”

  • 磁盘数据对象创建参数. 下两个参数在第一次启动集群时启用,您可以使用它们来创建磁盘数据日志文件组、表空间或两者,无需使用 SQL 语句。

    • InitialLogFileGroup

      Version (or later) NDB 8.4.0
      Type or units 字符串
      Default [请查看文档]
      Range ...
      Restart Type

      系统重启: 需要完全关闭和重新启动集群。 (NDB 8.4.0)

      这个参数可以用来指定在第一次启动集群时创建的日志文件组。InitialLogFileGroup 如下所示:

      InitialLogFileGroup = [name=name;] [undo_buffer_size=size;] file-specification-list
      
      file-specification-list:
          file-specification[; file-specification[; ...]]
      
      file-specification:
          filename:size

      日志文件组的名称name是可选的,缺省为DEFAULT-LGundo_buffer_size也可以是可选的,如果省略,它将缺省为64M。每个file-specification对应一个回滚日志文件,在file-specification-list中至少需要指定一个。在回滚日志文件中,根据已经设置的FileSystemPathFileSystemPathDDFileSystemPathUndoFiles的值进行 placement,就像它们是通过CREATE LOGFILE GROUPALTER LOGFILE GROUP语句创建的。

      请考虑以下内容:

      InitialLogFileGroup = name=LG1; undo_buffer_size=128M; undo1.log:250M; undo2.log:150M

      这等同于以下SQL语句:

      CREATE LOGFILE GROUP LG1
          ADD UNDOFILE 'undo1.log'
          INITIAL_SIZE 250M
          UNDO_BUFFER_SIZE 128M
          ENGINE NDBCLUSTER;
      
      ALTER LOGFILE GROUP LG1
          ADD UNDOFILE 'undo2.log'
          INITIAL_SIZE 150M
          ENGINE NDBCLUSTER;

      这个日志文件组是在使用--initial选项启动数据节点时创建的。

      初始日志文件组的资源将被添加到全局内存池中,包括由SharedGlobalMemory指定的值。

      如果使用该参数,应该总是将其设置在config.ini文件的[ndbd default]部分中。不同数据节点上设置不同的值时,NDB 集群的行为未定义。

    • InitialTablespace

      Version (or later) NDB 8.4.0
      Type or units 字符串
      Default [请参阅文档]
      Range ...
      Restart Type

      系统重启:需要完全关闭和重新启动集群。 (NDB 8.4.0)

      该参数可以用于指定在进行初始启动时创建 NDB 集群磁盘数据表空间的名称。InitialTablespace 的值如下所示:

      InitialTablespace = [name=name;] [extent_size=size;] file-specification-list

      表空间名称name是可选的,缺省为DEFAULT-TS。扩展大小extent_size也是可选的,缺省为1M。文件指定列表file-specification-list使用与InitialLogfileGroup参数相同的语法,唯一的区别是每个file-specification用于InitialTablespace对应于数据文件。在file-specification-list中至少需要指定一个。数据文件将根据FileSystemPathFileSystemPathDDFileSystemPathDataFiles的值进行 placement,就像它们是由CREATE TABLESPACEALTER TABLESPACE语句创建的。

      例如,考虑以下指定InitialTablespace的行,在config.ini文件中的[ndbd default]部分(与InitialLogfileGroup一样,这个参数总是应该在[ndbd default]部分设置,因为NDB集群在不同数据节点上设置不同的值时的行为未定义):

      InitialTablespace = name=TS1; extent_size=8M; data1.dat:2G; data2.dat:4G

      这等同于以下SQL语句:

      CREATE TABLESPACE TS1
          ADD DATAFILE 'data1.dat'
          EXTENT_SIZE 8M
          INITIAL_SIZE 2G
          ENGINE NDBCLUSTER;
      
      ALTER TABLESPACE TS1
          ADD DATAFILE 'data2.dat'
          INITIAL_SIZE 4G
          ENGINE NDBCLUSTER;

      这个表空间是在使用--initial选项启动数据节点时创建的,可以在创建NDB集群磁盘数据表后用于任何时候。

  • 磁盘数据延迟参数。以下两个参数可以用来改善NDB集群磁盘数据表的延迟问题处理。

    • MaxDiskDataLatency

      Version (or later) NDB 8.4.0
      Type or units 毫秒
      Default 0
      Range 0 - 8000
      Restart Type

      节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

      该参数控制磁盘访问的最大允许平均延迟(最大8000毫秒)。当达到这个限制时,NDB 将开始中止事务,以减少对 Disk Data I/O子系统的压力。使用0来禁用延迟检查。

    • DiskDataUsingSameDisk

      Version (or later) NDB 8.4.0
      Type or units 布尔值
      Default true
      Range ...
      Restart Type

      节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

      如果您的 Disk Data 表空间使用一个或多个独立磁盘,请将该参数设置为false。这样可以提高checkpoint到表空间的执行率,相比于共享磁盘时。

      DiskDataUsingSameDisktrue时,NDB将在内存checkpoint进行时减少 Disk Data 检查点的执行率,以帮助确保磁盘负载保持恒定。

磁盘数据和GCP Stop错误  GCP Stop错误,如Node nodeid killed this node because GCP stop was detected(错误2303)通常被称为GCP Stop错误。这些错误发生在redo日志不能快速 enough地flush到磁盘时,这通常是由于慢速磁盘和磁盘吞吐量不足。

您可以通过使用更快的磁盘,并将Disk Data文件放在数据节点文件系统外的磁盘上来帮助防止这些错误的发生。减少TimeBetweenGlobalCheckpoints的值可能会减少每个全局检查点写入的数据量,从而提供一些保护对redo日志缓冲区溢出在尝试写入全局检查点时;然而,减少这个值也允许更少的时间来写入GCP,因此需要小心。

此外,对DiskPageBufferMemory的考虑如前所述,也非常重要的是将DiskIOThreadPool配置参数设置正确;如果DiskIOThreadPool设置太高,很可能会导致GCP Stop错误(Bug #37227)。

GCP 停止可能是由保存或提交超时引起的;TimeBetweenEpochsTimeout 数据节点配置参数确定了提交超时。然而,可以通过将该参数设置为 0 来禁用两种类型的超时。

配置发送缓冲区内存分配参数。 发送缓冲区内存从所有传输器共享的内存池中动态分配,这意味着可以根据需要调整发送缓冲区的大小。 (之前,NDB kernel 对每个节点使用固定大小的发送缓冲区,该缓冲区在节点启动时分配且不能在节点运行时更改。) TotalSendBufferMemoryOverLoadLimit 数据节点配置参数允许设置发送缓冲区内存分配的限制。有关这些参数的使用(包括SendBufferMemory),请参阅第25.4.3.14节,“NDB 集群发送缓冲区参数配置”

请见第25.6.7节,“在线添加NDB集群数据节点”

redo日志超出提交处理。当 redo 日志写入磁盘时间超过RedoOverCommitLimit秒,或者超过RedoOverCommitCounter次时,可以控制数据节点对操作的处理方式。在这种情况下,发送事务的 API 节点可以选择将操作排队重新尝试或中止它们,这取决于DefaultOperationRedoProblemAction。设置超时时间和次数的数据节点配置参数在以下列表中描述:

  • RedoOverCommitCounter

    Version (or later) NDB 8.4.0
    Type or units numeric
    Default 3
    Range 1 - 4294967039 (0xFFFFFEFF)
    Restart Type

    Node Restart: 需要对集群进行滚动重启。 (NDB 8.4.0)

    RedoOverCommitLimit超过尝试将给定的 redo 日志写入磁盘的次数时,这些未提交的事务将被中止,并且由这些事务产生的 API 节点根据其DefaultOperationRedoProblemAction值处理这些事务(通过队列重新尝试或中止它们)。

  • RedoOverCommitLimit

    Version (or later) NDB 8.4.0
    Type or units
    Default 20
    Range 1 - 4294967039 (0xFFFFFEFF)
    Restart Type

    该参数设置了在超时前尝试将给定的redo日志写入磁盘的上限秒数。数据节点尝试刷新这个redo日志,但花费时间超过RedoOverCommitLimit的次数被记录,并与RedoOverCommitCounter进行比较,当刷新时间太长超过该参数值时,未提交的事务将被中止。发生这种情况时,API节点根据DefaultOperationRedoProblemAction设置(它可以队列操作以重试或中止它们)处理这些事务的操作。

控制重启尝试。 可以通过数据节点配置参数MaxStartFailRetriesStartFailRetryDelay来对重启尝试进行细粒度控制。

MaxStartFailRetries限制了在放弃启动数据节点之前的总重试次数,StartFailRetryDelay设置了重试尝试之间的秒数。这些参数在这里列出:

  • StartFailRetryDelay

    Version (or later) NDB 8.4.0
    Type or units 无符号整数
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    使用该参数可以设置数据节点在启动失败时尝试重启的秒数。默认值为 0(无延迟)。

    这两个参数和MaxStartFailRetries都将被忽略,除非StopOnError等于 0。

  • MaxStartFailRetries

    Version (or later) NDB 8.4.0
    Type or units 无符号整数
    Default 3
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要对集群进行滚动重启。 (NDB 8.4.0)

    使用该参数来限制数据节点在启动失败时尝试重启的次数。默认值为3次。

    这两个参数和StartFailRetryDelay都将被忽略,除非StopOnError等于0。

NDB 索引统计参数。 以下列表中的参数与 NDB 索引统计生成相关。

重启类型。 本节参数描述中使用的重启类型信息,如下表所示:

表25.15 NDB Cluster 重启类型

Symbol Restart Type Description
N 节点 可以使用滚动重启(见第25.6.5节,“NDB集群的滚动重启”)更新参数
S 系统 必须将所有集群节点完全关闭,然后重新启动,以更改该参数
I 初始 数据节点必须使用--initial选项重新启动