Documentation Home

21.4.3.6 定义 NDB Cluster 数据节点

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

[ndbd]并且[ndbd default] 始终用作部分名称,无论您是将 ndbd还是ndbmtd二进制文件用于数据节点进程。

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

该参数 NoOfReplicas应在该[ndbd default]部分中定义,因为它对所有集群数据节点都是通用的。设置 并不是绝对必要的 NoOfReplicas,但明确设置它是一种很好的做法。

大多数数据节点参数都在该[ndbd default]部分中设置。只有那些明确声明能够设置本地值的参数才允许在本[ndbd]节中进行更改。如果存在, HostName,NodeIdExecuteOnComputer 必须 在本地[ndbd]部分中定义,而不是在 的任何其他部分中定义config.ini。换句话说,这些参数的设置是特定于一个数据节点的。

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

参数名称和值不区分大小写,除非在 MySQL 服务器my.cnfmy.ini文件中使用,在这种情况下它们区分大小写。

有关特定于 NDB Cluster 磁盘数据表的配置参数的信息可以在本节后面找到(请参阅 磁盘数据配置参数)。

所有这些参数也适用于ndbmtdndbd的多线程版本)。三个额外的数据节点配置参数MaxNoOfExecutionThreads——、、 ThreadConfig和 ——仅NoOfFragmentLogParts适用于ndbmtd这些在与ndbd一起使用时无效。有关详细信息,请参阅 多线程配置参数 (ndbmtd)。另见第 21.5.3 节,“ndbmtd — NDB Cluster 数据节点守护进程(多线程)”

识别数据节点。 NodeIdorId值(即数据节点标识)可以在节点启动时在命令行分配,也可以在配置文件中分配 。

  • NodeId

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 [...]
    范围 1 - 48
    重启类型

    是(新开发银行 7.5.0)

    唯一的节点 ID 用作所有集群内部消息的节点地址。对于数据节点,这是 1 到 48(含)范围内的整数。集群中的每个节点都必须有一个唯一的标识符。

    NodeId是识别数据节点时使用的唯一受支持的参数名称。(Id已在 NDB 7.5.0 中删除。)

  • ExecuteOnComputer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 姓名
    默认 [...]
    范围 ...
    弃用 新开发银行 7.5.0
    重启类型

    S(NDB 7.5.0)

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

    重要的

    从 NDB 7.5.0 开始,此参数已弃用,并且可能会在未来的版本中删除。请改用 HostName参数。

  • HostName

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 名称或 IP 地址
    默认 本地主机
    范围 ...
    重启类型

    N(新开发银行 7.5.0)

    指定此参数定义数据节点所在计算机的主机名。要指定 以外的主机名localhost,此参数 或ExecuteOnComputer是必需的。

  • ServerPort

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 [...]
    范围 1 - 64K
    重启类型

    S(NDB 7.5.0)

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

    但是,如果您需要能够在防火墙中打开特定端口以允许数据节点和 API 节点(包括 SQL 节点)之间的通信,则可以将此参数设置为部分中所需端口的编号 [ndbd]或(如果需要为多个数据节点执行此操作)文件的[ndbd default]部分 config.ini,然后为来自 SQL 节点、API 节点或两者的传入连接打开具有该编号的端口。

    笔记

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

  • TcpBind_INADDR_ANY

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

  • NodeGroup

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 [...]
    范围 0 - 65536
    重启类型

    是(新开发银行 7.5.0)

    此参数可用于将数据节点分配给特定节点组。它在集群第一次启动时是只读的,不能用于在线将数据节点重新分配到不同的节点组。通常不希望在文件的[ndbd default]部分中 使用此参数config.ini,并且必须注意不要以将无效数量的节点分配给任何节点组的方式将节点分配给节点组。

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

  • LocationDomainId

    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 整数
    默认 0
    范围 0 - 16
    添加 新开发银行 7.6.4
    重启类型

    S(NDB 7.5.0)

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

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

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

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

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

    LocationDomainId取 0 到 16 之间的整数值,默认值为 0;使用 0 与不设置参数相同。

  • NoOfReplicas

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 2个
    范围 1 - 2
    重启类型

    是(新开发银行 7.5.0)

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

    节点组是隐式形成的。第一个节点组由具有最低节点 ID 的数据节点集组成,下一个节点组由下一个最低节点身份的集合组成,依此类推。举例来说,假设我们有 4 个数据节点,并且NoOfReplicas 设置为 2。这四个数据节点的节点 ID 分别为 2、3、4 和 5。那么第一个节点组由节点 2 和 3 组成,第二个节点组节点组由节点 4 和 5 组成。以这样一种方式配置集群很重要,即同一节点组中的节点不会放置在同一台计算机上,因为单个硬件故障会导致整个集群失败。

    如果未提供节点 ID,则数据节点的顺序是节点组的决定因素。无论是否进行了显式分配,都可以在管理客户端 SHOW命令的输出中查看。

    默认和推荐的最大值为 NoOfReplicas2。这是大多数生产环境的推荐值

    重要的

    虽然理论上此参数的值可以为 3 或 4,但NDB Cluster 7.5 和 NDB Cluster 7.6 不支持 NoOfReplicas在生产中设置为大于 2 的值

    警告

    设置NoOfReplicas为1表示所有Cluster数据只有一份;在这种情况下,单个数据节点的丢失会导致集群失败,因为该节点存储的数据没有其他副本。

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

  • DataDir

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 小路
    默认 .
    范围 ...
    重启类型

    在 (NDB 7.5.0)

    该参数指定放置跟踪文件、日志文件、pid 文件和错误日志的目录。

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

  • FileSystemPath

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 小路
    默认 数据目录
    范围 ...
    重启类型

    在 (NDB 7.5.0)

    此参数指定为元数据、REDO 日志、UNDO 日志(用于磁盘数据表)和数据文件创建的所有文件所在的目录。默认为 指定的目录DataDir

    笔记

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

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

  • BackupDataDir

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 小路
    默认 文件系统路径
    范围 ...
    重启类型

    在 (NDB 7.5.0)

    此参数指定放置备份的目录。

    重要的

    字符串 ' /BACKUP' 始终附加到此值。例如,如果将 的值设置 BackupDataDir/var/lib/cluster-data,则所有备份都存储在 下 /var/lib/cluster-data/BACKUP。这也意味着有效的默认备份位置是 参数BACKUP指定位置下 命名的目录FileSystemPath

数据存储器、索引存储器和字符串存储器

DataMemoryIndexMemory[ndbd]指定用于存储实际记录及其索引的内存段大小的参数。DataMemory在为这些设置值时, 了解如何 IndexMemory使用它们很重要,因为它们通常需要更新以反映集群的实际使用情况。

笔记

