Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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 服务器 my.cnfmy.ini 文件中使用,在这种情况下它们是区分大小写的。

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

所有这些参数也适用于 ndbmtdndbd 的多线程版本)。三个额外的数据节点配置参数—MaxNoOfExecutionThreadsThreadConfigNoOfFragmentLogParts—仅适用于 ndbmtd,对 ndbd 无效。有关更多信息,请参阅 多线程配置参数(ndbmtd)。另请参阅 第 25.5.3 节,“ndbmtd — NDB 集群数据节点守护进程(多线程)”

标识数据节点。 数据节点标识符(NodeId 或 Id 值)可以在命令行上分配或在配置文件中分配。

  • NodeId

    Version (or later) NDB 8.3.0
    Type or units unsigned
    Default [...]
    Range 1 - 144
    Restart Type

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

    唯一的节点ID用作集群内部消息的节点地址。对于数据节点,这是一个介于1到144(含)之间的整数。每个集群节点必须具有唯一的标识符。

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

  • ExecuteOnComputer

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

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

    这指的是在[computer]部分中定义的计算机的Id

    Important

    该参数已弃用,并将在未来版本中删除。请使用HostName参数代替。

  • 该节点的节点ID只能分配给明确请求它的连接。管理服务器请求“任何”节点ID不能使用该节点ID。该参数可用于在同一主机上运行多个管理服务器时,并且HostName不足以区分进程。旨在用于测试。

  • HostName

    Version (or later) NDB 8.3.0
    Type or units 名称或IP地址
    Default localhost
    Range ...
    Restart Type

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

  • ServerPort

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

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

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

    然而,如果您需要在防火墙中打开特定端口,以便从SQL节点或API节点到数据节点的通信,您可以在[ndbd]部分或[ndbd default]部分的config.ini文件中设置该参数的值,然后打开具有该号码的端口以接受来自SQL节点或API节点的入站连接。

    Note

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

  • TcpBind_INADDR_ANY

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

  • NodeGroup

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

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

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

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

  • LocationDomainId

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 0
    Range 0 - 16
    Restart Type

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

    将数据节点分配给特定的 可用性域(也称为可用性区域)内的云环境中。通过告知 NDB 哪些节点在哪些可用性域中,性能可以在云环境中通过以下方式改善:

    • 如果请求的数据未在同一节点上找到,读取可以被定向到同一可用性域中的另一个节点。

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

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

    • 仲裁器可以从没有数据节点的可用性域中选择,或者,如果找不到这样的可用性域,从第三个可用性域中选择。

    LocationDomainId 取一个介于 0 和 16 之间的整数值,包括 0,使用 0 与不设置该参数相同。

  • NoOfReplicas

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 2
    Range 1 - 4
    Restart Type

    初始系统重启: 需要完全关闭集群,wipe 和从 备份 中恢复集群文件系统,然后重新启动集群。 (NDB 8.3.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。

  • 数据目录

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

    初始节点重启:需要滚动重启集群;每个数据节点必须使用--initial重新启动。(NDB 8.3.0)

    该参数指定了跟踪文件、日志文件、PID 文件和错误日志的目录。

    默认是数据节点进程的工作目录。

  • 文件系统路径

    Version (or later) NDB 8.3.0
    Type or units 路径
    Default 数据目录
    Range ...
    Restart Type

    初始节点重启:需要滚动重启集群;每个数据节点必须使用--initial重新启动。(NDB 8.3.0)

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

    Note

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

    推荐的目录层次结构为 NDB 集群包括/var/lib/mysql-cluster,在其中创建一个节点文件系统的目录。该子目录的名称包含节点 ID。例如,如果节点 ID 是 2,则该子目录名为ndb_2_fs

  • 备份数据目录

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

    初始节点重启:需要滚动重启集群;每个数据节点必须使用--initial重新启动。(NDB 8.3.0)

    该参数指定了备份的目录。

    Important

    字符串'/BACKUP'总是追加到该值。例如,如果您将备份数据目录设置为/var/lib/cluster-data,那么所有备份都将存储在/var/lib/cluster-data/BACKUP下。这也意味着文件系统路径参数指定的位置下的BACKUP目录是备份的有效位置。

数据内存、索引内存和字符串内存

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

Note

索引内存已弃用,并将在未来版本的 NDB 集群中删除。请参阅以下描述以获取更多信息。

  • 数据内存

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

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

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

    DataMemory分配的内存用于存储实际记录和索引。每个记录都有 16 字节的开销;每个记录还会因为存储在 32KB 页上而产生 128 字节的开销(见下文)。每页还会因为记录存储在一个页上而产生少量的浪费。

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

    最大记录大小为 30000 字节。

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

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

    一旦一页被分配,就不能将其返回到空闲页池中,除非删除表。(这也意味着DataMemory 页,一旦分配给某个表,就不能被其他表使用。)执行数据节点恢复也会压缩分区,因为所有记录都被插入到其他 live 节点的空白分区中。

    DataMemory 内存空间还包含 UNDO 信息:对于每个更新,unaltered 记录的副本将被分配在 DataMemory 中。还有一个引用每个副本的有序表索引。唯一哈希索引只有在唯一索引列被更新时才会被更新,在提交时旧条目将被删除。因此,也需要分配足够的内存来处理应用程序使用集群时的最大事务。在任何情况下,执行少量大事务与执行许多小事务没有优势,因为:

    • 大事务并不比小事务快

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

    • 大事务使用更多的内存

    默认的 DataMemory 值为 98MB。最小值为 1MB。没有最大大小,但实际上最大大小必须根据机器上的物理 RAM 量和操作系统对每个进程的内存承诺来确定。32 位操作系统通常限制为每个进程 2-4GB;64 位操作系统可以使用更多。对于大型数据库,可能更喜欢使用 64 位操作系统出于这个原因。

  • IndexMemory

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

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

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

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

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

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

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

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

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

    在前面的公式中,key_size 是有序索引键的大小(以字节为单位),key_attributes 是有序索引键中的属性数量,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.3.0
    Type or units % 或字节
    Default 25
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

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

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

    默认值为 25,即 25% 的默认最大值。

    在大多数情况下,默认值应该足够,但是当您拥有许多 NDB 表(1000 或更多)时,可能会出现 Error 773 字符串内存不足,请修改 StringMemory 配置参数:永久错误:模式错误,在这种情况下,您应该增加该值。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 字节的数据加 12 字节的开销。没有可空列可以节省 4 字节的开销。此外,我们还有两个有序索引在列 ab 上,每个记录大约消耗 10 字节。还有一个主键哈希索引在基础表上,使用大约 29 字节的记录。唯一约束是通过一个单独的表实现的,该表使用 b 作为主键和 a 作为列,该表还消耗了额外的 29 字节的索引内存每个记录,以及 8 字节的记录数据加 12 字节的开销。

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

您可以看到,哈希索引占用了相当多的内存空间;然而,它们提供了非常快速的数据访问方式。它们也用于 NDB 集群中处理唯一约束。

目前,唯一的分区算法是哈希和有序索引是每个节点的本地的。因此,不能使用有序索引来处理一般情况下的唯一约束。

一个重要的点是对于IndexMemoryDataMemory,总数据库大小是每个节点组的所有数据内存和所有索引内存的总和。每个节点组用于存储复制信息,因此如果有四个节点具有两个片段副本,那么就有两个节点组。因此,总数据内存可用是每个数据节点的2 × DataMemory

强烈建议将DataMemoryIndexMemory设置为所有节点的相同值。数据分布是所有节点在集群中的均匀分布,因此任何节点可用的最大空间不能大于集群中最小节点的空间。

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

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

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

节点重新启动: 需要集群的滚动重新启动。(NDB 8.3.0)

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

事务参数.  接下来讨论的几个[ndbd]参数对系统处理事务的能力产生了重要影响。MaxNoOfConcurrentTransactions设置了节点中并发事务的数量。MaxNoOfConcurrentOperations设置了更新阶段或同时锁定的记录数量。

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

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

  • MaxNoOfConcurrentTransactions

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

    节点重新启动: 需要集群的滚动重新启动。(NDB 8.3.0)

    每个集群数据节点都需要一个事务记录,以便在集群中跟踪活动事务。事务记录的协调任务是分布在所有数据节点上的。集群中的总事务记录数量是每个节点中的事务数量乘以集群中的节点数量。

    事务记录是分配给每个 MySQL 服务器的。每个连接到 MySQL 服务器的连接至少需要一个事务记录,加上每个连接访问的每个表的附加事务对象。这意味着集群中的总事务记录数量的合理最小值可以表示为

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

    假设集群中有10个SQL节点。单个连接涉及10个表,需要11个事务记录;如果事务中有10个这样的连接,那么每个MySQL服务器需要110个事务记录,或者总共需要1100个事务记录。每个数据节点可以处理TotalNoOfConcurrentTransactions / 数据节点数的记录。对于具有4个数据节点的NDB Cluster,可以将每个数据节点的MaxNoOfConcurrentTransactions设置为1100 / 4 = 275。此外,还需要为故障恢复提供保障,确保单个节点组可以处理所有并发事务;换言之,每个数据节点的MaxNoOfConcurrentTransactions应该足以涵盖等于TotalNoOfConcurrentTransactions / 节点组数的交易数量。如果该集群只有一个节点组,那么MaxNoOfConcurrentTransactions应该设置为1100(与整个集群的并发事务数量相同)。

    此外,每个事务至少涉及一个操作;因此,设置的MaxNoOfConcurrentTransactions值应该始终小于或等于MaxNoOfConcurrentOperations的值。

    该参数必须对所有集群数据节点设置相同的值。这是因为,当数据节点失败时, oldest 生存节点将重新创建失败节点中的所有事务状态。

    可以使用滚动重新启动更改该值,但是在此过程中,集群上的流量必须足以确保不超过旧值和新值之间的交易数量。

    默认值为4096。

  • MaxNoOfConcurrentOperations

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 32K
    Range 32 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

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

    对于每个更新集群数据的事务,会在事务协调器和执行实际更新的节点中保留记录。这些记录包含用于回滚、锁定队列和其他目的的状态信息。

    该参数的最小值应该设置为同时更新记录的数量,除以集群数据节点的数量。例如,在具有四个数据节点的集群中,预计处理一百万个并发更新的事务,应该将该值设置为1000000 / 4 = 250000。为了提供对故障的弹性,建议将该值设置为足以使单个数据节点处理其节点组的负载的值。在单个节点组的情况下,这等于整个集群的并发操作数量。

    因为每个事务至少涉及一个操作,因此MaxNoOfConcurrentOperations的值应该始终大于或等于MaxNoOfConcurrentTransactions的值。

    锁定的读取查询也会创建操作记录。在每个节点中分配了一些额外的空间,以便处理节点之间的不均匀分布的情况。

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

    默认值为32768。

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

    执行非常大的事务需要在事务协调器中记录操作记录的数量,相当于事务中涉及的读取、更新和删除操作的数量。然而,这些操作记录分布在八个节点上。因此,如果需要配置系统以处理一个非常大的事务,那么将两个部分分开配置是一个好主意。MaxNoOfConcurrentOperations始终用于计算事务协调器部分的操作记录数量。

    此外,了解操作记录的内存要求也很重要。这些记录每个大约消耗1KB。

  • MaxNoOfLocalOperations

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 未定义
    Range 32 - 4294967039 (0xFFFFFEFF)
    Deprecated 是(在 NDB 8.0 中)
    Restart Type

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

    默认情况下,该参数计算为 1.1 × MaxNoOfConcurrentOperations。这适合具有许多同时事务的系统,其中没有任何一个事务非常大。如果需要处理一个非常大的事务,并且有许多节点,那么覆盖默认值并明确指定该参数是一个好主意。

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

  • MaxDMLOperationsPerTransaction

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

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

    该参数限制事务的大小。如果事务需要超过该数量的 DML 操作,则事务将被中止。

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

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

这些参数的默认值对于大多数情况都是足够的。然而,需要支持大量行或操作的事务的用户可能需要增加这些值以启用系统中的更好并行性,而需要小事务的用户可以减少这些值以节省内存。

  • MaxNoOfConcurrentIndexOperations

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

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

    对于使用唯一哈希索引的查询,执行阶段还使用另一个临时操作记录池。该参数设置该记录池的大小。因此,该记录仅在执行查询的一部分时分配,一旦该部分执行完毕,该记录将被释放。abort 和 commit 的状态处理由正常操作记录处理,其中池大小由参数 MaxNoOfConcurrentOperations 设置。

    该参数的默认值为 8192。只有在非常高并行度使用唯一哈希索引的情况下,才需要增加该值。使用较小的值可以节省内存,如果 DBA 确信集群不需要高并行度。

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

  • 触发的最大数量

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

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

    默认值为触发的最大数量是4000,这对于大多数情况已经足够。如果DBA确信集群中的并行性需求不高,可以降低该值。

    当执行影响唯一哈希索引的操作时,会创建一条记录。插入或删除表中的记录,或者更新唯一哈希索引中的列,会触发插入或删除索引表中的记录。结果记录用于表示该索引表操作,直到原始操作完成。该操作非常短暂,但可能需要大量记录池来处理许多并行写操作的情况。

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

  • 事务缓冲区内存

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

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

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

    默认值为事务缓冲区内存是1MB。

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

事务资源分配参数。 下面列表中的参数用于在事务协调器 (DBTC) 中分配事务资源。将任何一个参数设置为默认值 (0) 将为数据节点的 25% 的估算总使用量分配事务内存。这些参数的实际最大可能值通常由数据节点可用的内存量限制;将它们设置为无论什么值都不会影响数据节点的总内存分配。此外,您还应该注意,这些参数控制数据节点独立于 MaxDMLOperationsPerTransaction, MaxNoOfConcurrentIndexOperations, MaxNoOfConcurrentOperations, MaxNoOfConcurrentScans, MaxNoOfConcurrentTransactions, MaxNoOfFiredTriggers, MaxNoOfLocalScans, 或 TransactionBufferMemory 的设置(见 事务参数事务临时存储)。

  • ReservedConcurrentIndexOperations

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

    在一个数据节点上具有专用资源的同时索引操作的数量。

  • ReservedConcurrentOperations

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

    在一个数据节点上具有专用资源的同时操作的数量。

  • ReservedConcurrentScans

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

    在一个数据节点上具有专用资源的同时扫描的数量。

  • ReservedConcurrentTransactions

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

    在一个数据节点上具有专用资源的同时事务的数量。

  • ReservedFiredTriggers

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    在一个 ndbd(DB) 节点上专门用于触发器的资源数量。

  • ReservedLocalScans

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    在一个数据节点上同时进行碎片扫描的专门资源数量。

  • ReservedTransactionBufferMemory

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

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

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

  • TransactionMemory

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

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

    Important

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

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

    • 如果设置了 TransactionMemory,则使用该值来确定事务内存。

    • 否则,事务内存将按照 NDB 8.0 之前的方式计算。

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

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

    有关 NDB 集群数据节点中的资源分配,请参阅 第 25.4.3.13 节,“数据节点内存管理”

扫描和缓冲 还有其他 [ndbd] 参数在 Dblqh 模块中(在 ndb/src/kernel/blocks/Dblqh/Dblqh.hpp 中),这些参数影响读取和更新操作。这些参数包括 ZATTRINBUF_FILESIZE,默认设置为 10000 × 128 字节(1250KB),和 ZDATABUF_FILE_SIZE,默认设置为 10000 × 16 字节(大约 156KB)的缓冲区空间。到目前为止,我们没有收到用户报告,也没有我们的测试结果表明这些编译时限制需要增加。

  • BatchSizePerLocalScan

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

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

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

    已弃用。

    BatchSizePerLocalScanBatchSize在 SQL 节点中的定义存在强烈的关联。

  • LongMessageBuffer

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

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

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

    该参数很少需要从默认值更改。

  • MaxFKBuildBatchSize

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 64
    Range 16 - 512
    Restart Type

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

    用于构建外键的最大扫描批量大小。增加该参数的值可能会加速外键的构建,但会对正在进行的流量产生更大的影响。

  • MaxNoOfConcurrentScans

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 256
    Range 2 - 500
    Restart Type

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

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

    扫描实际上在两个情况下执行。第一个情况是当没有哈希或有序索引来处理查询时,查询将通过执行全表扫描来执行。第二个情况是当没有哈希索引来支持查询,但存在有序索引时,使用有序索引意味着执行并行范围扫描。顺序仅在本地分区上保持,因此需要在所有分区上执行索引扫描。

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

  • MaxNoOfLocalScans

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

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

    指定了如果许多扫描未完全并行化时的本地扫描记录数。如果未提供本地扫描记录数,则其计算方式如下所示:

    4 * MaxNoOfConcurrentScans * [# data nodes] + 2

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

  • MaxParallelCopyInstances

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 0
    Range 0 - 64
    Restart Type

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

    该参数设置在节点重启或系统重启期间的并行复制阶段使用的并行度。当一个节点启动时,它会与已经具有当前数据的节点同步,通过从更新的节点复制更改的记录。由于完全并行可能导致过载情况,因此 MaxParallelCopyInstances 提供了一种减少并行度的方法。该参数的默认值为 0,这意味着有效的并行度等于启动节点和更新节点中的 LDM 实例数。

  • MaxParallelScansPerFragment

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

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

    可以配置允许的最大并行扫描数(TUP 扫描和 TUX 扫描)在开始串行处理之前排队。可以增加该值,以利用未使用的 CPU 并提高扫描性能。

  • MaxReorgBuildBatchSize

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 64
    Range 16 - 512
    Restart Type

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

    重新组织表分区时使用的最大扫描批量大小。增加该参数的值可能会加速重新组织,但会对正在进行的流量产生更大的影响。

  • MaxUIBuildBatchSize

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 64
    Range 16 - 512
    Restart Type

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

    构建唯一键时使用的最大扫描批量大小。增加该参数的值可能会加速构建,但会对正在进行的流量产生更大的影响。

内存分配

MaxAllocate

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

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

该参数曾经在 NDB 集群的旧版本中使用,但是在 NDB 8.3 中没有效果。它已弃用,并将在未来版本中删除。

多个传输器

NDB 为数据节点之间的通信分配多个传输器。可以通过设置适当的 NodeGroupTransporters 参数值来影响分配的传输器数量,该参数是在该版本中引入的。

NodeGroupTransporters

Version (or later) NDB 8.3.0
Type or units 整数
Default 0
Range 0 - 32
Restart Type

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

该参数确定了节点组之间使用的传输器数量。默认值(0)表示使用的传输器数量与节点中的 LDM 实例数量相同。这应该足以满足大多数用例,因此通常不需要从默认值更改该值。

设置 NodeGroupTransporters 为大于 LDM 线程数或 TC 线程数(以较高者为准)时,NDB 将使用这两个数字中的最大值线程数。这意味着大于这个值的设置将被忽略。

哈希映射大小

DefaultHashMapSize

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

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

这个参数的原始用途是为了便于升级和降级到非常旧的版本,以不同的默认哈希映射大小。这不是从 NDB 集群 7.3(或更高版本)升级到更高版本的问题。

在线降低这个参数值后,不支持在创建或修改表时使用 DefaultHashMapSize 等于 3840。

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

  • FragmentLogFileSize

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

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

    设置这个参数可以直接控制 redo 日志文件的大小。这在 NDB 集群在高负载下操作时非常有用,无法快速关闭 fragment 日志文件之前尝试打开新文件(只有 2 个 fragment 日志文件可以同时打开);增加 fragment 日志文件的大小可以给集群更多时间在尝试打开每个新 fragment 日志文件之前。

    有关 fragment 日志文件的更多信息,请参阅 NoOfFragmentLogFiles 的描述。

  • InitialNoOfOpenFiles

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

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

    这个参数设置内部线程的初始数量,以便打开文件。

    默认值是 27。

  • InitFragmentLogFiles

    Version (or later) NDB 8.3.0
    Type or units [见值]
    Default SPARSE
    Range SPARSE, FULL
    Restart Type

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

    默认情况下,fragment 日志文件是在数据节点的初始启动时稀疏创建的——也就是说,取决于操作系统和文件系统的类型,不是所有字节都被写入磁盘。但是,可以通过这个参数强制写入所有字节,忽略平台和文件系统类型。InitFragmentLogFiles 可以取以下两个值:

    • SPARSE. Fragment 日志文件稀疏创建。这是默认值。

    • FULL. 强制写入 fragment 日志文件的所有字节。

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

  • EnablePartialLcp

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

    节点重启:需要集群的滚动重启滚动重启。(NDB 8.3.0)

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

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

    有关完整和部分 LCP 使用的文件和目录的更多信息,请参阅 NDB 集群数据节点文件系统目录

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

  • LcpScanProgressTimeout

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

    节点重启:需要集群的滚动重启滚动重启。(NDB 8.3.0)

    本地检查点碎片扫描监视器定期检查每个碎片扫描的进度,如果在给定的时间内没有进度,将关闭节点。该间隔可以使用 LcpScanProgressTimeout 数据节点配置参数设置,设置本地检查点可以被阻塞的最大时间之前监视器关闭节点。

    默认值为 60 秒(与之前的版本兼容)。将该参数设置为 0 将禁用 LCP 碎片扫描监视器。

  • MaxNoOfOpenFiles

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

    节点重启:需要集群的滚动重启滚动重启。(NDB 8.3.0)

    该参数设置了内部线程的上限,以便打开文件。任何需要更改该参数的情况都应报告为 bug

    默认值为 0。但是,该参数的最小值为 20。

  • MaxNoOfSavedMessages

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 25
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启:需要集群的滚动重启滚动重启。(NDB 8.3.0)

    该参数设置错误日志中的最大错误数目,以及在覆盖现有文件之前保留的跟踪文件的最大数目。跟踪文件是在节点崩溃时生成的。

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

  • MaxLCPStartDelay

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

    节点重启:需要集群的滚动重启滚动重启。(NDB 8.3.0)

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

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

  • NoOfFragmentLogFiles

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 16
    Range 3 - 4294967039 (0xFFFFFEFF)
    Restart Type

    初始节点重启:需要滚动重启集群;每个数据节点必须使用--initial重启。(NDB 8.3.0)

    该参数设置节点的 REDO 日志文件数目,从而确定了 REDO 日志记录的空间分配。因为 REDO 日志文件是环形组织的,因此非常重要的是,第一个和最后一个日志文件(有时称为“头”和“尾”日志文件)不应该太接近。当它们太接近时,节点将开始中止所有包含更新的事务,因为没有足够的空间来记录新的日志记录。

    一个 REDO 日志记录不会被删除,直到两个本地检查点都已完成,因为该日志记录被插入。检查点频率由其自己的配置参数确定,该参数在本章节的其他地方讨论。

    默认参数值为 16,这意味着 16 个 4MB 的文件,总共 1024MB。单个日志文件的大小可以使用FragmentLogFileSize参数配置。在需要大量更新的场景中,NoOfFragmentLogFiles的值可能需要设置为 300 或更高,以提供足够的空间来记录 REDO 日志。

    如果检查点速度慢,数据库写入很多,日志文件已满,日志尾部不能被截断以免危及恢复,所有更新事务将被中止,内部错误代码为 410(日志文件空间暂时不足)。这种情况将持续下去,直到检查点完成,日志尾部可以被移动。

    Important

    该参数不能在“飞行”中更改;您必须使用 --initial 重新启动节点。如果您想更改集群中所有数据节点的该值,可以使用滚动节点重启(使用 --initial 启动每个数据节点)。

  • RecoveryWork

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 60
    Range 25 - 100
    Restart Type

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    LCP 文件的存储开销百分比。该参数只有在EnablePartialLcp为 true 时才生效,即只有在启用部分本地检查点时才生效。较高的值意味着:

    • 每个 LCP 写入的记录较少,LCP 使用更多的空间

    • 重启时需要更多的工作

    较低的 RecoveryWork 值意味着:

    • 每个 LCP 写入的记录较多,但 LCP 需要较少的磁盘空间。

    • 重启时需要较少的工作,但是在正常操作期间需要更多的工作

    例如,将 RecoveryWork 设置为 60 意味着 LCP 的总大小约为 1 + 0.6 = 1.6 倍于要 checkpoint 的数据大小。这意味着在恢复阶段,需要比使用完整 checkpoint 时多 60% 的工作。(这在其他阶段被补偿,以至于使用部分 LCP 的重启速度仍然比使用完整 LCP 快。)为了不填充 redo 日志,需要以 1 + (1 / RecoveryWork) 倍的速率写入数据变化率—因此,当 RecoveryWork = 60 时,需要以大约 1 + (1 / 0.6) = 2.67 倍的速率写入数据变化率。换言之,如果数据变化率为 10 MByte 每秒,那么 checkpoint 需要以大约 26.7 MByte 每秒的速率写入。

    RecoveryWork 设置为 40 意味着只需要 1.4 倍的 LCP 大小(因此恢复阶段的时间缩短了 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(三个集合,每个集合包含 100 个 LCP,分别是插入、更新和删除),并在每个 LCP 之后报告 LCP 的大小。您可以通过更改源代码中的 recovery_workinsert_workdelete_work 的值,并重新编译来改变模拟结果。有关更多信息,请参阅程序的源代码。

  • InsertRecoveryWork

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 40
    Range 0 - 70
    Restart Type

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

    插入行的 RecoveryWork 的百分比。较高的值增加了本地 checkpoint 期间的写入次数,并减少了 LCP 的总大小。较低的值减少了 LCP 期间的写入次数,但结果是 LCP 需要更多的空间,从而使恢复时间更长。当 EnablePartialLcp 为 true 时,这个参数才生效,也就是说,只有在启用部分本地 checkpoint 时才生效。

  • EnableRedoControl

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

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

    启用自适应 checkpoint 速度以控制 redo 日志使用。

    启用时(默认情况),EnableRedoControl 允许数据节点更灵活地控制写入 LCP 到磁盘的速率。更具体地说,启用该参数意味着数据节点可以使用更高的写入速率,以便更快地完成 LCP 并截断 redo 日志,从而减少恢复时间和磁盘空间需求。这项功能允许数据节点更好地利用现代固态存储设备和协议(如固态驱动器(SSD)使用非易失性存储器表达(NVMe))提供的更高 I/O 率和带宽。

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

元数据对象。 下一组 [ndbd] 参数定义了元数据对象的池大小,用于定义集群中使用的最大数量的属性、表、索引和触发器对象。

Note

这些只是对集群的 建议,任何未指定的参数将恢复到默认值。

  • MaxNoOfAttributes

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 1000
    Range 32 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    该参数设置了集群中定义的最大属性数量的建议值;与 MaxNoOfTables 类似,不是硬性上限。

    (在旧版本的 NDB 集群中,该参数有时被视为某些操作的硬性限制。这导致了 NDB 集群复制的问题,当时可能创建了比 MaxNoOfAttributes 更多的表,并且有时会在某些情况下导致混淆。)

    默认值为 1000, 最小可能值为 32。最大值为 4294967039。每个属性在每个节点上消耗大约 200 字节的存储空间,因为所有元数据都在服务器上完全复制。

    在设置 MaxNoOfAttributes 时,需要提前为将来的 ALTER TABLE 语句做好准备。这是因为在执行 ALTER TABLE 语句时,需要使用三倍于原始表的属性数量,并且是一个良好的实践是允许双倍这个数量。例如,如果 NDB 集群表具有最多属性 (greatest_number_of_attributes) 的数量为 100,那么 MaxNoOfAttributes 的一个良好的起点值将是 6 * greatest_number_of_attributes = 600

    您还应该估算每个表的平均属性数量,并将其乘以 MaxNoOfTables。如果这个值大于前一个值,那么您应该使用较大的值。

    假设您可以创建所有所需的表格而不出现问题,那么您应该通过尝试实际的 ALTER TABLE 语句来验证这个值是否足够。如果这不成功,那么您应该将 MaxNoOfAttributes 增加到另一个 MaxNoOfTables 的倍数,并再次测试。

  • MaxNoOfTables

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

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

    每个表对象都分配了一个唯一的哈希索引对象。在集群中,表对象的数量是有限的;与 MaxNoOfAttributes 类似,不是硬性上限。

    (在旧版本的 NDB 集群中,该参数有时被视为某些操作的硬性限制。这导致了 NDB 集群复制的问题,当时可能创建了比 MaxNoOfTables 更多的表,并且有时会在某些情况下导致混淆。)

    对于每个具有 BLOB 数据类型的属性,一个额外的表用于存储大多数 BLOB 数据。这些表也必须在定义总表数时考虑。

    该参数的默认值为 128。最小值为 8,最大值为 20320。每个表对象在每个节点上消耗大约 20KB。

    Note

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 之和不得超过 232 − 2 (4294967294)。

  • MaxNoOfOrderedIndexes

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 128
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

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

    该参数的默认值为 128。每个索引对象在每个节点上消耗大约 10KB。

    Note

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 之和不得超过 232 − 2 (4294967294)。

  • MaxNoOfUniqueHashIndexes

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 64
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

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

    默认值为 64。每个索引消耗大约 15KB。

    Note

    MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes 之和不得超过 232 − 2 (4294967294)。

  • MaxNoOfTriggers

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 768
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

    内部更新、插入和删除触发器被分配给每个唯一哈希索引。(这意味着三个触发器对象被创建 для每个唯一哈希索引。)然而,一个有序索引只需要一个触发器对象。备份也使用三个触发器对象 для每个普通表在集群中。

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

    该参数设置集群中的触发器对象的最大数量。

    默认值为 768。

  • MaxNoOfSubscriptions

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

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

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

    默认值为 MaxNoOfSubscriptions 是 0,它被视为等于 MaxNoOfTables。每个订阅消耗 108 字节。

  • MaxNoOfSubscribers

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

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

    只有在使用 NDB 集群复制时,这个参数才有趣。默认值为 0。它被视为 2 * MaxNoOfTables + 2 * [API 节点数]。每个订阅者使用 16 字节的内存。

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

    有关更多信息,请参阅 第 25.7 节,“NDB 集群复制”

  • MaxNoOfConcurrentSubOperations

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

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

    该参数设置了集群中所有 API 节点可以同时执行的操作数量上限。默认值(256)足以满足正常操作,可能只需要在有许多 API 节点同时执行大量操作的情况下进行调整。

布尔参数。 数据节点的行为也受到一组 [ndbd] 参数的影响,这些参数采用布尔值。这些参数可以通过将其设置为 1Y 来指定为 TRUE,或者通过将其设置为 0N 来指定为 FALSE

  • CompressedLCP

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

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

    将此参数设置为 1 可以使本地检查点文件被压缩。使用的压缩算法相当于 gzip --fast,可以节省 50% 或更多的数据节点存储未压缩检查点文件所需的空间。压缩 LCP 可以为单个数据节点或所有数据节点(通过在 [ndbd default] 部分的 config.ini 文件中设置此参数)启用。

    Important

    您不能将压缩的本地检查点还原到不支持此功能的 MySQL 版本的集群中。

    默认值是 0(禁用)。

  • CrashOnCorruptedTuple

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

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

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

  • Diskless

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

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

    可以将 NDB 集群表指定为 diskless,这意味着表不会被 checkpoint 到磁盘,也不会进行日志记录。这些表仅存在于主内存中。使用 diskless 表的结果是,表和表中的记录都不会在崩溃时幸存。但是,当操作在 diskless 模式下时,可以在没有磁盘的计算机上运行 ndbd

    Important

    启用此功能将使整个集群在 diskless 模式下运行。

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

    Diskless 默认情况下是禁用的。

  • EncryptedFileSystem

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

    初始节点重启: 需要集群的 滚动重启;每个数据节点都必须使用 --initial 重新启动。(NDB 8.3.0)

    加密 LCP 和表空间文件,包括撤销日志和重做日志。默认情况下禁用 (0);设置为 1 以启用。

    Important

    启用文件系统加密时,必须在启动每个数据节点时提供密码,使用 --filesystem-password--filesystem-password-from-stdin 选项。否则,数据节点无法启动。

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

  • LateAlloc

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 1
    Range 0 - 1
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

    在与管理服务器建立连接后分配此数据节点的内存。默认情况下启用。

  • LockPagesInMainMemory

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 2
    Restart Type

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

    对于一些操作系统,包括 Solaris 和 Linux,可以锁定进程到内存中,从而避免交换到磁盘上。这可以帮助保证集群的实时特性。

    该参数采用整数值 012

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

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

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

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

    Note

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

    Important

    glibc 2.10 开始,glibc 使用每线程arena来减少共享池的锁争用,从而消耗实际内存。在一般情况下,数据节点进程不需要每线程arena,因为它不执行任何内存分配。(这个分配器的差异似乎不影响性能。)

    glibc 的行为旨在通过 MALLOC_ARENA_MAX 环境变量进行配置,但是在 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.3.0
    Type or units 布尔值
    Default false
    Range true, false
    Restart Type

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

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

    ODirect 默认情况下是禁用的。

  • ODirectSyncFlag

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

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

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

    • ODirect 未启用。

    • InitFragmentLogFiles 设置为 SPARSE

    默认情况下禁用。

  • 需要证书

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

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

  • 需要 TLS

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

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

  • 重启OnErrorInsert

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

    该功能仅在调试版本中可用,用于在单个代码块的执行过程中插入错误作为测试的一部分。

    该功能默认情况下是禁用的。

  • 停止OnError

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

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

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

    当错误发生并且 StopOnError 等于 0 时,数据节点进程将被重启。

    MySQL 集群管理器用户请注意,当 StopOnError 等于 1 时,这将阻止 MySQL 集群管理器代理在重启和恢复后重启任何数据节点。请参阅 在 Linux 上启动和停止代理,以获取更多信息。

  • 使用共享内存

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

    启用在同一主机上运行的数据节点和 API 节点之间的共享内存连接。将其设置为 1 以启用。

控制超时、间隔和磁盘分页

有多个 [ndbd] 参数指定了集群数据节点中的超时、间隔和磁盘分页。除非另有说明,否则大多数超时值都以毫秒为单位。

  • WatchDog 检查间隔

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

    为了防止主线程在某个点上陷入无限循环,一个“看门狗”线程检查主线程。这参数指定了检查之间的毫秒数。如果进程在三次检查后仍然保持相同状态,则看门狗线程将终止它。

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

    默认超时是6000毫秒(6秒)。

  • 观察狗检查初始间隔

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    这与观察狗检查间隔参数相似,除了观察狗检查初始间隔控制存储节点在早期启动阶段内存分配期间执行检查的时间间隔。

    默认超时是6000毫秒(6秒)。

  • 部分启动超时

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    该参数指定集群等待所有数据节点启动的时间,以避免部分集群启动。

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

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

  • 分区启动超时

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    如果集群在等待部分启动超时毫秒后仍然处于分区状态,集群将等待直到该超时也经过。如果分区启动超时设置为0,集群将无限期等待(232−1 ms,约49.71天)。

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

  • 启动失败超时

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

    对于非零值,该参数以毫秒为单位。对于包含大量数据的数据节点,例如几十GB的数据,可能需要10-15分钟(即600000到1000000毫秒)来重启节点。

  • 无节点组启动超时

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

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

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

  • HeartbeatIntervalDbDb

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    发现失败节点的一种主要方法是通过心跳信号的使用。该参数指定心跳信号的发送频率和接收频率。心跳信号不能被禁用。

    在四个心跳间隔中未收到心跳信号后,节点将被宣布死亡。因此,通过心跳机制发现失败的最大时间是五倍的心跳间隔。

    默认的心跳间隔为 5000 毫秒(5 秒)。该参数不得剧烈变化,并且不得在节点之间有很大差异。如果一个节点使用 5000 毫秒,而监视它的节点使用 1000 毫秒,那么节点将很快被宣布死亡。该参数可以在在线软件升级期间更改,但只能以小增量进行。

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

  • HeartbeatIntervalDbApi

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    每个数据节点将心跳信号发送到每个 MySQL 服务器(SQL 节点),以确保保持联系。如果 MySQL 服务器未在时间内发送心跳信号,则将其宣布为“死亡”,在这种情况下,所有正在进行的事务将被完成,所有资源将被释放。SQL 节点无法重新连接,直到之前的 MySQL 实例启动的所有活动完成。该参数的三个心跳标准与HeartbeatIntervalDbDb相同。

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

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

  • HeartbeatOrder

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 0
    Range 0 - 65535
    Restart Type

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

    数据节点以圆形方式相互发送心跳信号,每个数据节点监视前一个节点。如果未检测到心跳信号,数据节点将前一个节点宣布为“死亡”(即不再可访问集群)。该节点死亡的确定是全局的;换言之,一旦数据节点被宣布死亡,它将被集群中的所有节点视为死亡。

    在不同主机上的数据节点之间的心跳可能太慢,导致某个数据节点被宣布死亡,尽管该节点仍然可以作为集群的一部分运行。这可能是由于非常低的心跳间隔或临时连接问题。

    在这种情况下,心跳传输的顺序可能会影响某个数据节点是否被宣布死亡。如果这种宣布是不必要的,这可能会导致节点组的不必要损失,从而导致集群的失败。

    考虑一个设置,其中有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: 节点 A 节点 B
    Node Group 1: 节点 C 节点 D

    假设心跳传输的顺序是A->B->C->D->A。在这种情况下,主机之间的心跳丢失会导致节点B宣布节点A死亡,节点C宣布节点B死亡。这将导致节点组0的损失,从而导致集群的失败。另一方面,如果心跳传输的顺序是A->B->D->C->A(所有其他条件保持不变),心跳丢失将导致节点A和D被宣布死亡;在这种情况下,每个节点组都有一个幸存的节点,集群将幸存。

    配置参数HeartbeatOrder使心跳传输的顺序可以由用户配置。该参数的默认值为零;在所有数据节点上使用默认值将导致心跳传输的顺序由NDB确定。如果使用该参数,必须将其设置为非零值(最大65535)对于集群中的每个数据节点,并且该值必须是唯一的;这将导致心跳传输从数据节点到数据节点按照它们的HeartbeatOrder值从低到高(然后直接从具有最高HeartbeatOrder值的数据节点到具有最低值的数据节点,以完成圆圈)。这些值不需要是连续的。例如,要强制心跳传输顺序A->B->D->C->A,在之前的场景中,可以将HeartbeatOrder值设置如下:

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

    Node HeartbeatOrder Value
    A 10
    B 20
    C 30
    D 25

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

    • 完全关闭并重新启动整个集群。

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

    可以使用DUMP 908观察该参数在数据节点日志中的效果。

  • ConnectCheckIntervalDelay

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

    节点重启: 需要集群的滚动重启。(NDB 8.3.0)

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

    如果该数据节点进一步在ConnectCheckIntervalDelay毫秒内未响应,将被视为可疑,并在两个这样的间隔后被视为死亡。这在具有已知延迟问题的设置中可能很有用。

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

  • 本地检查点之间的时间

    Version (or later) NDB 8.3.0
    Type or units 以 4 字节单词为单位的基 2 对数
    Default 20
    Range 0 - 31
    Restart Type

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

    该参数是一个例外,它不指定等待新本地检查点的时间,而是用于确保在更新率较低的集群中不执行本地检查点。在大多数具有高更新率的集群中,新的本地检查点将立即启动。

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

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

  • 全局检查点之间的时间

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

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

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

    还需要确保,即使在最坏的情况下——集群完全崩溃——也能正确地处理。在这种情况下,所有在给定间隔内发生的事务将被放入全局检查点中,可以认为是一个已提交事务的集合,该集合已经刷新到磁盘上。换言之,在提交过程中,事务将被放入全局检查点组。稍后,该组的日志记录将被刷新到磁盘,然后整个事务组将被安全地提交到磁盘上所有集群计算机上。

    我们建议,如果您使用固态磁盘(特别是使用 NVMe 的磁盘)和 Disk Data 表,那么您应该减少该值。在这种情况下,您还应该确保 MaxDiskDataLatency 设置为合适的级别。

    该参数定义了全局检查点之间的间隔。默认值为 2000 毫秒。

  • 全局检查点超时时间

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

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

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

  • Epoch 之间的时间

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

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

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

    Epoch 之间的时间 是 NDB 集群复制中“微型 GCP”实现的一部分,可以用来改善 NDB 集群复制的性能。

  • 时间之间的Epoch超时

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

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

    时间之间的Epoch超时是NDB集群复制中“微GCP”实现的一部分,可以用于改善NDB集群复制的性能。

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

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

  • 最大缓冲Epoch数

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

    订阅节点可以落后于未处理的Epoch数。如果超过该数值,将断开订阅节点的连接。

    默认值为100,足以满足大多数正常操作。如果订阅节点确实落后到断开连接,通常是由于网络或进程/线程调度问题。(在罕见的情况下,问题可能是NDB客户端中的bug。)如果Epoch较长,可能需要将该值设置得较低。

    断开连接可以防止客户端问题影响数据节点服务,避免内存不足以缓冲数据,最后关闭服务。相反,只有客户端受到影响(例如二进制日志中的间隙事件),强制客户端重新连接或重新启动进程。

  • 最大缓冲Epoch字节

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

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

  • 非活动事务中止检查间隔时间

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

    超时处理通过在每个事务上检查计时器来执行,每个间隔由该参数指定。因此,如果该参数设置为1000毫秒,每个事务将每秒检查一次超时。

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

  • 事务非活动超时

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

    节点重启:需要集群的滚动重启。 (NDB 8.3.0)

    该参数指定了在同一事务中允许的最大时间间隔,否则事务将被中止。

    默认情况下,此参数为 4G(也是最大值)。对于需要确保事务不保持锁定的实时数据库,此参数应该设置为相对较小的值。将其设置为 0 意味着应用程序永远不会超时。单位是毫秒。

  • 事务死锁检测超时

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

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

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

    响应失败可能是由于以下任何原因:

    • 节点是

    • 操作已进入锁队列

    • 请求执行操作的节点可能非常繁忙。

    这个超时参数指定事务协调器等待其他节点执行查询的时间,然后abort事务,这对于节点故障处理和死锁检测非常重要。

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

    该参数的最小值为 50 毫秒。

  • 磁盘同步大小

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

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

    这是存储在本地检查点文件中的最大字节数,以防止写缓冲,这可能会严重影响性能。这参数 旨在取代 TimeBetweenLocalCheckpoints

    Note

    启用 ODirect 时,不需要设置 磁盘同步大小;事实上,在这种情况下其值将被忽略。

    默认值为 4M(4 兆字节)。

  • 最大磁盘写入速度

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

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

    设置本地检查点和备份操作的最大磁盘写入速度,以字节每秒为单位,当此数据节点或其他数据节点没有重启时。

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

  • 最大磁盘写入速度(其他节点重启)

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

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

    设置本地检查点和备份操作的最大磁盘写入速度,以字节每秒为单位,当一个或多个数据节点在此 NDB 集群中重启时,除了这个节点。

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

  • MaxDiskWriteSpeedOwnRestart

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

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

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

    对于设置其他数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeedOtherNodeRestart。对于设置集群中没有数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeed。所有 LCP 和备份操作的最小磁盘写入速度可以通过设置 MinDiskWriteSpeed 进行调整。

  • MinDiskWriteSpeed

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

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

    设置本地检查点和备份操作的最小磁盘写入速率,以字节每秒为单位。

    LCP 和备份操作在各种条件下的最大磁盘写入速率可以通过参数 MaxDiskWriteSpeedMaxDiskWriteSpeedOwnRestartMaxDiskWriteSpeedOtherNodeRestart 进行调整。请参阅这些参数的描述以获取更多信息。

  • ArbitrationTimeout

    Version (or later) NDB 8.3.0
    Type or units milliseconds
    Default 7500
    Range 10 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重新启动: 需要集群的滚动重新启动。 (NDB 8.3.0)

    该参数指定数据节点等待仲裁器对仲裁消息的响应时间。如果超过这个时间,则认为网络已经分裂。

    默认值为 7500 毫秒(7.5 秒)。

  • Arbitration

    Version (or later) NDB 8.3.0
    Type or units enumeration
    Default Default
    Range Default, Disabled, WaitExternal
    Restart Type

    节点重新启动: 需要集群的滚动重新启动。 (NDB 8.3.0)

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

    • 默认。 启用仲裁以正常进行,如管理节点和 API 节点的 ArbitrationRank 设置所确定的那样。这是默认值。

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

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

    Important

    该参数只能在集群配置文件的 [ndbd default] 部分中使用。当 仲裁 为不同的数据节点设置不同的值时,集群的行为是未指定的。

  • 重新启动订阅者连接超时

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

    节点重新启动: 需要集群的 滚动重新启动。(NDB 8.3.0)

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

    虽然该参数以毫秒为单位,但超时本身将被解析为下一个最大的整秒。

  • 保持活动发送间隔

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 60000
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重新启动: 需要集群的 滚动重新启动。(NDB 8.3.0)

    您可以通过设置该参数来启用和控制数据节点之间的保持活动信号的间隔。默认情况下,KeepAliveSendInterval 的值为 60000 毫秒(一分钟);将其设置为 0 将禁用保持活动信号。值在 1 到 10 之间(包括 1 和 10)将被视为 10。

    该参数可能在监控和断开空闲 TCP 连接的环境中证明有用,可能会导致集群在空闲时不必要地失败。

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

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

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

  • 撤销索引缓冲区

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

    节点重新启动: 需要集群的 滚动重新启动。(NDB 8.3.0)

    该参数以前设置撤销索引缓冲区的大小,但是在当前版本的 NDB 集群中没有效果。

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

  • 撤销数据缓冲区

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

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

    该参数以前设置了撤销数据缓冲区的大小,但是在当前版本的 NDB 集群中没有效果。

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

  • RedoBuffer

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

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

    所有更新活动也需要被日志记录。REDO 日志使得可以在系统重启时重放这些更新。NDB 恢复算法使用一个“模糊”检查点的数据与 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.3.0
    Type or units 字节
    Default 8192
    Range 0 - 64K
    Restart Type

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

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

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

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

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

  • LogLevelStartup

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

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

    过程启动期间的事件报告级别。

    默认级别是 1。

  • LogLevelShutdown

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

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

    节点优雅关闭期间的事件报告级别。

    默认级别是 0。

  • 日志统计级别

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

    默认级别为 0。

  • 检查点日志级别

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

    默认级别为 0。

  • 节点重启日志级别

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    节点重启事件的报告级别。

    默认级别为 0。

  • 连接日志级别

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    集群节点之间连接事件的报告级别。

    默认级别为 0。

  • 错误日志级别

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    集群整体错误和警告事件的报告级别。

    默认级别为 0。

  • 拥塞日志级别

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    拥塞事件的报告级别。

    默认级别为 0。

  • 信息日志级别

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    集群一般状态信息的报告级别。

    默认级别为 0。

  • 内存报告频率

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

    每个数据节点的数据内存和索引内存使用情况都记录在集群日志中,以百分比和32 KB页的形式,例如,如果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 集群日志事件”中所述。

  • StartupStatusReportFrequency

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    当数据节点使用--initial启动时,它会在启动阶段 4(见第 25.6.4 节“NDB 集群启动阶段概述”)中初始化 redo 日志文件。当NoOfFragmentLogFilesFragmentLogFileSize或两者都设置了非常大的值时,这个初始化过程可能需要很长时间。您可以强制报告进度,以便在集群日志中周期性地记录进度,通过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.3.0
    Type or units 字节
    Default 未定义
    Range 0 - 100
    Restart Type

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    可以使用DictTrace参数来记录创建和删除表时生成的跟踪事件。这仅供 NDB 内核代码调试使用。DictTrace采用整数值。默认值为 0,表示不记录跟踪;1 启用跟踪记录,2 启用DBDICT调试输出的记录。

  • WatchdogImmediateKill

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

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

    您可以通过启用 WatchdogImmediateKill 数据节点配置参数来立即终止线程,以便在 watchdog 问题出现时进行调试或故障排除,以获取报告执行停止时的确切情况的跟踪文件。

备份参数。 本节讨论的 [ndbd] 参数定义了用于在线备份的内存缓冲区。

  • BackupDataBufferSize

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

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

    在创建备份时,使用两个缓冲区将数据发送到磁盘。备份数据缓冲区用于填充节点表的记录数据。一旦该缓冲区填充到指定的 BackupWriteSize 级别,页面将被发送到磁盘。在将数据刷新到磁盘时,备份过程可以继续填充该缓冲区,直到空间用完。当这种情况发生时,备份过程将暂停扫描,并等待磁盘写入完成以释放内存,以便继续扫描。

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

  • BackupDiskWriteSpeedPct

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

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

    BackupDiskWriteSpeedPct 只适用于单线程备份;由于 NDB 8.3 支持多线程备份,因此通常不需要调整该参数,该参数在多线程情况下无效。以下讨论仅适用于单线程备份。

    在正常操作期间,数据节点尝试最大化磁盘写入速度,以便在本地检查点和备份中保持在 MinDiskWriteSpeedMaxDiskWriteSpeed 的限制范围内。磁盘写入限制为每个 LDM 线程分配一个相等的份额。这允许并行 LCPs 发生,而不会超过磁盘 I/O 预算。由于备份是由单个 LDM 线程执行的,因此这实际上减少了预算,导致备份完成时间延长,如果更改率足够高,可能会导致备份失败。

    可以使用 BackupDiskWriteSpeedPct 配置参数来解决这个问题,该参数的值在 0-90 之间(包括),表示节点最大写入速率预算的百分比,该百分比将被保留,以便在备份过程中使用。

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

  • BackupLogBufferSize

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

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

    备份日志缓冲区扮演着与备份数据缓冲区相似的角色,除了它用于生成执行备份期间的所有表写入日志。与备份数据缓冲区相同的原则适用于写入这些页面,除了当备份日志缓冲区没有更多空间时,备份将失败。因此,备份日志缓冲区的大小必须足够大以处理备份过程中的写入活动。见第 25.6.8.3 节,“配置 NDB 集群备份”

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

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

    该参数的默认值为 16MB。

  • BackupMemory

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    该参数已弃用,并将在未来版本的 NDB 集群中删除。对其设置的任何值都将被忽略。

  • BackupReportFrequency

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    该参数控制备份状态报告的频率,在管理客户端中,以及在集群日志中(假设集群事件日志记录已配置为允许它—见日志记录和检查点)。 BackupReportFrequency 代表备份状态报告之间的时间(以秒为单位)。

    默认值为 0。

  • BackupWriteSize

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

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

    该参数的默认值为 256KB。

  • BackupMaxWriteSize

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    该参数指定备份日志和备份数据缓冲区写入磁盘的最大大小。

    该参数的默认值为 1MB。

  • CompressedBackup

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

    节点重启:需要集群的滚动重启。(NDB 8.3.0)

    启用此参数将导致备份文件被压缩。使用的压缩等同于 gzip --fast,可以节省50%或更多的数据节点存储未压缩备份文件所需的空间。压缩备份可以为单个数据节点或所有数据节点(通过在 [ndbd default] 部分的 config.ini 文件中设置此参数)启用。

    Important

    您不能将压缩备份还原到不支持此功能的 MySQL 版本的集群中。

    默认值为 0(禁用)。

  • RequireEncryptedBackup

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 0
    Range 0 - 1
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

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

Note

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

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

  • BackupDataBufferSize >= BackupWriteSize + 188KB

  • BackupLogBufferSize >= BackupWriteSize + 16KB

  • BackupMaxWriteSize >= BackupWriteSize

NDB 集群实时性能参数

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

Note

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

  • BuildIndexThreads

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 128
    Range 0 - 128
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

    该参数确定在系统或节点启动时重建有序索引的线程数,以及在运行 ndb_restore --rebuild-indexes 时。

    将该参数设置为 0(默认值)将禁用多线程构建有序索引。

    该参数仅在使用 ndbdndbmtd 时支持。

    您可以通过将 TwoPassInitialNodeRestartCopy 数据节点配置参数设置为 TRUE 来启用多线程构建。

  • LockExecuteThreadToCPU

    Version (or later) NDB 8.3.0
    Type or units 一组 CPU ID
    Default 0
    Range ...
    Restart Type

    节点重启: 需要集群的 滚动重启。(NDB 8.3.0)

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

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

    LockExecuteThreadToCPU没有默认值。

  • LockMaintThreadsToCPU

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    该参数指定了分配给处理NDBCLUSTER维护线程的 CPU ID。

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

  • Numa

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    该参数确定了是否由操作系统或数据节点进程控制非统一内存访问(NUMA),无论数据节点是否使用ndbdndbmtd。默认情况下,NDB尝试在任何具有 NUMA 支持的数据节点上使用交叉 NUMA 内存分配策略。

    Numa设置为 0 意味着数据节点进程不尝试设置内存分配策略,而是允许操作系统确定行为,该行为可以通过单独的numactl工具进行指导。也就是说,Numa = 0产生系统默认行为,该行为可以通过numactl进行自定义。对于许多 Linux 系统,系统默认行为是将套接字本地内存分配给任何进程在分配时。这可能会在使用ndbmtd时出现问题,因为ndbmtd在启动时分配所有内存,导致不同套接字的访问速度不同,特别是在锁定主内存页面时。

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

    Numa配置参数仅在 Linux 系统上受支持,其中libnuma.so可用。

  • 实时调度器

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

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

  • 调度器执行计时器

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    该参数指定了调度器中线程执行的时间(以微秒为单位),以便将其发送出去。将其设置为 0 可以最小化响应时间;要提高吞吐量,可以增加该值,但这将延长响应时间。

    默认值为 50 微秒,我们的测试表明,在高负载情况下,这可以略微提高吞吐量,而不会明显延长请求时间。

  • 调度器响应度

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 5
    Range 0 - 10
    Restart Type

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    设置 NDB 调度器之间的平衡,以便在速度和吞吐量之间取得平衡。该参数采用整数值,范围为 0-10, 默认值为 5。较高的值提供了更好的响应时间相对于吞吐量。较低的值提供了更高的吞吐量,但响应时间较长。

  • 调度器自旋计时器

    Version (or later) NDB 8.3.0
    Type or units 微秒
    Default 0
    Range 0 - 500
    Restart Type

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    该参数指定了调度器中线程执行的时间(以微秒为单位),以便将其休眠。

    Note

    如果自旋方法被设置,则忽略该参数的任何设置。

  • 自旋方法

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

    1. 静态自旋(默认):将 EnableAdaptiveSpinning 设置为 false,将 调度器自旋计时器 设置为 0。(SetAllowedSpinOverhead 在这种情况下不相关。)

    2. 基于成本的自旋:将 EnableAdaptiveSpinning 设置为 true,将 调度器自旋计时器 设置为 100,将 SetAllowedSpinOverhead 设置为 200。

    3. 延迟优化的自旋:将 EnableAdaptiveSpinning 设置为 true,将 调度器自旋计时器 设置为 200,将 SetAllowedSpinOverhead 设置为 1000。

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

    SpinMethod 修改的自旋参数在以下列表中描述:

    • SchedulerSpinTimer:这与数据节点配置参数的名称相同。由 SpinMethod 应用的设置将覆盖 config.ini 文件中的任何值。

    • EnableAdaptiveSpinning:启用或禁用自适应自旋。禁用它将导致自旋不检查 CPU 资源。这不能直接在集群配置文件中设置,但可以使用 DUMP 104004 1 或禁用使用 DUMP 104004 0ndb_mgm 管理客户端中。

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

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

  • TwoPassInitialNodeRestartCopy

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

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

    可以通过将此配置参数设置为 true(默认值)来启用多线程构建有序索引,以便在初始节点重启时启用两遍复制数据。

    您还必须将 BuildIndexThreads 设置为非零值。

多线程配置参数(ndbmtd)。  ndbmtd 默认情况下作为单线程进程运行,必须在 config.ini 文件中配置以使用多线程,使用两种方法之一,两种方法都需要在 config.ini 文件中设置配置参数。第一种方法是简单地将 MaxNoOfExecutionThreads 配置参数设置为适当的值。第二种方法是使用 ThreadConfig 设置更复杂的规则以用于 ndbmtd 多线程。

Note

使用并行备份需要在集群中的所有数据节点上使用多个 LDMs,以便在备份之前使用并行备份。有关更多信息,请参阅 第 25.6.8.5 节,“使用并行数据节点备份 NDB”,以及 从并行备份中恢复

  • 自动线程配置

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

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

    当设置为 1 时,启用自动线程配置,使用可用的 CPU 数量来配置数据节点线程,考虑到由 tasksetnumactl、虚拟机、Docker 等控制应用程序可用的 CPU 的限制;否则,可以将 NumCPUs 设置为所需的 CPU 数量(最多 1024 个 CPU,可以由自动线程配置处理)。任何 ThreadConfigMaxNoOfExecutionThreads 设置将被忽略。此外,启用该参数将自动禁用 ClassicFragmentation

  • 经典碎片化

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

    当启用(设置为 true)时,NDB 将碎片分布在 LDM 之间,使每个节点的默认分区数等于每个数据节点的最小 LDM 线程数。

    对于新集群,在首次设置集群时,将 ClassicFragmentation 设置为 false 是首选的;这样做将每个节点的分区数设置为 PartitionsPerNode 的值,确保所有分区均匀分布在所有 LDM 之间。

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

  • 启用多线程备份

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

    节点重启:需要滚动重启集群。 (NDB 8.3.0)

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

    该参数通常启用(设置为 1)用于 ndbmtd。要强制单线程备份,可以使用较旧版本的 ndb_restore,请将该参数设置为 0。这必须对集群中的每个数据节点进行设置。

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

  • 最大执行线程数

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 2
    Range 2 - 72
    Restart Type

    系统重启:需要完全关闭并重新启动集群。 (NDB 8.3.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 应该设置为等于使用的LDM线程数目,由ndbmtd的设置确定的参数。这一比率不应该大于4:1;这种配置是明确禁止的。

    LDM线程的数量也确定了未明确分区的NDB表的分区数目;这是LDM线程数目乘以集群中的数据节点数目。(如果使用ndbd而不是ndbmtd,那么总是只有一个LDM线程;在这种情况下,自动创建的分区数目只是等于数据节点的数量。请参阅第 25.2.2 节,「NDB 集群节点、节点组、碎片副本和分区」,以获取更多信息。

    使用多于默认数量的LDM线程时,添加大表空间的磁盘数据表可能会导致资源和CPU使用问题,如果磁盘页缓冲区不足大;请参阅DiskPageBufferMemory配置参数的描述,以获取更多信息。

    线程类型将在本节后面描述(请参阅ThreadConfig)。

    将该参数设置在允许的值范围之外将导致管理服务器在启动时出现错误:Error line number: Illegal value value for parameter MaxNoOfExecutionThreads

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

    MaxNoOfExecutionThreads 通常旨在设置为可用的 CPU 线程数,并分配适合典型工作负载的线程数目。它不将特定线程分配给指定的 CPU。在需要从提供的设置中偏离或将线程绑定到 CPU 的情况下,您应该使用ThreadConfig,它允许您直接将每个线程分配给所需的类型、CPU 或两者。

    多线程数据节点进程总是生成以下线程:

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

    • 1 个接收线程

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

    对于MaxNoOfExecutionThreads值为 8 或更少,TC 线程不会被创建,而是由主线程执行 TC 处理。

    更改 LDM 线程的数量通常需要系统重新启动,无论是使用该参数还是 ThreadConfig,但可以使用节点初始重新启动(NI)来实现更改,前提是满足以下两个条件:

    • 每个 LDM 线程最多处理 8 个碎片,并且

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

  • MaxSendDelay

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

    节点重新启动: 需要集群的 滚动重新启动。(NDB 8.3.0)

    可以使用该参数来使数据节点在将数据发送到 API 节点之前暂停一段时间;在某些情况下,如下所述,这可以导致更高的吞吐量。

    MaxSendDelay 可以在许多 API 节点达到饱和点或接近饱和点时使用,这可能会导致性能的波动。这种情况下,数据节点可以快速将结果发送回 API 节点,许多小包需要处理,这可能会比处理大包慢,从而减慢 API 节点的速度;后来,数据节点开始发送更大的包。

    要处理这种情况,可以将 MaxSendDelay 设置为非零值,这将确保响应不太快地发送回 API 节点。当这样做时,响应将立即发送,但是在有竞争流量时,设置 MaxSendDelay 将导致数据节点等待足够长的时间,以确保它们发送更大的包。实际上,这引入了发送过程中的人工瓶颈,从而可以显著提高吞吐量。

  • NoOfFragmentLogParts

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

    初始节点重新启动: 需要集群的 滚动重新启动;每个数据节点都必须使用 --initial 重新启动。(NDB 8.3.0)

    设置属于该 ndbmtd 的日志文件组的数量。该参数的值应该等于 ndbmtd 使用的 LDM 线程数,如 MaxNoOfExecutionThreads 所确定的那样。禁止使用超过 4 个 redo 日志部分的配置。

    请参阅 MaxNoOfExecutionThreads 的描述以获取更多信息。

  • NumCPUs

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

    初始系统重新启动: 需要完全关闭集群,使用 备份 恢复集群文件系统,然后重新启动集群。(NDB 8.3.0)

    使自动线程配置仅使用这些 CPU。不受 AutomaticThreadConfig 启用时的影响。

  • PartitionsPerNode

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 2
    Range 1 - 32
    Restart Type

    节点重新启动: 需要集群的 滚动重新启动。(NDB 8.3.0)

    设置每个节点上创建新 NDB 表时使用的分区数。这使得可以避免在本地数据管理器(LDM)数量很高时将表拆分成过多的分区。

    虽然可以在不同的数据节点上设置这个参数的不同值,但这并不会带来任何优势;因此,建议在全局 config.ini 文件的 [ndbd default] 部分中将其设置一次,以便应用于所有数据节点。

    如果启用了 ClassicFragmentation,则忽略该参数的设置。(请注意,启用 AutomaticThreadConfig 将禁用 ClassicFragmentation。)

  • ThreadConfig

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

    系统重启: 需要完全关闭并重新启动集群。 (NDB 8.3.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_prio 不能被设置。

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

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

    • 通过将 nosend 设置为 1,可以防止 mainldmreptc 线程帮助发送线程。这参数默认为 0,不能与其他线程类型一起使用。

    • thread_prio 是一个线程优先级,可以从 0 到 10 设置,10 代表最高优先级。默认值为 5。该参数的具体效果是平台特定的,稍后在本节中描述。

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

    thread_prio 设置和平台效果  thread_prio 的实现在 Linux/FreeBSD、Solaris 和 Windows 之间有所不同。以下列表讨论了每个平台上的效果:

    • Linux 和 FreeBSD:我们将 thread_prio 映射到 nice 系统调用中。由于进程的 nice 值越低,进程优先级越高,因此增加 thread_prio 的效果是降低 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

      某些操作系统可能提供了最高进程nice级别为20,但这并不是所有目标版本所支持的;因此,我们选择19作为可以设置的最大 nice 值。

    • 太阳星:在太阳星上设置 thread_prio 将设置太阳星FX优先级,映射如下表所示:

      表 25.13 太阳星上的 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

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

    • Windows:我们将 thread_prio 映射到 Windows 线程优先级值,该值将传递给 Windows API SetThreadPriority() 函数。该映射如下表所示:

      表 25.14 thread_prio 到 Windows 线程优先级映射

      thread_prio value Windows thread priority
      0 - 1 THREAD_PRIORITY_LOWEST
      2 - 3 THREAD_PRIORITY_BELOW_NORMAL
      4 - 5 THREAD_PRIORITY_NORMAL
      6 - 7 THREAD_PRIORITY_ABOVE_NORMAL
      8 - 10 THREAD_PRIORITY_HIGHEST

    type 属性表示 NDB 线程类型。支持的线程类型及其对应的 count 值范围如下所示:

    • ldm:本地查询处理器 (DBLQH 内核块) 负责处理数据。使用的 LDM 线程越多,数据就越高地被分区。

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

      每个 LDM 线程通常与 1 个查询线程组合成一个 LDM 组。一个 LDM 组由 4 到 8 个 LDM 组组成一个轮询组。每个 LDM 线程可以由同一个轮询组中的任何查询或线程辅助执行。NDB 尝试将轮询组形成,使得每个轮询组中的所有线程都锁定到同一个 L3 缓存中的 CPU 附加到。

      更改 LDM 线程的数量通常需要系统重新启动以确保集群操作的安全性和可靠性;在某些情况下,这个要求可以放松,如本节后面所述。这也是使用 MaxNoOfExecutionThreads 时的情况。

      添加大型表空间(数百 GB 或更多)用于 Disk Data 表时,如果使用超过默认数量的 LDM 时,可能会出现资源和 CPU 使用问题,除非 DiskPageBufferMemory 足够大。

      如果 ldm 不在 ThreadConfig 值字符串中,则创建一个 ldm 线程。

    • 查询: 查询线程与LDM绑定,共同形成LDM组;仅处理已提交读取查询。查询线程的数量必须设置为0、1、2或3倍LDM线程的数量。查询线程不会被使用,除非通过设置query为非零值或启用自动线程配置参数来覆盖。

      查询线程也可以作为恢复线程(见下一项),尽管反之亦然。

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

    • 恢复: 恢复线程从碎片中恢复数据作为LCP的一部分。

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

    • tc: 事务协调器线程(DBTC内核块)包含事务的状态。最多可以有128个TC线程。

      理想情况下,每个新事务可以分配给一个新的TC线程。在大多数情况下,每2个LDM线程需要1个TC线程来确保这可以发生。在少数情况下,例如写入操作相对较少时,可能只需要每4个LQH线程需要1个TC线程来维护事务状态。相反,在执行大量更新操作的应用程序中,可能需要TC线程与LDM线程的比例接近1(例如,3个TC线程对4个LDM线程)。

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

      范围:0-64

    • main: 数据字典和事务协调器(DBDIHDBTC内核块),提供模式管理。也可以指定零个或两个主线程。

      范围: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 Cluster中的套接字,一个套接字对应一个节点。NDB Cluster支持多个接收线程;最多可以有16个这样的线程。

      范围:1 - 64。

      如果从ThreadConfig值字符串中省略了recv,则创建一个recv线程。

    • send: 发送线程(CMVMI内核块)。为了提高吞吐量,可以从一个或多个专门的发送线程中执行发送操作(最多8个)。

      使用过多的发送线程可能会对可扩展性产生不良影响。

      以前,所有线程都直接处理自己的发送操作;这仍然可以通过将发送线程的数量设置为0来实现(这也发生在MaxNoOfExecutionThreads设置小于10时)。虽然这样做可能会对吞吐量产生不良影响,但是在某些情况下也可以提供降低延迟。

      范围:

      • 0 - 64

    • rep: 复制线程(SUMA内核块)。该线程也可以与主线程组合(见范围信息)。

      范围:0-1。

      rep 设置为 0,并将 main 设置为 1,这将导致 rep 块被放入 main 线程中;在 ndbinfo.threads 表中,组合线程显示为 main_rep。这实际上与将 main 设置为 1 并将 rep 设置为 0 相同。

      也可以将 mainrep 都设置为 0,在这种情况下,两个线程都将被放入第一个 recv 线程中;在 threads 表中,组合线程被命名为 main_rep_recv

      如果从 ThreadConfig 值字符串中省略 rep,则创建一个 rep 线程。

    • io:文件系统和其他杂项操作。这些任务不需要高性能,并且总是由一个专门的 I/O 线程处理。

      范围:1 只。

    • watchdog:与此类型关联的参数设置实际上应用于多个线程,每个线程都有特定的用途。这些线程包括 SocketServer 线程,该线程从其他节点接收连接设置;SocketClient 线程,该线程尝试设置与其他节点的连接;以及监视线程,该线程检查线程是否正在进行。

      范围: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 线程不是执行线程。

    • 线程是否是永久的或临时的。目前所有线程类型除了 idxbld 之外都是永久的:idxbld 线程被视为临时线程。

    简单示例:<|start_header_id|>assistant<|end_header_id|> Please go ahead and provide the next HTML snippet for translation.

    # 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 个接收线程和 1 个线程用于模式管理、异步复制和 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。主线程和 rep 线程可以重用这些 CPU。

    这个示例展示了如何为 24-CPU 主机设置 ThreadConfigNoOfFragmentLogParts,留下 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 集合来重叠其他(永久)线程类型:

    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,但不是索引构建线程:

    ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
    io={cpubind=8}

    由于 ThreadConfig 设置锁定到八个核心编号 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,并在 grub.conf 中使用 isolcpus 启动选项。有关详细信息,请参阅操作系统或平台文档。

磁盘数据配置参数。 影响磁盘数据行为的配置参数包括以下:

  • DiskPageBufferEntries

    Version (or later) NDB 8.3.0
    Type or units 字节
    Default 64MB
    Range 4MB - 16TB
    Restart Type

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

    这是分配的页面条目(页面引用)数量。它指定为 32K 页的数量,在 DiskPageBufferMemory 中。默认值足以满足大多数情况,但如果您在磁盘数据表上遇到非常大的事务问题,可能需要增加该参数的值。每个页面条目需要大约 100 字节。

  • DiskPageBufferMemory

    Version (or later) NDB 8.3.0
    Type or units 字节
    Default 64M
    Range 4M - 16T
    Restart Type

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

    这确定了磁盘上缓存页面的空间大小,以字节为单位,并在 [ndbd][ndbd default] 部分的 config.ini 文件中设置。

    如果将 DiskPageBufferMemory 的值设置得太低,并且在 ThreadConfig 中使用了超过默认数量的 LDM 线程(例如 {ldm=6...}),那么在尝试将大型(例如 500G)数据文件添加到基于磁盘的 NDB 表时,可能会出现问题,进程将无限期地占用一个 CPU 核心。

    这是因为,在将数据文件添加到表空间时,extent 页被锁定到内存中,以便快速访问元数据。当添加大型文件时,worker 线程没有足够的内存来存储所有数据文件的元数据。在这种情况下,您应该增加 DiskPageBufferMemory 的值,或者添加较小的表空间文件。您可能还需要调整 DiskPageBufferEntries

    您可以查询 ndbinfo.diskpagebuffer 表以确定是否应该增加该参数的值,以尽量减少不必要的磁盘寻道。请参阅 第 25.6.17.31 节,“The ndbinfo diskpagebuffer 表”,以获取更多信息。

  • SharedGlobalMemory

    Version (or later) NDB 8.3.0
    Type or units 字节
    Default 128M
    Range 0 - 64T
    Restart Type

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

    该参数确定用于日志缓冲区、磁盘操作(例如页面请求和等待队列)和表空间、日志文件组、UNDO 文件和数据文件的元数据的内存量。共享全局内存池还提供了用于满足 UNDO_BUFFER_SIZE 选项的内存要求,该选项用于 CREATE LOGFILE GROUPALTER LOGFILE GROUP 语句,包括该选项的默认值,该值由 InitialLogFileGroup 数据节点配置参数的设置所隐含。SharedGlobalMemory 可以在 [ndbd][ndbd default] 部分的 config.ini 配置文件中设置,以字节为单位。

    默认值为 128M

  • DiskIOThreadPool

    Version (or later) NDB 8.3.0
    Type or units 线程
    Default 2
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    该参数确定用于磁盘数据文件访问的未绑定线程数。在引入 DiskIOThreadPool 之前,每个磁盘数据文件都会生成一个线程,这可能会导致性能问题,特别是在使用非常大的数据文件时。使用 DiskIOThreadPool,您可以例如使用多个线程并行访问单个大型数据文件。

    该参数仅适用于磁盘数据 I/O 线程。

    该参数的最佳值取决于您的硬件和配置,包括以下因素:

    • 磁盘数据文件的物理分布。 您可以通过将数据文件、undo 日志文件和数据节点文件系统分别放置在单独的物理磁盘上来获得更好的性能。如果您这样做了某些或所有这些文件集,那么您可以(并且应该)将 DiskIOThreadPool 设置得更高,以便启用单独的线程来处理每个磁盘上的文件。

      您还应该禁用 DiskDataUsingSameDisk 当使用单独的磁盘或磁盘来存储磁盘数据文件时;这将增加磁盘数据表空间检查点的执行速度。

    • 磁盘性能和类型。 磁盘数据文件处理的线程数也取决于磁盘的速度和吞吐量。更快的磁盘和更高的吞吐量允许更多的磁盘I/O线程。我们的测试结果表明,固态磁盘驱动器可以处理比传统磁盘更多的磁盘I/O线程,从而提高DiskIOThreadPool的值。

      使用固态磁盘驱动器时,特别是使用NVMe的驱动器,建议降低TimeBetweenGlobalCheckpoints的值。另请参阅磁盘数据延迟参数

    该参数的默认值为2。

  • 磁盘数据文件系统参数。 下面的参数列表使得可以在不使用符号链接的情况下将NDB Cluster磁盘数据文件放在特定的目录中。

    有关更多信息,请参阅 第 25.6.11.1 节,“NDB 集群磁盘数据对象”

  • 磁盘数据对象创建参数。  接下来的两个参数使您可以在第一次启动集群时创建磁盘数据日志文件组、表空间或两者,而无需使用 SQL 语句。

    • InitialLogFileGroup

      Version (or later) NDB 8.3.0
      Type or units 字符串
      Default [请参阅文档]
      Range ...
      Restart Type

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

      可以使用该参数指定在初始启动集群时创建的日志文件组。InitialLogFileGroup 如下所示:

      InitialLogFileGroup = [name=name;] [undo_buffer_size=size;] file-specification-list
      
      file-specification-list:
          file-specification[; file-specification[; ...]]
      
      file-specification:
          filename:size

      日志文件组的名称是可选的,默认为 DEFAULT-LG。 undo_buffer_size 也是可选的;如果省略,默认为 64M。每个 file-specification 对应一个 undo 日志文件,至少需要在 file-specification-list 中指定一个。Undo 日志文件根据 FileSystemPathFileSystemPathDDFileSystemPathUndoFiles 的值来放置,就像它们是通过 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 的值。

      如果使用该参数,应该总是在 [ndbd default] 部分的 config.ini 文件中设置。不同数据节点上设置不同值的 NDB 集群的行为未定义。

    • InitialTablespace

      Version (or later) NDB 8.3.0
      Type or units 字符串
      Default [见文档]
      Range ...
      Restart Type

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

      该参数可用于指定 NDB 集群磁盘数据表空间,在初始启动集群时创建。 InitialTablespace 如下所示:

      InitialTablespace = [name=name;] [extent_size=size;] file-specification-list

      该表空间的名称是可选的,默认为 DEFAULT-TS。 extent_size 也是可选的,默认为 1Mfile-specification-list 使用与 InitialLogfileGroup 参数相同的语法,只是每个 file-specification 用于 InitialTablespace 对应一个数据文件。至少需要在 file-specification-list 中指定一个。数据文件根据 FileSystemPathFileSystemPathDDFileSystemPathDataFiles 的值来放置,就像它们是通过 CREATE TABLESPACEALTER TABLESPACE 语句创建的一样。

      例如,考虑以下在 [ndbd default] 部分的 config.ini 文件中指定 InitialTablespace 的行(与 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 集群磁盘数据表的延迟问题。

    • 最大磁盘数据延迟

      Version (or later) NDB 8.3.0
      Type or units 毫秒
      Default 0
      Range 0 - 8000
      Restart Type

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

      该参数控制磁盘访问的最大允许延迟(最大 8000 毫秒)。当达到该限制时,NDB 将开始中止事务,以减少对磁盘数据 I/O 子系统的压力。使用 0 禁用延迟检查。

    • 磁盘数据使用同一磁盘

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

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

      如果您的磁盘数据表空间使用一个或多个单独的磁盘,请将该参数设置为 false。这样可以允许对表空间的检查点执行速度高于通常用于共享磁盘的情况。

      磁盘数据使用同一磁盘true 时,NDB 将在内存检查点执行期间减少磁盘数据检查点的速率,以确保磁盘负载保持不变。

磁盘数据和 GCP 停止错误  使用磁盘数据表时遇到的错误,例如 节点 nodeid 因 GCP 停止而被杀死(错误 2303),通常称为 GCP 停止错误”。这些错误通常是由于磁盘速度慢和磁盘吞吐量不足所致。

您可以通过使用更快的磁盘,并将磁盘数据文件放在与数据节点文件系统不同的磁盘上来避免这些错误。减少 TimeBetweenGlobalCheckpoints 的值可以减少每个全局检查点需要写入的数据量,从而在尝试写入全局检查点时提供一些保护;然而,减少该值也将减少写入 GCP 的时间,因此必须小心。

除了之前对 磁盘页面缓冲区内存 的考虑外,还需要正确地设置 磁盘 I/O 线程池 配置参数;将 磁盘 I/O 线程池 设置得太高非常可能会导致 GCP 停止错误(Bug #37227)。

GCP 停止可以由保存或提交超时引起;TimeBetweenEpochsTimeout 数据节点配置参数确定提交超时。然而,可以通过将该参数设置为 0 来禁用这两种超时。

配置发送缓冲区内存分配的参数  发送缓冲区内存是从共享的内存池中动态分配的,这意味着可以根据需要调整发送缓冲区的大小。(以前,NDB 内核为每个节点分配了固定的发送缓冲区大小,该大小在节点启动时确定并且不能在节点运行时更改。)TotalSendBufferMemoryOverLoadLimit 数据节点配置参数允许设置对该内存分配的限制。有关这些参数(以及 SendBufferMemory)的使用信息,请参阅 第 25.4.3.14 节,“配置 NDB 集群发送缓冲区参数”

另请参阅 第 25.6.7 节,“在线添加 NDB 集群数据节点”

重做日志超时提交处理。 可以控制数据节点在flush 重做日志到磁盘时的操作处理。当重做日志flush 超过 RedoOverCommitLimit 秒时,超过 RedoOverCommitCounter 次,导致事务中止。然后,API 节点将根据 DefaultOperationRedoProblemAction 处理操作。

  • RedoOverCommitCounter

    Version (or later) NDB 8.3.0
    Type or units 数字
    Default 3
    Range 1 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要 滚动重启 集群。 (NDB 8.3.0)

    RedoOverCommitLimit 超过时,尝试将重做日志写入磁盘时,如果超过该次数或更多次,则中止未提交的事务,并根据 DefaultOperationRedoProblemAction 处理操作。

  • RedoOverCommitLimit

    Version (or later) NDB 8.3.0
    Type or units
    Default 20
    Range 1 - 4294967039 (0xFFFFFEFF)
    Restart Type

    节点重启: 需要 滚动重启 集群。 (NDB 8.3.0)

    该参数设置了尝试将重做日志写入磁盘的超时时间(以秒为单位)。如果flush 重做日志的次数超过 RedoOverCommitLimit 秒,则中止未提交的事务,并根据 DefaultOperationRedoProblemAction 处理操作。

控制重启尝试。 可以使用 MaxStartFailRetriesStartFailRetryDelay 数据节点配置参数来对数据节点在启动失败时的重启尝试进行细粒度控制。

MaxStartFailRetries 限制了数据节点在启动失败时的总重启尝试次数,StartFailRetryDelay 设置了重启尝试之间的秒数。这些参数列举如下:

  • StartFailRetryDelay

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

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

    使用该参数设置数据节点在启动失败时的重启尝试之间的秒数。默认值为 0(无延迟)。

    这两个参数和 MaxStartFailRetries 都将被忽略,除非 StopOnError 等于 0。

  • MaxStartFailRetries

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

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

    使用该参数限制数据节点在启动失败时的重启尝试次数。默认值为 3 次尝试。

    这两个参数和 StartFailRetryDelay 都将被忽略,除非 StopOnError 等于 0。

NDB 索引统计参数。 下面列出的参数与 NDB 索引统计生成相关。

  • IndexStatAutoCreate

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 1
    Range 0, 1
    Restart Type

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

    启用(设置为 1)或禁用(设置为 0)自动统计收集,当索引创建时。

  • IndexStatAutoUpdate

    Version (or later) NDB 8.3.0
    Type or units 整数
    Default 1
    Range 0, 1
    Restart Type

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

    启用(设置为 1)或禁用(设置为 0)监控索引的变化,并在检测到变化时触发自动统计更新。触发更新的程度由 IndexStatTriggerPctIndexStatTriggerScale 选项确定。

  • IndexStatSaveSize

    Version (or later) NDB 8.3.0
    Type or units 字节
    Default 32768
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    最大允许的字节大小,用于保存任何给定索引的统计信息,在NDB系统表和mysqld内存缓存中。

    至少生成一个样本,不管大小限制如何。这大小是根据IndexStatSaveScale进行缩放的。

    IndexStatSaveSize指定的大小是根据IndexStatSaveScale的值进行缩放的,对于大索引,乘以0.01。此外,还乘以索引大小的对数以2为底。如果将IndexStatTriggerPct设置为0,则禁用缩放效果。

  • IndexStatSaveScale

    Version (or later) NDB 8.3.0
    Type or units 百分比
    Default 100
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    IndexStatSaveSize指定的大小是根据IndexStatTriggerPct的值进行缩放的,对于大索引,乘以0.01。此外,还乘以索引大小的对数以2为底。如果将IndexStatTriggerPct设置为0,则禁用缩放效果。

  • IndexStatTriggerPct

    Version (or later) NDB 8.3.0
    Type or units 百分比
    Default 100
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    触发索引统计更新的百分比变化。该值是根据IndexStatTriggerScale进行缩放的。你可以通过将IndexStatTriggerPct设置为0来禁用该触发器。

  • IndexStatTriggerScale

    Version (or later) NDB 8.3.0
    Type or units 百分比
    Default 100
    Range 0 - 4294967039 (0xFFFFFEFF)
    Restart Type

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

    IndexStatTriggerPct乘以该值,乘以0.01,对于大索引。如果将该值设置为0,则禁用缩放。

  • IndexStatUpdateDelay

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

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

    自动索引统计更新之间的最小延迟时间(以秒为单位)。将该变量设置为0将禁用任何延迟。默认值为60秒。

重启类型。 本节参数描述中使用的重启类型信息如下表所示:

表 25.15 NDB 集群重启类型

Symbol Restart Type Description
N 节点 该参数可以使用滚动重启(见 第 25.6.5 节,“执行 NDB 集群的滚动重启”)来更新
S 系统 为了生效该参数的更改,所有集群节点必须完全关闭,然后重新启动
I 初始 数据节点必须使用 --initial 选项重新启动