IndexMemory在 NDB 7.6 中被弃用,并且在未来版本的 NDB Cluster 中被删除。有关详细信息,请参阅后面的说明。

  • DataMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 80M
    范围 1M - 1T
    版本(或更高版本) 新开发银行 7.6.2
    类型或单位 字节
    默认 98M
    范围 1M - 1T
    重启类型

    N(新开发银行 7.5.0)

    此参数定义可用于存储数据库记录的空间量(以字节为单位)。此值指定的全部数量都分配在内存中,因此机器有足够的物理内存来容纳它非常重要。

    分配的内存 DataMemory用于存储实际记录和索引。每条记录有 16 字节的开销;每条记录都会产生额外的数量,因为它存储在一个 32KB 的页面中,页面开销为 128 字节(见下文)。由于每条记录仅存储在一页中,因此每页也有少量浪费。

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

    最大记录大小为 14000 字节。

    在 NDB 7.5(及更早版本)中,定义的内存空间 DataMemory也用于存储有序索引,每条记录使用大约 10 个字节。每个表行都在有序索引中表示。用户的一个常见错误是假设所有索引都存储在 分配的内存中 IndexMemory,但事实并非如此:只有主键和唯一哈希索引使用这块内存;有序索引使用 分配的内存 DataMemory。但是,创建主键或唯一哈希索引也会在相同键上创建有序索引,除非您 USING HASH在索引创建语句中指定。这可以通过运行来验证ndb_desc -ddb_name table_name

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

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

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

    DataMemory 内存空间还包含 UNDO 信息:对于每次更新,都会 在DataMemory. 在有序表索引中还有对每个副本的引用。只有在更新唯一索引列时才会更新唯一哈希索引,在这种情况下,索引表中会插入一个新条目,并在提交时删除旧条目。为此,还需要分配足够的内存来处理使用集群的应用程序执行的最大事务。无论如何,由于以下原因,执行一些大交易并不比使用许多小交易有优势:

    • 大交易并不比小交易快

    • 大型事务会增加丢失的操作数量,并且在事务失败时必须重复操作

    • 大交易使用更多内存

    在 NDB 7.5(及更早版本)中,默认值为 DataMemory80MB;在 NDB 7.6 中,这是 98MB。最小值为 1MB。没有最大大小,但实际上必须调整最大大小,以便在达到限制时进程不会开始交换。此限制由计算机上可用的物理 RAM 量以及操作系统可以提交给任何一个进程的内存量决定。32 位操作系统通常限制为每个进程 2−4GB;64位操作系统可以使用更多。对于大型数据库,出于这个原因,最好使用 64 位操作系统。

  • IndexMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 18M
    范围 1M - 1T
    版本(或更高版本) 新开发银行 7.6.2
    类型或单位 字节
    默认 0
    范围 1M - 1T
    弃用 新开发银行 7.6.2
    重启类型

    N(新开发银行 7.5.0)

    在 NDB 7.5 及更早版本中,此参数控制用于 NDB Cluster 中哈希索引的存储量。哈希索引总是用于主键索引、唯一索引和唯一约束。定义主键或唯一索引时,会创建两个索引,其中一个是哈希索引,用于所有元组访问和锁处理。该索引还用于强制执行唯一约束。

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

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

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

    fragments是片段fragment_replicas数,是片段副本数(通常为两个), rows是行数。如果一个表有 100 万行、8 个片段和两个片段副本,则预期的索引内存使用量计算如下所示:

      ((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数,是基表中的行数。

    假设该表有 100 万行和一个以两个四字节整数t1命名的有序索引。ix1另外假设 IndexStatSaveSizeIndexStatSaveScale 被设置为其默认值(分别为 32K 和 100)。使用前面的2个公式,我们可以计算如下:

      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 字节。

    在 NDB 7.6 之前,默认值为 IndexMemory18MB,最小值为 1MB;在 NDB 7.6 中,此参数的最小值和默认值是 0(零)。这对从 NDB 7.6 降级到早期版本的 NDB Cluster 有影响;有关更多信息,请参阅 第 21.3.7 节,“升级和降级 NDB Cluster”

  • StringMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 % 或字节
    默认 25
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    S(NDB 7.5.0)

    该参数决定了为表名等字符串分配多少内存,在文件的一个 [ndbd][ndbd default]部分 指定config.ini。介于 0和之间的值100被解释为最大默认值的百分比,该值是根据许多因素计算得出的,包括表数、最大表名大小、最大 .FRM文件 大小MaxNoOfTriggers、最大列名大小和最大默认值列值。

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

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

    在大多数情况下,默认值应该足够了,但是当你有很多 NDB表(1000 或更多)时,可能会出现 Error 773 Out of string memory,请修改 StringMemory 配置参数: 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 个字节的数据加上 12 个字节的开销。没有可为空的列可以节省 4 个字节的开销。此外,我们在列上有两个有序索引, a每个b记录大约消耗 10 个字节。基表上有一个主键散列索引,每条记录大约使用 29 个字节。唯一约束由一个单独的表实现,该表 b作为主键和a列。这个另一个表在表中每条记录额外消耗 29 字节的索引内存example以及 8 字节的记录数据加上 12 字节的开销。

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

您可以看到哈希索引占用了相当多的内存空间;但是,作为回报,它们提供了对数据的快速访问。它们也在 NDB Cluster 中用于处理唯一性约束。

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

两者的重点 IndexMemoryDataMemory数据库总大小是每个节点组的所有数据内存和所有索引内存的总和。每个节点组用于存储复制的信息,因此如果有四个节点有两个分片副本,则有两个节点组。因此,每个数据节点可用的总数据内存为 2 倍 DataMemory

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

DataMemory(在 NDB 7.5 及更早版本中 IndexMemory)可以更改,但减少它可能会有风险;这样做很容易导致一个节点甚至整个 NDB Cluster 由于内存空间不足而无法重启。增加应该是可以接受的,但建议此类升级以与软件升级相同的方式执行,从更新配置文件开始,然后重新启动管理服务器,然后依次重新启动每个数据节点。

MinFreePct。  保留一定 比例(默认为 5%)的数据节点资源 DataMemory(在 NDB 7.5 及更早版本中 ),以确保数据节点在执行重启时不会耗尽其内存。IndexMemory这可以使用MinFreePct数据节点配置参数(默认 5)进行调整。

版本(或更高版本) 新开发银行 7.5.0
类型或单位 未签名
默认 5个
范围 0 - 100
重启类型

N(新开发银行 7.5.0)

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

交易参数。  我们接下来[ndbd]讨论的几个参数很重要,因为它们会影响并行事务的数量和系统可以处理的事务的大小。 MaxNoOfConcurrentTransactions 设置节点中可能的并行事务数。 MaxNoOfConcurrentOperations 设置可以处于更新阶段或同时锁定的记录数。

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

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

  • MaxNoOfConcurrentTransactions

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 4096
    范围 32 - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

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

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

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

    假设有 10 个 SQL 节点使用集群。涉及 10 个表的单个连接需要 11 个事务记录;如果在一个事务中有 10 个这样的连接,那么这个事务需要 10 * 11 = 110 个事务记录,每个 MySQL 服务器,或者总共 110 * 10 = 1100 个事务记录。可以期望每个数据节点处理 TotalNoOfConcurrentTransactions / 数据节点数。对于具有 4 个数据节点的 NDB Cluster,这意味着设置 MaxNoOfConcurrentTransactions在每个数据节点上达到 1100 / 4 = 275。此外,您应该通过确保单个节点组可以容纳所有并发事务来提供故障恢复;换句话说,每个数据节点的 MaxNoOfConcurrentTransactions 足以覆盖等于 TotalNoOfConcurrentTransactions / 节点组数的事务数。如果该集群只有一个节点组, MaxNoOfConcurrentTransactions则应设置为 1100(与整个集群的并发事务总数相同)。

    此外,每笔交易至少涉及一次操作;因此,为 设置的值 MaxNoOfConcurrentTransactions应始终不超过 的值 MaxNoOfConcurrentOperations

    必须为所有集群数据节点将此参数设置为相同的值。这是因为当一个数据节点发生故障时,最老的幸存节点会重新创建故障节点中正在进行的所有事务的事务状态。

    可以使用滚动重启来更改此值,但集群上的流量必须保证在发生此过程时不会发生比旧级别和新级别中较低级别更多的事务。

    默认值为 4096。

  • MaxNoOfConcurrentOperations

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 32K
    范围 32 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

    此参数应至少设置为事务中同时更新的记录数除以集群数据节点数。例如,在一个有四个数据节点并且预计使用事务处理一百万个并发更新的集群中,您应该将此值设置为 1000000 / 4 = 250000。为了帮助提供对故障的弹性,建议您设置此值参数设置为足够高的值以允许单个数据节点处理其节点组的负载。换句话说,您应该将值设置为total number of concurrent operations / number of node groups. (在只有一个节点组的情况下,这与整个集群的并发操作总数相同。)

    因为每笔交易总是涉及至少一个操作,所以 的值 MaxNoOfConcurrentOperations应该总是大于或等于 的值 MaxNoOfConcurrentTransactions

    读取设置锁的查询也会导致创建操作记录。在各个节点内分配了一些额外的空间,以适应节点上分布不完美的情况。

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

    默认值为 32768。

    该参数实际上处理两个可以单独配置的值。其中第一个指定事务协调器要放置多少操作记录。第二部分指定数据库本地有多少操作记录。

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

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

  • MaxNoOfLocalOperations

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 不明确的
    范围 32 - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

    默认情况下,此参数计算为 1.1 × MaxNoOfConcurrentOperations。这适合具有许多并发事务的系统,它们都不是很大。如果需要一次处理一个非常大的事务并且有很多节点,那么通过显式指定此参数来覆盖默认值是个好主意。

  • MaxDMLOperationsPerTransaction

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 操作 (DML)
    默认 4294967295
    范围 32 - 4294967295
    重启类型

    N(新开发银行 7.5.0)

    此参数限制事务的大小。如果事务需要的 DML 操作多于此数量,则会中止该事务。

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

这些参数的默认值适用于大多数情况。但是,需要支持涉及大量行或操作的事务的用户可能需要增加这些值以在系统中实现更好的并行性,而应用程序需要相对较小事务的用户可以减小这些值以节省内存。

  • MaxNoOfConcurrentIndexOperations

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 8K
    范围 0 - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

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

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

  • MaxNoOfFiredTriggers

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 4000
    范围 0 - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

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

    当执行影响唯一哈希索引的操作时,将创建一条记录。在具有唯一哈希索引的表中插入或删除记录或更新属于唯一哈希索引的列会触发索引表中的插入或删除。结果记录用于表示此索引表操作,同时等待触发它的原始操作完成。此操作是短暂的,但在对包含一组唯一哈希索引的基表进行许多并行写入操作的情况下,仍可能需要其池中的大量记录。

  • TransactionBufferMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 1M
    范围 1K - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    受此参数影响的内存用于跟踪更新索引表和读取唯一索引时触发的操作。该内存用于存储这些操作的键和列信息。很少需要更改此参数的默认值。

    默认值为 TransactionBufferMemory 1MB。

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

扫描和缓冲。  模块中还有其他[ndbd]参数Dblqh(在 中 ndb/src/kernel/blocks/Dblqh/Dblqh.hpp)会影响读取和更新。其中包括 ZATTRINBUF_FILESIZE,默认设置为 10000 × 128 字节 (1250KB) 和 ZDATABUF_FILE_SIZE,默认设置为 10000*16 字节(大约 156KB)的缓冲区空间。迄今为止,既没有来自用户的任何报告,也没有来自我们自己的广泛测试的任何结果表明应该增加这些编译时间限制中的任何一个。

  • BatchSizePerLocalScan

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 256
    范围 1 - 992
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

    此参数用于计算用于处理并发扫描操作的锁定记录数。

    BatchSizePerLocalScanBatchSize与 SQL 节点 中定义的有很强的联系 。

  • LongMessageBuffer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 64M
    范围 512K - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

  • MaxFKBuildBatchSize

    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 整数
    默认 64
    范围 16 - 512
    添加 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

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

  • MaxNoOfConcurrentScans

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 256
    范围 2 - 500
    重启类型

    N(新开发银行 7.5.0)

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

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

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

  • MaxNoOfLocalScans

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 4 * MaxNoOfConcurrentScans * [数据节点数] + 2
    范围 32 - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

    如果许多扫描未完全并行化,则指定本地扫描记录的数量。当不提供本地扫描记录数时,计算如下:

    4 * MaxNoOfConcurrentScans * [# data nodes] + 2

    最小值为 32。

  • MaxParallelCopyInstances

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 64
    重启类型

    N(新开发银行 7.5.0)

    此参数设置在节点重启或系统重启的复制阶段中使用的并行化,当当前刚刚启动的节点通过从最新节点复制任何更改的记录与已经具有当前数据的节点同步时. 因为在这种情况下完全并行会导致过载情况, MaxParallelCopyInstances所以提供了一种减少它的方法。该参数的默认值为0。该值表示有效并行度等于刚启动的节点以及更新它的节点中LDM实例的数量。

  • MaxParallelScansPerFragment

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 256
    范围 1 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    可以配置在开始排队进行串行处理之前允许的最大并行扫描数(TUP扫描 和 扫描)。TUX您可以增加此值以在并行执行大量扫描时利用任何未使用的 CPU 并提高其性能。

  • MaxReorgBuildBatchSize

    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 整数
    默认 64
    范围 16 - 512
    添加 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

    用于表分区重组的最大扫描批处理大小。增加为此参数设置的值可能会以对正在进行的流量产生更大影响为代价来加速重组。

  • MaxUIBuildBatchSize

    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 整数
    默认 64
    范围 16 - 512
    添加 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

    用于构建唯一键的最大扫描批量大小。增加为此参数设置的值可能会以对正在进行的流量产生更大影响为代价来加速此类构建。

内存分配

MaxAllocate

版本(或更高版本) 新开发银行 7.5.0
类型或单位 未签名
默认 32M
范围 1M - 1G
弃用 是(在 NDB 8.0 中)
重启类型

N(新开发银行 7.5.0)

此参数用于旧版本的 NDB Cluster,但在 NDB 7.5 或 NDB 7.6 中无效。

哈希映射大小

DefaultHashMapSize

版本(或更高版本) 新开发银行 7.5.0
类型或单位 LDM线程
默认 240
范围 0 - 3840
重启类型

N(新开发银行 7.5.0)

使用的表哈希映射的大小 NDB可以使用此参数进行配置。DefaultHashMapSize可以取三个可能值(0、240、3840)中的任何一个。

此参数的最初预期用途是促进升级,尤其是降级到具有不同默认哈希映射大小的非常旧的版本或从这些版本降级。从 NDB Cluster 7.3(或更高版本)升级到更高版本时,这不是问题。

不支持在创建或修改DefaultHashMapSize 等于 3840 的任何表后在线减小此参数。

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

  • FragmentLogFileSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 16M
    范围 4M - 1G
    重启类型

    在 (NDB 7.5.0)

    设置此参数使您能够直接控制重做日志文件的大小。这在 NDB Cluster 在高负载下运行并且在尝试打开新文件之前无法足够快地关闭片段日志文件的情况下很有用(一次只能打开 2 个片段日志文件);增加片段日志文件的大小可以让集群在打开每个新的片段日志文件之前有更多时间。此参数的默认值为 16M。

    有关片段日志文件的更多信息,请参阅 NoOfFragmentLogFiles.

  • InitialNoOfOpenFiles

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 文件
    默认 27
    范围 20 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此参数设置为打开的文件分配的初始内部线程数。

    默认值为 27。

  • InitFragmentLogFiles

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 [查看值]
    默认
    范围 稀疏,完整
    重启类型

    在 (NDB 7.5.0)

    默认情况下,碎片日志文件是在执行数据节点的初始启动时稀疏地创建的——也就是说,根据所使用的操作系统和文件系统,并非所有字节都必须写入磁盘。但是,可以通过此参数覆盖此行为并强制写入所有字节,而不管使用的平台和文件系统类型如何。 InitFragmentLogFiles 取两个值之一:

    • SPARSE. 片段日志文件是稀疏地创建的。这是默认值。

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

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

  • EnablePartialLcp

    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 布尔值
    默认 真的
    范围 ...
    添加 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

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

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

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

    在 NDB 7.6.7 及更高版本中,将此参数设置为 false也会禁用自适应 LCP 控制机制使用的磁盘写入速度计算。

  • LcpScanProgressTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 第二
    默认 60
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    本地检查点片段扫描看门狗定期检查作为本地检查点的一部分执行的每个片段扫描是否没有进展,如果在给定的时间过去后没有进展,则关闭节点。可以使用 LcpScanProgressTimeout 数据节点配置参数设置此间隔,该参数设置在 LCP 片段扫描看门狗关闭节点之前本地检查点可以停止的最长时间。

    默认值为 60 秒(提供与以前版本的兼容性)。将此参数设置为 0 将完全禁用 LCP 片段扫描看门狗。

  • MaxNoOfOpenFiles

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 0
    范围 20 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

    默认值为 0。但是,此参数可设置的最小值为 20。

  • MaxNoOfSavedMessages

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 25
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

  • MaxLCPStartDelay

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位
    默认 0
    范围 0 - 600
    重启类型

    N(新开发银行 7.5.0)

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

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

  • NoOfFragmentLogFiles

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 16
    范围 3 - 4294967039 (0xFFFFFEFF)
    重启类型

    在 (NDB 7.5.0)

    此参数设置节点的 REDO 日志文件数,以及分配给 REDO 日志记录的空间量。因为 REDO 日志文件是环状组织的,所以集合中的第一个和最后一个日志文件(有时分别称为日志文件)不相遇是非常重要的。当它们彼此靠得太近时,由于没有空间容纳新日志记录,节点开始中止包含更新的所有事务。

    REDO插入该日志记录以来,在完成两个必需的本地检查点之前,不会删除该日志记录。检查点频率由本章其他地方讨论的它自己的一组配置参数决定。

    默认参数值为 16,默认情况下表示 16 组 4 个 16MB 文件,总共 1024MB。各个日志文件的大小可以使用 FragmentLogFileSize 参数进行配置。在需要大量更新的场景下, NoOfFragmentLogFiles 可能需要设置高达300甚至更高的值,为REDO日志提供足够的空间。

    如果检查点很慢并且有太多写入数据库的日志文件已满并且无法在不危及恢复的情况下切割日志尾部,则所有更新事务都将中止并显示内部错误代码 410 ( Out of log file space temporarily)。这种情况一直存在,直到检查点完成并且可以向前移动日志尾部。

    重要的

    这个参数不能即时改变;您必须使用 重新启动节点 --initial。如果您希望为正在运行的集群中的所有数据节点更改此值,您可以使用滚动节点重启( --initial在启动每个数据节点时使用)来实现。

  • RecoveryWork

    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 整数
    默认 50
    范围 25 - 100
    版本(或更高版本) 新开发银行 7.6.5
    类型或单位 整数
    默认 60
    范围 25 - 100
    添加 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

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

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

    • 重启期间需要做更多工作

    较低的值RecoveryWork表示:

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

    • 重启期间的工作更少,因此重启更快,但以正常操作期间的更多工作为代价

    例如,设置RecoveryWork为 60 意味着 LCP 的总大小大约是要检查点的数据大小的 1 + 0.6 = 1.6 倍。这意味着与使用完整检查点的重启期间完成的工作相比,重启的恢复阶段需要多 60% 的工作。(这在重启的其他阶段得到了更多的补偿,因此使用部分 LCP 时整体重启仍然比使用完整 LCP 时更快。)为了不填满重做日志,有必要写在1 + (1 / RecoveryWork) 乘以检查点期间数据更改的速率——因此,当 RecoveryWork= 60,需要以大约 1 + (1 / 0.6 ) = 2.67 倍的变化率写入。换句话说,如果以每秒 10 兆字节的速度写入更改,则需要以每秒大约 26.7 兆字节的速度写入检查点。

    设置RecoveryWork= 40 意味着只需要总 LCP 大小的 1.4 倍(因此恢复阶段花费的时间减少 10% 到 15%。在这种情况下,检查点写入速率是更改速率的 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_work您可以通过在源代码中更改、 insert_work和 的值delete_work并重新编译来更改模拟 。有关详细信息,请参阅程序的源代码。

  • InsertRecoveryWork

    版本(或更高版本) 新开发银行 7.6.5
    类型或单位 整数
    默认 40
    范围 0 - 70
    添加 新开发银行 7.6.5
    重启类型

    N(新开发银行 7.5.0)

    RecoveryWork用于插入行 的百分比 。较高的值会增加本地检查点期间的写入次数,并减小 LCP 的总大小。较低的值会减少 LCP 期间的写入次数,但会导致更多空间用于 LCP,这意味着恢复需要更长的时间。此参数仅在 EnablePartialLcp为 true 时有效,即仅在启用部分本地检查点时有效。

  • EnableRedoControl

    版本(或更高版本) 新开发银行 7.6.7
    类型或单位 布尔值
    默认 错误的
    范围 ...
    添加 新开发银行 7.6.7
    重启类型

    N(新开发银行 7.5.0)

    启用自适应检查点速度以控制重做日志的使用。设置为false禁用(默认)。设置 EnablePartialLcpfalse也会禁用自适应计算。

    启用后,EnableRedoControl允许数据节点在将 LCP 写入磁盘的速率方面具有更大的灵活性。更具体地说,启用此参数意味着可以采用更高的写入速率,以便 LCP 可以完成并更快地修剪重做日志,从而减少恢复时间和磁盘空间要求。此功能允许数据节点更好地利用现代固态存储设备和协议提供的更高速率的 I/O 和更大的带宽,例如使用 Non-Volatile Memory Express (NVMe) 的固态驱动器 (SSD)。

    该参数当前默认为false (已禁用),因为NDB相对于采用固态技术(例如使用传统硬盘 (HDD) 的系统),I/O 或带宽受限的系统仍然广泛部署。在诸如此类的设置中, EnableRedoControl机制很容易导致 I/O 子系统饱和,增加数据节点输入和输出的等待时间。特别是,这可能会导致 NDB 磁盘数据表出现问题,这些表具有与数据节点 LCP 和重做日志文件共享受限 IO 子系统的表空间或日志文件组;此类问题可能包括由于 GCP 停止错误导致的节点或集群故障。

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

笔记

这些仅作为集群的建议,任何未指定的都将恢复为显示的默认值。

  • MaxNoOfAttributes

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 1000
    范围 32 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此参数设置建议的最大属性数,可以在集群中定义;就像 MaxNoOfTables,它不打算用作硬上限。

    (在较旧的 NDB Cluster 版本中,此参数有时被视为某些操作的硬限制。这导致 NDB Cluster Replication 出现问题,当可能创建的表多于可复制的表时,有时会导致混淆[或不可能,视情况而定]创建多个MaxNoOfAttributes属性。)

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

    设置 时,重要的是要为将来可能要执行的MaxNoOfAttributes任何语句提前做好准备 。ALTER TABLE这是因为,在ALTER TABLECluster 表上执行期间,使用的属性数量是原始表中属性数量的 3 倍,一个好的做法是允许将此数量加倍。例如,如果具有最多属性 ( greatest_number_of_attributes) 的 NDB Cluster 表有 100 个属性,则值的一个好的起点 MaxNoOfAttributes 是。 6 * greatest_number_of_attributes = 600

    您还应该估计每个表的平均属性数并将其乘以 MaxNoOfTables。如果此值大于上一段中获得的值,则应使用较大的值。

    假设您可以毫无问题地创建所有需要的表,您还应该通过ALTER TABLE在配置参数后尝试实际来验证此数量是否足够。如果这不成功,再增加 MaxNoOfAttributes另一个倍数 MaxNoOfTables并再次测试。

  • MaxNoOfTables

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 128
    范围 8 - 20320
    重启类型

    N(新开发银行 7.5.0)

    为每个表和集群中的每个唯一哈希索引分配一个表对象。此参数为整个集群设置建议的最大表对象数;就像 MaxNoOfAttributes,它不打算用作硬上限。

    (在较旧的 NDB Cluster 版本中,此参数有时被视为某些操作的硬限制。这导致 NDB Cluster Replication 出现问题,当可能创建的表多于可复制的表时,有时会导致混淆[或不可能,视情况而定]创建多个MaxNoOfTables表。)

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

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

    笔记

    MaxNoOfTablesMaxNoOfOrderedIndexes和 的总和 MaxNoOfUniqueHashIndexes 不得超过(4294967294)。 232 − 2

  • MaxNoOfOrderedIndexes

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 128
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

    笔记

    MaxNoOfTablesMaxNoOfOrderedIndexes和 的总和 MaxNoOfUniqueHashIndexes 不得超过(4294967294)。 232 − 2

  • MaxNoOfUniqueHashIndexes

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 64
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

    笔记

    MaxNoOfTablesMaxNoOfOrderedIndexes和 的总和 MaxNoOfUniqueHashIndexes 不得超过(4294967294)。 232 − 2

  • MaxNoOfTriggers

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 768
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    为每个唯一的散列索引分配内部更新、插入和删除触发器。(这意味着为每个唯一的哈希索引创建了三个触发器。)但是, 有序索引只需要一个触发器对象。备份还为集群中的每个普通表使用三个触发器对象。

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

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

    默认值为 768。

  • MaxNoOfSubscriptions

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

  • MaxNoOfSubscribers

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    仅当使用 NDB Cluster Replication 时,此参数才有意义。默认值为 0,被视为 2 * MaxNoOfTables; 也就是说,NDB对于两个 MySQL 服务器(一个充当复制源,另一个充当副本)中的每一个,每个表都有一个订阅。每个订阅者使用 16 字节的内存。

    当使用循环复制、多源复制和其他涉及超过 2 个 MySQL 服务器的复制设置时,您应该将此参数增加到复制中包含的 mysqld进程数(这通常但不总是与集群)。例如,如果您有一个使用三个 NDB Cluster 的循环复制设置, 每个 cluster 附加一个mysqld ,并且这些mysqld进程中的每一个都充当源和副本,您应该设置 MaxNoOfSubscribers 等于3 * MaxNoOfTables

    有关更多信息,请参阅 第 21.7 节,“NDB Cluster 复制”

  • MaxNoOfConcurrentSubOperations

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 256
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

布尔参数。  数据节点的行为也受到一组 [ndbd]采用布尔值的参数的影响。这些参数中的每一个都可以 TRUE通过将它们设置为等于 1Y以及 FALSE通过将它们设置为等于 0或来指定N

  • CompressedLCP

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 错误的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

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

    重要的

    您无法将压缩的本地检查点恢复到运行不支持此功能的 MySQL 版本的集群。

    默认值为0(禁用)。

    在 Windows 平台上,此参数在 NDB 7.5 或 NDB 7.6 中无效。

  • CrashOnCorruptedTuple

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 真的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

    启用此参数后,它会强制数据节点在遇到损坏的元组时关闭。在 NDB 7.5 中,它默认启用。

  • Diskless

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 真|假 (1|0)
    默认 错误的
    范围 真假
    重启类型

    是(新开发银行 7.5.0)

    可以将 NDB Cluster 表指定为 diskless,这意味着表不会检查到磁盘并且不会发生日志记录。这样的表只存在于主存中。使用无盘表的结果是表和这些表中的记录都不会在崩溃后幸存下来。但是,在无盘模式下运行时,可以 在无盘计算机上 运行ndbd 。

    重要的

    此功能使整个 集群以无盘模式运行。

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

    Diskless默认情况下禁用。

  • LateAlloc

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 1个
    范围 0 - 1
    重启类型

    N(新开发银行 7.5.0)

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

  • LockPagesInMainMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 0
    范围 0 - 2
    重启类型

    N(新开发银行 7.5.0)

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

    此参数采用整数值 、 或 之一 012作用如下表所示:

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

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

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

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

    笔记

    在旧的 NDB Cluster 版本中,这个参数是一个布尔值。0或者false 是默认设置,并禁用锁定。 1或者true在分配内存后启用进程锁定。NDB Cluster 7.5将此参数truefalse值视为错误。

    重要的

    glibc2.10 开始, glibc使用 per-thread arenas 来减少共享池上的锁争用,这会消耗实际内存。通常,数据节点进程不需要每线程 arenas,因为它在启动后不执行任何内存分配。(分配器的这种差异似乎不会显着影响性能。)

    glibc行为旨在通过MALLOC_ARENA_MAX 环境变量进行配置,但 2.16 之前此机制中的一个错误 glibc意味着该变量不能设置为小于 8,因此无法回收浪费的内存。(缺陷 #15907219;另请参阅 http://sourceware.org/bugzilla/show_bug.cgi?id=13137 了解有关此问题的更多信息。)

    此问题的一种可能的解决方法是使用 LD_PRELOAD环境变量预加载jemalloc内存分配库以取代 glibc.

  • ODirect

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 错误的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

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

    ODirect默认情况下禁用。

  • ODirectSyncFlag

    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 布尔值
    默认 错误的
    范围 真假
    添加 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

    启用此参数后,将执行重做日志写入,以便每次完成的文件系统写入都作为对fsync. 如果至少满足以下条件之一,则忽略此参数的设置:

    • ODirect未启用。

    • InitFragmentLogFiles 设置为SPARSE

    默认情况下禁用。

  • RestartOnErrorInsert

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 错误代码
    默认 2个
    范围 0 - 4
    重启类型

    N(新开发银行 7.5.0)

    此功能仅在构建调试版本时可用,在调试版本中,作为测试的一部分,可能会在执行各个代码块时插入错误。

    默认情况下禁用此功能。

  • StopOnError

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 1个
    范围 0, 1
    重启类型

    N(新开发银行 7.5.0)

    此参数指定数据节点进程在遇到错误情况时是应该退出还是执行自动重启。

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

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

    在 NDB Cluster 7.5.5 之前,如果数据节点进程以不受控制的方式退出(例如,由于在执行查询时对数据节点进程执行 kill -9,或由于分段错误),并且StopOnError设置为0,天使进程尝试以与之前启动完全相同的方式重新启动它,即使用上次启动节点时使用的相同启动选项。因此,如果数据节点进程最初是使用该--initial 选项启动的,它也会重新启动 --initial. 这意味着,在这种情况下,如果在很短的时间内在足够数量的数据节点上发生故障,其效果就如同您对整个集群进行了初始重启一样,导致所有数据丢失。此问题已在 NDB Cluster 7.5.5 和更高版本的 NDB 7.5 版本中得到解决(错误 #83510,错误 #24945638)。

    MySQL Cluster Manager 的用户应该注意,当 StopOnError等于 1 时,这会阻止 MySQL Cluster Manager 代理在执行自己的重启和恢复后重新启动任何数据节点。有关详细信息,请参阅 在 Linux 上启动和停止代理程序

  • UseShm

    版本(或更高版本) 新开发银行 7.6.6
    类型或单位 布尔值
    默认 错误的
    范围 真假
    添加 新开发银行 7.6.6
    重启类型

    N(新开发银行 7.5.0)

    在这个数据节点和也在这个主机上运行的 API 节点之间使用共享内存连接。设置为 1 以启用。

    有关更多信息,请参阅第 21.4.3.12 节,“NDB Cluster 共享内存连接”

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

有许多[ndbd]参数指定集群数据节点中各种操作之间的超时和间隔。大多数超时值以毫秒为单位指定。在适用的情况下提及任何例外情况。

  • TimeBetweenWatchDogCheck

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 6000
    范围 70 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

    出于实验目的或适应当地条件,可以轻松更改此参数。它可以在每个节点的基础上指定,尽管似乎没有理由这样做。

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

  • TimeBetweenWatchDogCheckInitial

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 6000
    范围 70 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    这类似于 TimeBetweenWatchDogCheck 参数,除了 TimeBetweenWatchDogCheckInitial 控制在分配内存的早期启动阶段存储节点内部执行检查之间经过的时间量。

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

  • StartPartialTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 30000
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此参数指定在调用集群初始化例程之前集群等待所有数据节点启动的时间。此超时用于尽可能避免部分集群启动。

    在执行集群的初始启动或初始重新启动时,此参数将被覆盖。

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

  • StartPartitionedTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 60000
    范围 0 - 4294967039 (0xFFFFFEFF)
    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 毫秒
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    如果集群在等待 StartPartialTimeout 几毫秒后准备好启动但仍可能处于分区状态,则集群会等待直到超时也过去。如果 StartPartitionedTimeout 设置为 0,集群将无限期等待(2 32 −1 毫秒,或大约 49.71 天)。

    在执行集群的初始启动或初始重新启动时,此参数将被覆盖。

    NDB 7.6 中的默认值为 0;以前是 60000(60 秒)。

  • StartFailureTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

  • StartNoNodeGroupTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 15000
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

    有关更多信息,请参阅第 21.6.7 节,“在线添加 NDB Cluster 数据节点”

  • HeartbeatIntervalDbDb

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 5000
    范围 10 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    发现故障节点的主要方法之一是使用心跳。此参数说明发送心跳信号的频率以及期望接收信号的频率。无法禁用心跳。

    在连续错过四个心跳间隔后,该节点被宣告死亡。因此,通过心跳机制发现故障的最大时间是心跳间隔的五倍。

    默认心跳间隔为 5000 毫秒(5 秒)。此参数不得大幅更改,并且节点之间的差异不应很大。如果一个节点使用 5000 毫秒,而监视它的节点使用 1000 毫秒,显然该节点很快就宣告死亡。可以在在线软件升级期间更改此参数,但增量很小。

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

  • HeartbeatIntervalDbApi

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 1500
    范围 100 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    每个数据节点向每个 MySQL 服务器(SQL 节点)发送心跳信号,以确保它们保持联系。如果 MySQL 服务器未能及时发送心跳,则它被宣布为 死亡,在这种情况下,所有正在进行的事务都已完成,所有资源都已释放。在之前的 MySQL 实例启动的所有活动完成之前,SQL 节点无法重新连接。此确定的三心跳标准与描述的相同 HeartbeatIntervalDbDb

    默认间隔为 1500 毫秒(1.5 秒)。此间隔在各个数据节点之间可能会有所不同,因为每个数据节点都独立于所有其他数据节点监视与其连接的 MySQL 服务器。

    有关详细信息,请参阅 网络通信和延迟

  • HeartbeatOrder

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 0
    范围 0 - 65535
    重启类型

    S(NDB 7.5.0)

    数据节点以循环方式相互发送心跳,每个数据节点监视前一个数据节点。如果给定数据节点未检测到心跳,则该节点将声明环中的前一个数据节点 已死(即集群不再可访问)。数据节点死亡的确定是全局完成的;换句话说; 一旦数据节点被宣布死亡,集群中的所有节点都将其视为死亡。

    与其他节点对之间的心跳相比,驻留在不同主机上的数据节点之间的心跳可能太慢(例如,由于非常低的心跳间隔或临时连接问题),这样一个数据节点就被宣告死亡,即使节点仍然可以作为集群的一部分运行。.

    在这种情况下,数据节点之间传输心跳的顺序可能会影响特定数据节点是否被宣告死亡。如果这种声明不必要地发生,这又会导致不必要的节点组丢失,从而导致集群失败。

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

    表21.9 运行在两台主机host1、host2上的四个数据节点A、B、C、D;每个数据节点属于两个节点组之一。

    节点组 运行的节点host1 运行的节点host2
    节点组 0: 节点A 节点B
    节点组 1: 节点C 节点D

    假设心跳按照A->B->C->D->A的顺序发送。在这种情况下,主机之间的心跳丢失导致节点 B 宣布节点 A 死亡,节点 C 宣布节点 B 死亡。这会导致节点组 0 丢失,因此集群会失败。另一方面,如果传输顺序为A->B->D->C->A(其他条件如前所述),则心跳丢失导致节点A和D宣告死亡;在这种情况下,每个节点组都有一个存活节点,集群存活。

    HeartbeatOrder 配置参数使心跳传输的顺序用户可配置 。默认值 HeartbeatOrder为零;允许在所有数据节点上使用默认值会导致心跳传输的顺序由NDB. 如果使用此参数,则必须为集群中的每个数据节点设置一个非零值(最大 65535),并且该值对于每个数据节点必须是唯一的;这导致心跳传输按照值从低到高的顺序从数据节点传输到数据节点 HeartbeatOrder (然后直接从具有最高值的数据节点传输) HeartbeatOrder到具有最低值的数据节点,以完成循环)。这些值不必是连续的。例如,要在前面概述的场景中强制执行心跳传输顺序 A->B->D->C->A,您可以设置 HeartbeatOrder 如下所示的值:

    表 21.10 HeartbeatOrder 值强制 A->B->D->C->A 的心跳转换顺序。

    节点 HeartbeatOrder价值
    一个 10
    20
    C 30
    25

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

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

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

    您可以DUMP 908在数据节点日志中观察此参数的效果。

  • ConnectCheckIntervalDelay

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此参数启用数据节点之间的连接检查,在其中一个节点心跳检查失败达 5 个间隔(最长为 HeartbeatIntervalDbDb 毫秒)之后。

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

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

  • TimeBetweenLocalCheckpoints

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 4 字节字数,以 2 为底的对数
    默认 20
    范围 0 - 31
    重启类型

    N(新开发银行 7.5.0)

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

    添加自上一个本地检查点开始以来执行的所有写操作的大小。此参数的特殊之处还在于它被指定为 4 字节字数的以 2 为底的对数,因此默认值 20 表示 4MB (4 × 2 20 ) 的写操作,21 表示 8MB,依此类推最大值为 31,相当于 8GB 的​​写入操作。

    集群中的所有写操作都加在一起。设置 TimeBetweenLocalCheckpoints 为 6 或更少意味着本地检查点连续执行而不暂停,独立于集群的工作负载。

  • TimeBetweenGlobalCheckpoints

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 2000
    范围 20 - 32000
    重启类型

    N(新开发银行 7.5.0)

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

    确保即使是最坏的情况(集群完全崩溃)也能得到妥善处理也很重要。为了保证这种情况发生,在给定时间间隔内发生的所有事务都被放入一个全局检查点,可以将其视为一组已刷新到磁盘的已提交事务。换句话说,作为提交过程的一部分,事务被放置在全局检查点组中。随后,该组的日志记录被刷新到磁盘,然后整个事务组被安全地提交到集群中所有计算机上的磁盘。

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

  • TimeBetweenGlobalCheckpointsTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 120000
    范围 10 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

  • TimeBetweenEpochs

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 100
    范围 0 - 32000
    重启类型

    N(新开发银行 7.5.0)

    此参数定义 NDB Cluster 复制的同步时期之间的间隔。默认值为 100 毫秒。

    TimeBetweenEpochsmicro-GCPs实现的一部分,可用于提高 NDB Cluster Replication 的性能。

  • TimeBetweenEpochsTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 0
    范围 0 - 256000
    重启类型

    N(新开发银行 7.5.0)

    此参数定义 NDB Cluster 复制的同步时期的超时。如果节点在该参数确定的时间内未能参与全局检查点,则该节点将关闭。默认值为 0;换句话说,超时被禁用。

    TimeBetweenEpochsTimeoutmicro-GCPs实现的一部分,可用于提高 NDB Cluster Replication 的性能。

    只要 GCP 保存时间超过 1 分钟或 GCP 提交时间超过 10 秒,此参数的当前值和警告就会写入集群日志。

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

  • MaxBufferedEpochs

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 纪元
    默认 100
    范围 0 - 100000
    重启类型

    N(新开发银行 7.5.0)

    订阅节点可以落后的未处理纪元数。超过此数量会导致滞后的订阅者断开连接。

    默认值 100 足以满足大多数正常操作。如果订阅节点确实延迟到足以导致断开连接,通常是由于与进程或线程相关的网络或调度问题。(在极少数情况下,问题可能是由于 NDB客户端中的错误引起的。)当纪元较长时,可能需要将值设置为低于默认值。

    断开连接可防止客户端问题影响数据节点服务、用完内存来缓冲数据并最终关闭。相反,只有客户端会因断开连接而受到影响(例如,二进制日志中的间隙事件),迫使客户端重新连接或重新启动进程。

  • MaxBufferedEpochBytes

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 26214400
    范围 26214400 (0x01900000) - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此节点分配给缓冲时期的总字节数。

  • TimeBetweenInactiveTransactionAbortCheck

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 1000
    范围 1000 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

  • TransactionInactiveTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 4294967039 (0xFFFFFEFF)
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此参数说明在事务中止之前允许在同一事务中的操作之间流逝的最长时间。

    此参数的默认值是4G (也是最大值)。对于需要保证没有事务长时间持有锁的实时数据库,这个参数应该设置一个比较小的值。将其设置为 0 意味着应用程序永远不会超时。单位是毫秒。

  • TransactionDeadlockDetectionTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 1200
    范围 50 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    当一个节点执行涉及事务的查询时,该节点在继续之前等待集群中的其他节点响应。该参数设置事务可以在一个数据节点内执行的时间量,即事务协调器等待每个参与事务的数据节点执行请求的时间。

    由于以下任何原因,可能会出现无法响应的情况:

    • 节点”了

    • 该操作已进入锁定队列

    • 请求执行操作的节点可能会严重超载。

    此超时参数说明事务协调器在中止事务之前等待另一个节点执行查询的时间,对于节点故障处理和死锁检测都很重要。

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

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

  • DiskSyncSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 4M
    范围 32K - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    这是在将数据刷新到本地检查点文件之前要存储的最大字节数。这样做是为了防止写入缓冲,这会显着影响性能。此参数无意取代 TimeBetweenLocalCheckpoints.

    笔记

    启用时ODirect,无需设置 DiskSyncSize;事实上,在这种情况下,它的价值被忽略了。

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

  • MaxDiskWriteSpeed

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 20M
    范围 1M - 1024G
    重启类型

    S(NDB 7.5.0)

    在此 NDB Cluster 中没有重新启动(通过此数据节点或任何其他数据节点)时,通过本地检查点和备份操作设置写入磁盘的最大速率(以字节/秒为单位)。

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

  • MaxDiskWriteSpeedOtherNodeRestart

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 50公尺
    范围 1M - 1024G
    重启类型

    S(NDB 7.5.0)

    当此 NDB Cluster 中的一个或多个数据节点重新启动时,设置本地检查点和备份操作写入磁盘的最大速率(以字节/秒为单位),而不是此节点。

    要设置此数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeedOwnRestart. 要设置当集群中任何地方都没有数据节点重新启动时允许的最大磁盘写入速率,请使用 MaxDiskWriteSpeed. 所有 LCP 的磁盘写入和备份操作的最低速度可以通过设置进行调整 MinDiskWriteSpeed

  • MaxDiskWriteSpeedOwnRestart

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 200M
    范围 1M - 1024G
    重启类型

    S(NDB 7.5.0)

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

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

  • MinDiskWriteSpeed

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 10M
    范围 1M - 1024G
    重启类型

    S(NDB 7.5.0)

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

    各种条件下 LCP 和备份允许的最大磁盘写入速率可使用参数 MaxDiskWriteSpeedMaxDiskWriteSpeedOwnRestart和 进行调整MaxDiskWriteSpeedOtherNodeRestart。有关详细信息,请参阅这些参数的说明。

  • ArbitrationTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 毫秒
    默认 7500
    范围 10 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

  • Arbitration

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 枚举
    默认 默认
    范围 默认、禁用、WaitExternal
    重启类型

    N(新开发银行 7.5.0)

    Arbitration 参数允许选择仲裁方案,对应于该参数的 3 个可能值之一:

    • 默认。  这使仲裁能够正常进行,由ArbitrationRank 管理和 API 节点的设置决定。这是默认值。

    • 禁用。 Arbitration = Disabled在文件的[ndbd default]部分中 设置为完成与在所有管理和 API 节点上config.ini设置为 0 相同的任务 。ArbitrationRankArbitration以这种方式设置时,任何 ArbitrationRank设置都将被忽略。

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

    重要的

    此参数应仅在[ndbd default]集群配置文件的部分中使用。Arbitration当为各个数据节点设置不同的值 时,集群的行为是未指定 的。

  • RestartSubscriberConnectTimeout

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 小姐
    默认 12000
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

    虽然此参数以毫秒为单位指定,但超时本身会解析为下一个最大的整秒。

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

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

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

  • UndoIndexBuffer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 2M
    范围 1M - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

    此参数以前设置撤消索引缓冲区的大小,但在当前版本的 NDB Cluster 中没有影响。

  • UndoDataBuffer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 16M
    范围 1M - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 8.0 中)
    重启类型

    N(新开发银行 7.5.0)

    此参数以前设置撤消数据缓冲区的大小,但在当前版本的 NDB Cluster 中没有影响。

  • RedoBuffer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 32M
    范围 1M - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    还需要记录所有更新活动。REDO 日志可以在系统重新启动时重播这些更新。NDB 恢复算法使用数据的 模糊检查点和 UNDO 日志,然后应用 REDO 日志来回放直到恢复点的所有更改。

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

    如果这个缓冲区太小, NDB存储引擎会发出错误代码 1221(REDO 日志缓冲区过载)。RedoBuffer出于这个原因,如果您试图在集群配置中在线更改 as 的一部分时 降低值,则应该小心 。

    ndbmtd为每个 LDM 线程分配一个单独的缓冲区(参见 ThreadConfig)。例如,对于 4 个 LDM 线程,一个ndbmtd 数据节点实际上有 4 个缓冲区,并 RedoBuffer为每个缓冲区分配字节,总4 * RedoBuffer字节数。

  • EventLogBufferSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 8192
    范围 0 - 64K
    重启类型

    S(NDB 7.5.0)

    控制用于数据节点内 NDB 日志事件的循环缓冲区的大小。

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

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

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

  • LogLevelStartup

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 1个
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

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

    默认级别为 1。

  • LogLevelShutdown

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

    作为节点正常关闭的一部分生成的事件的报告级别。

    默认级别为 0。

  • LogLevelStatistic

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

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

    默认级别为 0。

  • LogLevelCheckpoint

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 日志级别
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

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

    默认级别为 0。

  • LogLevelNodeRestart

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

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

    默认级别为 0。

  • LogLevelConnection

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

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

    默认级别为 0。

  • LogLevelError

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

    整个集群的错误和警告生成的事件的报告级别。这些错误不会导致任何节点故障,但仍被认为值得报告。

    默认级别为 0。

  • LogLevelCongestion

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 等级
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

    拥塞产生的事件的报告级别。这些错误不会导致节点故障,但仍被认为值得报告。

    默认级别为 0。

  • LogLevelInfo

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0 - 15
    重启类型

    N(新开发银行 7.5.0)

    为有关集群一般状态的信息而生成的事件的报告级别。

    默认级别为 0。

  • MemReportFrequency

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

    每个数据节点的数据内存和索引内存使用情况分别记录为文件中设置 的百分比和 32 KB 页数DataMemory(NDB 7.5 及更早版本) 。例如,如果 等于 100 MB,并且给定数据节点使用 50 MB 用于数据内存存储,则集群日志中的相应行可能如下所示: IndexMemoryconfig.iniDataMemory

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

    MemReportFrequency 不是必需的参数。如果使用,可以在[ndbd default] 部分为所有集群数据节点设置config.ini,也可以在配置文件的相应[ndbd]部分为单个数据节点设置或覆盖。最小值(也是默认值)为 0,在这种情况下,仅当内存使用率达到特定百分比(80%、90% 和 100%)时才会记录内存报告,如 第 1节中统计事件的讨论所述21.6.3.2,“NDB Cluster 日志事件”

  • StartupStatusReportFrequency

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    当数据节点启动时 --initial,它会在启动阶段 4 期间初始化重做日志文件(请参阅 第 21.6.4 节,“NDB Cluster 启动阶段摘要”)。NoOfFragmentLogFiles当为、 或两者设置非常大的值时 ,此初始化可能需要很长时间。您可以通过 配置参数FragmentLogFileSize强制定期记录有关此过程进度的报告 。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(默认值),则仅在重做日志文件初始化过程开始和完成时将报告写入集群日志。

数据节点调试参数

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

  • DictTrace

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 不明确的
    范围 0 - 100
    重启类型

    N(新开发银行 7.5.0)

    使用 . 创建和删除表生成的事件可能会导致记录跟踪 DictTrace。此参数仅在调试 NDB 内核代码时有用。DictTrace 取一个整数值。0 禁用日志记录;1 启用它;将此参数设置为 2 可启用附加 DBDICT调试输出的日志记录(缺陷号 20368450)。

  • WatchdogImmediateKill

    版本(或更高版本) 新开发银行 7.6.7
    类型或单位 布尔值
    默认 错误的
    范围 真假
    添加 新开发银行 7.6.7
    重启类型

    N(新开发银行 7.5.0)

    WatchdogImmediateKill在 NDB 7.6.7 及更高版本中,您可以通过启用数据节点配置参数 ,在出现看门狗问题时立即终止线程 。此参数应仅在调试或故障排除时使用,以获取跟踪文件,准确报告执行停止时发生的情况。

备份参数。 [ndbd]节讨论的参数定义了为执行在线备份而预留的内存缓冲区。

  • BackupDataBufferSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 16M
    范围 2M - 4294967039 (0xFFFFFEFF)
    版本(或更高版本) 新开发银行 7.5.1
    类型或单位 字节
    默认 16M
    范围 512K - 4294967039 (0xFFFFFEFF)
    弃用 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

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

  • BackupDiskWriteSpeedPct

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 百分
    默认 50
    范围 0 - 90
    重启类型

    N(新开发银行 7.5.0)

    在正常操作期间,数据节点尝试最大化用于本地检查点和备份的磁盘写入速度,同时保持在 和 设置的范围 MinDiskWriteSpeedMaxDiskWriteSpeed。磁盘写入限制为每个 LDM 线程提供了相等的总预算份额。这允许在不超过磁盘 I/O 预算的情况下进行并行 LCP。因为备份仅由一个 LDM 线程执行,这实际上导致了预算削减,导致备份完成时间更长,并且——如果变化率足够高——当备份日志缓冲区填充率是高于可实现的写入速率。

    这个问题可以通过使用 BackupDiskWriteSpeedPct配置参数来解决,该参数采用 0-90(含)范围内的值,该值被解释为在共享剩余预算之前保留的节点最大写入速率预算的百分比LCP 的 LDM 线程。运行备份的 LDM 线程接收备份的整个写入速率预算,加上其(减少的)本地检查点写入速率预算的份额。(这使得磁盘写入速率预算的行为类似于它在 NDB Cluster 7.3 及更早版本中的处理方式。)

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

  • BackupLogBufferSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 16M
    范围 2M - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    备份日志缓冲区的作用类似于备份数据缓冲区所扮演的角色,不同之处在于它用于生成在执行备份期间进行的所有表写入的日志。与备份数据缓冲区相同的原则适用于写入这些页面,除了当备份日志缓冲区中没有更多空间时,备份失败。因此,备份日志缓冲区的大小必须足够大,以处理在进行备份时由写入活动引起的负载。请参阅 第 21.6.8.3 节,“NDB Cluster 备份的配置”

    此参数的默认值对于大多数应用程序应该足够了。事实上,磁盘写入速度不足导致备份失败的可能性比备份日志缓冲区已满的可能性更大。如果磁盘子系统没有针对应用程序引起的写入负载进行配置,则集群不太可能执行所需的操作。

    最好以处理器成为瓶颈而不是磁盘或网络连接的方式配置集群节点。

    此参数的默认值为 16MB。

  • BackupMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 32M
    范围 0 - 4294967039 (0xFFFFFEFF)
    弃用 是(在 NDB 7.4 中)
    重启类型

    N(新开发银行 7.5.0)

    此参数已弃用,并且会在 NDB Cluster 的未来版本中删除。为它所做的任何设置都将被忽略。

  • BackupReportFrequency

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此参数控制备份期间在管理客户端中发布备份状态报告的频率,以及将此类报告写入集群日志的频率(前提是集群事件日志记录配置为允许它 - 请参阅 日志记录和检查点)。 BackupReportFrequency 表示备份状态报告之间的时间(以秒为单位)。

    默认值为 0。

  • BackupWriteSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 256K
    范围 32K - 4294967039 (0xFFFFFEFF)
    弃用 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

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

    此参数的默认值为 256KB。

  • BackupMaxWriteSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 1M
    范围 256K - 4294967039 (0xFFFFFEFF)
    弃用 新开发银行 7.6.4
    重启类型

    N(新开发银行 7.5.0)

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

    此参数的默认值为 1MB。

  • CompressedBackup

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 错误的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

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

    重要的

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

    默认值为0(禁用)。

笔记

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

其他要求。  指定这些参数时,必须满足以下关系。否则数据节点无法启动。

  • BackupDataBufferSize >= BackupWriteSize + 188KB

  • BackupLogBufferSize >= BackupWriteSize + 16KB

  • BackupMaxWriteSize >= BackupWriteSize

NDB Cluster 实时性能参数

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

笔记

要使用这些参数,数据节点进程必须作为系统根运行。

  • BuildIndexThreads

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 0
    范围 0 - 128
    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 数字
    默认 128
    范围 0 - 128
    重启类型

    N(新开发银行 7.5.0)

    此参数确定在系统或节点启动期间以及运行 ndb_restore --rebuild-indexes时重建有序索引时要创建的线程数。仅当每个数据节点的表有多个片段时才支持它(例如,当 COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_LDM_X_2" 与 一起使用时CREATE TABLE)。

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

    使用 ndbdndbmtd时支持此参数。

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

  • LockExecuteThreadToCPU

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 一组 CPU ID
    默认 0
    范围 ...
    重启类型

    N(新开发银行 7.5.0)

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

    指定的 ID 数应与 确定的执行线程数相匹配 MaxNoOfExecutionThreads。但是,无法保证在使用此参数时线程会以任何给定顺序分配给 CPU。您可以使用 获得这种类型的更细粒度的控制 ThreadConfig

    LockExecuteThreadToCPU 没有默认值。

  • LockMaintThreadsToCPU

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 中央处理器编号
    默认 0
    范围 0 - 64K
    重启类型

    N(新开发银行 7.5.0)

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

    该参数的值是一个整数,范围是 0 到 65535(含)。没有默认值

  • Numa

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 1个
    范围 ...
    重启类型

    N(新开发银行 7.5.0)

    该参数决定了 Non-Uniform Memory Access (NUMA) 是由操作系统控制还是由数据节点进程控制,数据节点是使用 ndbd还是ndbmtd。默认情况下,NDB尝试在主机操作系统提供 NUMA 支持的任何数据节点上使用交错的 NUMA 内存分配策略。

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

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

    Numa配置参数仅在可用的 Linux 系统上受 支持libnuma.so

  • RealtimeScheduler

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 错误的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

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

    默认值为 0(禁用计划)。

  • SchedulerExecutionTimer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 微秒
    默认 50
    范围 0 - 11000
    重启类型

    N(新开发银行 7.5.0)

    此参数指定线程在发送前在调度程序中执行的时间(以微秒为单位)。将其设置为 0 可最小化响应时间;要获得更高的吞吐量,您可以以更长的响应时间为代价来增加该值。

    默认值为 50 微秒,我们的测试表明它可以在高负载情况下略微提高吞吐量,而不会实质性地延迟请求。

  • SchedulerResponsiveness

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 5个
    范围 0 - 10
    重启类型

    N(新开发银行 7.5.0)

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

  • SchedulerSpinTimer

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 微秒
    默认 0
    范围 0 - 500
    重启类型

    N(新开发银行 7.5.0)

    此参数指定线程在休眠前在调度程序中执行的时间(以微秒为单位)。

    默认值为 0。

  • TwoPassInitialNodeRestartCopy

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 布尔值
    默认 错误的
    范围 真假
    版本(或更高版本) 新开发银行 7.6.4
    类型或单位 布尔值
    默认 真的
    范围 真假
    重启类型

    N(新开发银行 7.5.0)

    通过将此配置参数设置为 ,可以为数据节点的初始重启启用有序索引的多线程构建true,这可以在初始节点重启期间启用数据的两次复制。在 NDB 7.6 中,这是默认值(Bug #26704312,Bug #27109117)。

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

多线程配置参数 (ndbmtd)。  ndbmtd默认作为单线程进程运行,必须配置为使用多线程,使用两种方法中的任何一种,这两种方法都需要在 config.ini文件中设置配置参数。第一种方法只是为 MaxNoOfExecutionThreads 配置参数设置一个合适的值。第二种方法,可以 使用 ThreadConfig. 接下来的几段提供了有关这些参数及其在多线程数据节点中的使用的信息。

  • MaxNoOfExecutionThreads

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 2个
    范围 2 - 72
    重启类型

    是(新开发银行 7.5.0)

    S(NDB 7.6.1)

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

    SettingMaxNoOfExecutionThreads设置每种类型的线程数,由文件中的矩阵确定 storage/ndb/src/kernel/vm/mt_thr_config.cpp。下表显示了 的可能值的这些线程数MaxNoOfExecutionThreads

    表 21.11 MaxNoOfExecutionThreads 值和线程类型(LQH、TC、发送、接收)对应的线程数。

    MaxNoOfExecutionThreads价值 LDM线程 TC线程 发送线程 接收线程
    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;从 NDB 7.5.7 开始,明确不允许出现这种情况的配置。(缺陷号 25333414)

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

    如果磁盘页面缓冲区不够大,则在使用超过默认数量的 LDM 线程时为磁盘数据表添加大表空间可能会导致资源和 CPU 使用问题;有关详细信息,请参阅 DiskPageBufferMemory 配置参数的说明。

    线程类型将在本节后面描述(参见 参考资料 ThreadConfig)。

    将此参数设置在允许的值范围之外会导致管理服务器在启动时中止并显示错误错误行 :参数 MaxNoOfExecutionThreads 的number值非法 value

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

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

    多线程数据节点进程总是至少产生此处列出的线程:

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

    • 1个接收线程

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

    对于MaxNoOfExecutionThreads8 或更小的值,不会创建 TC 线程,而 TC 处理将由主线程执行。

    在 NDB 7.6 之前,更改 LDM 线程数总是需要重新启动系统,无论是使用此参数还是 ThreadConfig. 在 NDB 7.6 及更高版本中,如果满足以下条件 ,则可以使用节点初始重启 ( NI ) 来影响更改:

    • 如果在更改之后,LDM 线程的数量与以前相同,则只需要简单的节点重启(滚动重启,或 N)来实现更改。

    • 否则(即,如果 LDM 线程数发生变化),如果满足以下两个条件 ,仍然可以使用节点初始重启 ( NI ) 来影响更改:

      1. 每个 LDM 线程最多处理 8 个片段,并且

      2. 表分片总数是 LDM 线程数的整数倍。

    在 NDB 7.6 之前,如果集群的 IndexMemory使用率大于 50%,更改此设置需要初始重启集群。(在这种情况下,建议最多 IndexMemory使用 30-35%。)否则,节点之间的资源使用和 LDM 线程分配无法平衡,这可能导致 LDM 线程未充分利用和过度利用,并最终导致数据节点故障。在 NDB 7.6 及更高版本中,不需要初始重启来影响此参数的更改。

  • NoOfFragmentLogParts

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 4个
    范围 4, 6, 8, 10, 12, 16, 20, 24, 32
    重启类型

    在 (NDB 7.5.0)

    设置属于此ndbmtd的重做日志的日志文件组数。此参数的值应设置为等于 ndbmtd使用的 LDM 线程数,由 的设置确定 MaxNoOfExecutionThreads。从 NDB 7.5.7 开始,不允许每个 LDM 使用超过 4 个重做日志部分的配置。(缺陷号 25333414)

    有关详细信息,请参阅说明 MaxNoOfExecutionThreads

  • ThreadConfig

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 细绳
    默认 ''
    范围 ...
    重启类型

    是(新开发银行 7.5.0)

    S(NDB 7.6.1)

    此参数与ndbmtd一起使用,用于将不同类型的线程分配给不同的 CPU。它的值是一个字符串,其格式具有以下语法:

    ThreadConfig := entry[,entry[,...]]
    
    entry := type={param[,param[,...]]}
    
    type := ldm | 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

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

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

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

    • 给定类型的线程将非独占绑定到的一组 CPU。这由 或 之一cpubind决定 cpusetcpubind 使每个线程(非排他地)绑定到集合中的一个 CPU;cpuset意味着每个线程都绑定(非排他地)到指定的 CPU 集。

      在 Solaris 上,您可以改为指定一组 CPU,给定类型的线程将专门绑定到这些 CPU。cpubind_exclusive使每个线程专门绑定到集合中的一个 CPU; cpuset_exclsuive意味着每个线程都专门绑定到指定的 CPU 集。

      单个配置中只能提供 cpubindcpusetcpubind_exclusive或 之一。cpuset_exclusive

    • spintime确定线程在进入休眠前自旋的等待时间(以微秒为单位)。

      的默认值spintimeSchedulerSpinTimer 数据节点配置参数的值。

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

    • 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系统调用的值。由于进程的较低 niceness 值表示较高的进程优先级,因此增加 thread_prio具有降低该nice值的效果。

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

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

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

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

      表 21.13 在 Solaris 上 thread_prio 到 FX 优先级的映射

      thread_prio价值 SolarisFX优先级
      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_prio到传递给 Windows API SetThreadPriority()函数的 Windows 线程优先级值。该映射如下表所示:

      表 21.14 thread_prio 到 Windows 线程优先级的映射

      thread_prio价值 Windows 线程优先级
      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 线程越多,数据的分区程度就越高。每个 LDM 线程都维护自己的数据集和索引分区,以及自己的重做日志。设置的值ldm必须是值 1、2、4、6、8、12、16、24 或 32 之一。

      更改 LDM 线程数通常需要初始系统重启才能有效且安全地进行集群操作。NDB 7.6 放宽了此要求,如本节后面所述。(使用 完成时也是如此 MaxNoOfExecutionThreads。) NDB 7.5 及更早版本:如果 IndexMemory 使用率超过 50%,则需要重新启动集群;IndexMemory在这种情况下,建议最多使用 30-35% 。否则,节点之间的内存分配和 LDM 线程无法平衡,最终可能导致数据节点故障。

      当使用超过默认数量的 LDM 时,为磁盘数据表添加大型表空间(数百 GB 或更多)如果 DiskPageBufferMemory 不够大,可能会导致资源和 CPU 使用问题。

    • tc:事务协调器线程(DBTC内核块)包含正在进行的事务的状态。最大 TC 线程数为 32。

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

      设置tc为 0 会导致 TC 处理由主线程完成。在大多数情况下,这实际上与将其设置为 1 相同。

      范围:0 - 32

    • main:数据字典和事务协调器(DBDIHDBTC内核块),提供模式管理。这始终由单个专用线程处理。

      范围:仅限 1。

    • recv:接收线程(CMVMI内核块)。每个接收线程处理一个或多个套接字,用于与 NDB Cluster 中的其他节点通信,每个节点一个套接字。NDB Cluster 支持多个接收线程;最大值是 16 个这样的线程。

      范围:1 - 16

    • send:发送线程(CMVMI内核块)。为了增加吞吐量,可以从一个或多个独立的专用线程(最多 8 个)执行发送。

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

      范围:0 - 16

    • rep:复制线程(SUMA内核块)。异步复制操作始终由单个专用线程处理。

      范围:仅限 1。

    • io:文件系统等杂项操作。这些任务要求不高,并且始终由单个专用 I/O 线程作为一组处理。

      范围:仅限 1。

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

      范围:仅限 1。

    • idxbld:离线索引构建线程。与前面列出的其他永久线程类型不同,这些线程是临时线程,仅在节点或系统重启期间或运行ndb_restore --rebuild-indexes时创建和使用。它们可能绑定到与绑定到永久线程类型的 CPU 集重叠的 CPU 集。

      thread_priorealtimespintime值不能为离线索引构建线程设置。此外, count对于此类线程,将被忽略。

      如果idxbld未指定,则默认行为如下:

      • 如果 I/O 线程也未绑定,则离线索引构建线程未绑定,并且这些线程使用任何可用内核。

      • 如果绑定了 I/O 线程,则离线索引构建线程将绑定到整个绑定线程集,因为这些线程不应执行其他任务。

      范围:0 - 1。

      NDB 7.6 中添加了此线程类型。(错误#25835748,错误#26928111)

    在 NDB 7.6 之前,更改ThreadCOnfig 需要系统初始重启。在 NDB 7.6(及更高版本)中,在某些情况下可以放宽此要求:

    • 如果在更改之后,LDM 线程的数量与以前相同,则只需要简单的节点重启(滚动重启,或 N)来实现更改。

    • 否则(即,如果 LDM 线程数发生变化),如果满足以下两个条件 ,仍然可以使用节点初始重启 ( NI ) 来影响更改:

      1. 每个 LDM 线程最多处理 8 个片段,并且

      2. 表分片总数是 LDM 线程数的整数倍。

    在任何其他情况下,需要系统初始重启来更改此参数。

    NDB 7.6 可以通过以下两个标准区分线程类型:

    • 该线程是否为执行线程。main, ldm, recv, rep, tc, 和类型send的线程是执行线程;iowatchdogidxbld线程不被视为执行线程。

    • 给定任务的线程分配是永久的还是临时的。目前,除此之外的所有线程类型都idxbld被认为是永久的;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 个接收线程和 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 应该是可能的,正如我们在刚刚显示的示例中所做的那样。

    以下示例合并了使用cpuset和 定义的 CPU 组cpubind,以及线程优先级的使用。

    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。

    此示例显示如何ThreadConfig以及 NoOfFragmentLogParts可能为具有超线程的 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. 其中前两个演示了为 定义的 CPU 集如何 idxbld与为其他(永久)线程类型指定的 CPU 集重叠,第一个 using cpuset和第二个 using 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刚刚显示的设置将线程锁定到编号为 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 系统上,您 可以通过设置 IRQBALANCE_BANNED_CPUS/etc/sysconfig/irqbalance0xFFFFF0并使用 . 有关特定信息,请参阅您的操作系统或平台文档。 isolcpusgrub.conf

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

  • DiskPageBufferEntries

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 32K 页
    默认 10
    范围 1 - 1000
    重启类型

    N(新开发银行 7.5.0)

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

  • DiskPageBufferMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 64M
    范围 4M - 1T
    重启类型

    N(新开发银行 7.5.0)

    这决定了用于在磁盘上缓存页面的空间量,并在文件的[ndbd][ndbd default]部分中 设置config.ini。它以字节为单位。每页占用 32 KB。这意味着 NDB Cluster 磁盘数据存储总是使用N* 32 KB 内存,其中N是一些非负整数。

    此参数的默认值为 64M(2000 页,每页 32 KB)。

    如果将 的值设置得太低,并且在(例如)DiskPageBufferMemory中使用超过默认数量的 LDM 线程 ,则在尝试将大型(例如 500G)数据文件添加到基于磁盘的表时可能会出现问题,其中该过程在占用一个 CPU 内核的情况下需要无限长的时间。 ThreadConfig{ldm=6...}NDB

    这是因为,作为将数据文件添加到表空间的一部分,extent 页被锁定在额外的 PGMAN 工作线程的内存中,以便快速访问元数据。添加大文件时,此 worker 的内存不足以容纳所有数据文件元数据。在这种情况下,您应该增加DiskPageBufferMemory或添加更小的表空间文件。您可能还需要进行调整 DiskPageBufferEntries

    您可以查询该 ndbinfo.diskpagebuffer 表以帮助确定是否应增加此参数的值以最大程度地减少不必要的磁盘查找。有关更多信息,请参阅 第 21.6.15.20 节,“ndbinfo diskpagebuffer 表”

  • SharedGlobalMemory

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 128M
    范围 0 - 64吨
    重启类型

    N(新开发银行 7.5.0)

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

    默认值为128M

  • DiskIOThreadPool

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 线程
    默认 2个
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

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

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

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

    • 磁盘数据文件的物理分布。  您可以通过将数据文件、撤销日志文件和数据节点文件系统放在不同的物理磁盘上来获得更好的性能。如果您对这些文件集的部分或全部执行此操作,则可以设置 DiskIOThreadPool 更高的值以启用单独的线程来处理每个磁盘上的文件。

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

    此参数的默认值为 2。

  • 磁盘数据文件系统参数。  以下列表中的参数可以将 NDB Cluster 磁盘数据文件放置在特定目录中,而无需使用符号链接。

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

  • 磁盘数据对象创建参数。  接下来的两个参数使您能够在第一次启动集群时在不使用 SQL 语句的情况下创建磁盘数据日志文件组、表空间或两者。

    • InitialLogFileGroup

      版本(或更高版本) 新开发银行 7.5.0
      类型或单位 细绳
      默认 [见文件]
      范围 ...
      重启类型

      S(NDB 7.5.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-LG. undo_buffer_size也是可选的;如果省略,则默认为 64M. 每一个 file-specification 对应一个undo log文件,并且至少要指定一个在 file-specification-list. FileSystemPath撤消日志文件根据为、 FileSystemPathDD和 设置的任何值放置 FileSystemPathUndoFiles,就像它们是作为 CREATE LOGFILE GROUPor ALTER 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 Cluster 的行为。

    • InitialTablespace

      版本(或更高版本) 新开发银行 7.5.0
      类型或单位 细绳
      默认 [见文件]
      范围 ...
      重启类型

      S(NDB 7.5.0)

      此参数可用于指定在执行 cluster 的初始启动时创建的 NDB Cluster Disk Data 表空间。 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。数据文件根据为 、 和 设置的任何 FileSystemPathFileSystemPathDD放置 FileSystemPathDataFiles,就像它们是作为 CREATE TABLESPACEor ALTER TABLESPACE 语句的结果创建的一样。

      例如,考虑在 文件InitialTablespace[ndbd default]部分中 指定以下行config.ini(与 一样 InitialLogfileGroup,此参数应始终在该 [ndbd default]部分中设置,因为未定义在不同数据节点上设置不同值时 NDB Cluster 的行为):

      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 Cluster Disk Data 表时使用。

磁盘数据和 GCP 停止错误。  使用磁盘数据表时遇到的错误,例如 Node nodeidkilled this node because GCP stop was detected (error 2303) 通常被称为GCP 停止错误。当重做日志没有足够快地刷新到磁盘时会发生此类错误;这通常是由于磁盘速度慢和磁盘吞吐量不足造成的。

您可以通过使用更快的磁盘以及将磁盘数据文件放置在与数据节点文件系统不同的磁盘上来帮助防止这些错误的发生。减小 的值 TimeBetweenGlobalCheckpoints 往往会减少为每个全局检查点写入的数据量,因此可以在尝试写入全局检查点时提供一些防止重做日志缓冲区溢出的保护;但是,减小此值也会减少写入 GCP 的时间,因此必须谨慎进行。

除了前面解释的考虑因素外, 正确设置配置参数DiskPageBufferMemory也很重要 ;DiskIOThreadPool设置 DiskIOThreadPool得太高很可能导致 GCP 停止错误(错误 #37227)。

GCP 停止可能是由保存或提交超时引起的;数据节点配置参数确定 TimeBetweenEpochsTimeout 提交超时。但是,可以通过将此参数设置为 0 来禁用这两种类型的超时。

用于配置发送缓冲区内存分配的参数。  发送缓冲区内存是从所有传输器共享的内存池中动态分配的,这意味着可以根据需要调整发送缓冲区的大小。(以前,NDB 内核为集群中的每个节点使用固定大小的发送缓冲区,该缓冲区在节点启动时分配,并且在节点运行时无法更改。) TotalSendBufferMemoryOverLoadLimit数据节点配置参数允许设置限制在此内存分配上。有关使用这些参数(以及 SendBufferMemory)的更多信息,请参见 第 21.4.3.13 节,“配置 NDB Cluster 发送缓冲区参数”

另见第 21.6.7 节,“在线添加 NDB Cluster 数据节点”

重做日志过度提交处理。  当花费太多时间将重做日志刷新到磁盘时,可以控制数据节点对操作的处理。当给定的重做日志刷新花费的时间超过 RedoOverCommitLimit 秒数,超过 RedoOverCommitCounter 次数,导致任何挂起的事务被中止时,就会发生这种情况。发生这种情况时,发送事务的 API 节点可以通过将操作排队并重试或中止它们来处理本应提交的操作,具体取决于 DefaultOperationRedoProblemAction. 在 API 节点采取此操作之前,用于设置超时和可能超过的次数的数据节点配置参数在以下列表中进行了描述:

  • RedoOverCommitCounter

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 数字
    默认 3个
    范围 0 - 4294967039 (0xFFFFFEFF)
    版本(或更高版本) 新开发银行 7.5.17
    类型或单位 数字
    默认 3个
    范围 1 - 4294967039 (0xFFFFFEFF)
    版本(或更高版本) 新开发银行 7.6.13
    类型或单位 数字
    默认 3个
    范围 1 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    RedoOverCommitLimit 尝试将给定的重做日志写入磁盘多次或更多次时超过时,任何未提交的事务都将中止,并且这些事务中的任何一个的 API 节点根据它的价值 DefaultOperationRedoProblemAction (通过排队要重试的操作,或中止它们)。

  • RedoOverCommitLimit

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位
    默认 20
    范围 0 - 4294967039 (0xFFFFFEFF)
    版本(或更高版本) 新开发银行 7.5.17
    类型或单位
    默认 20
    范围 1 - 4294967039 (0xFFFFFEFF)
    版本(或更高版本) 新开发银行 7.6.13
    类型或单位
    默认 20
    范围 1 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    此参数设置在超时前尝试将给定重做日志写入磁盘的上限(以秒为单位)。数据节点尝试刷新此重做日志但花费的时间RedoOverCommitLimit长于 RedoOverCommitCounter刷新超时被中止。发生这种情况时,发起这些事务的 API 节点会根据其 DefaultOperationRedoProblemAction 设置处理构成这些事务的操作(它要么将操作排队等待重试,要么中止它们)。

控制重启尝试。 MaxStartFailRetries 当数据节点无法使用和 StartFailRetryDelay 数据节点配置参数 启动时,可以对数据节点的重启尝试进行细粒度控制 。

MaxStartFailRetries 限制在放弃启动数据节点之前进行的重试总数, StartFailRetryDelay设置重试之间的秒数。这些参数在此处列出:

  • StartFailRetryDelay

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 0
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    使用此参数设置在启动失败事件中数据节点尝试重新启动之间的秒数。默认值为 0(无延迟)。

    除非等于 0, 否则 此参数和 MaxStartFailRetries 都将被忽略 。StopOnError

  • MaxStartFailRetries

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 未签名
    默认 3个
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    N(新开发银行 7.5.0)

    使用此参数可以限制数据节点在启动失败的情况下进行的重新启动尝试次数。默认值为 3 次尝试。

    除非等于 0, 否则 此参数和 StartFailRetryDelay 都将被忽略 。StopOnError

NDB 索引统计参数。  以下列表中的参数与 NDB 索引统计生成有关。

  • IndexStatAutoCreate

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0, 1
    重启类型

    N(新开发银行 7.5.0)

    创建索引时启用(设置为 1)或禁用(设置为 0)自动统计信息收集。

  • IndexStatAutoUpdate

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 整数
    默认 0
    范围 0, 1
    重启类型

    N(新开发银行 7.5.0)

    启用(设置为 1)或禁用(设置为 0)索引更改监视,并在检测到这些更改时触发自动统计更新。触发更新所需的更改程度由 IndexStatTriggerPctIndexStatTriggerScale 选项的设置决定。

  • IndexStatSaveSize

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 字节
    默认 32768
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    在 (NDB 7.5.0)

    NDB 系统表和mysqld内存缓存 中任何给定索引的保存统计信息所允许的最大空间(以字节为单位) 。在 NDB 7.5 及更早版本中,这会消耗 IndexMemory.

    无论大小限制如何,始终至少生产一个样品。此大小按比例缩放 IndexStatSaveScale

    对于大索引,由 指定的 IndexStatSaveSize大小乘以 0.01 的值 。IndexStatTriggerPct这进一步乘以索引大小的以 2 为底的对数。设置 IndexStatTriggerPct等于 0 将禁用缩放效果。

  • IndexStatSaveScale

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 百分比
    默认 100
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    在 (NDB 7.5.0)

    对于大索引,由 指定的 IndexStatSaveSize大小乘以 0.01 的值 。IndexStatTriggerPct这进一步乘以索引大小的以 2 为底的对数。设置 IndexStatTriggerPct等于 0 将禁用缩放效果。

  • IndexStatTriggerPct

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 百分比
    默认 100
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    在 (NDB 7.5.0)

    触发索引统计信息更新的更新百分比变化。该值按比例缩放 IndexStatTriggerScaleIndexStatTriggerPct您可以通过设置为 0 来 完全禁用此触发器 。

  • IndexStatTriggerScale

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位 百分比
    默认 100
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    在 (NDB 7.5.0)

    IndexStatTriggerPct 对于大型索引,按此数量乘以 0.01 进行 缩放 。值为 0 将禁用缩放。

  • IndexStatUpdateDelay

    版本(或更高版本) 新开发银行 7.5.0
    类型或单位
    默认 60
    范围 0 - 4294967039 (0xFFFFFEFF)
    重启类型

    在 (NDB 7.5.0)

    给定索引的自动索引统计信息更新之间的最小延迟(以秒为单位)。将此变量设置为 0 将禁用任何延迟。默认值为 60 秒。

重启类型。  本节参数说明所使用的重启类型信息如下表所示:

表 21.15 NDB Cluster 重启类型

象征 重启类型 描述
节点 可以使用滚动重启更新参数(请参阅 第 21.6.5 节,“执行 NDB Cluster 的滚动重启”
小号 系统 所有集群节点必须完全关闭,然后重新启动,以影响此参数的更改
最初的 必须使用该 --initial选项重新启动数据节点