使用 [ndbd]
和 [ndbd default]
部分来配置集群的数据节点的行为。
[ndbd]
和 [ndbd default]
始终用作部分名称,无论您是使用 ndbd 或 ndbmtd 二进制文件来启动数据节点进程。
有许多参数控制缓冲区大小、池大小、超时等等。唯一强制参数是 ExecuteOnComputer
;这必须在本地 [ndbd]
部分中定义。
参数 NoOfReplicas
应该在 [ndbd default]
部分中定义,因为它是所有集群数据节点的公共参数。虽然不需要设置 NoOfReplicas
,但建议明确设置它。
大多数数据节点参数都设置在 [ndbd default]
部分中。只有那些明确允许设置本地值的参数才能在 [ndbd]
部分中更改。HostName
和 NodeId
必须 在本地 [ndbd]
部分中定义,而不是在 config.ini
文件的其他部分中定义。换言之,这些参数的设置是特定于一个数据节点的。
对于影响内存使用或缓冲区大小的参数,可以使用 K
、M
或 G
作为后缀,以指示 1024、1024×1024 或 1024×1024×1024 单位。(例如,100K
表示 100 × 1024 = 102400。)
参数名称和值不区分大小写,除非在 MySQL 服务器 my.cnf
或 my.ini
文件中使用,在这种情况下它们是区分大小写的。
关于 NDB 集群磁盘数据表的配置参数信息可以在本节后面找到(见 磁盘数据配置参数)。
所有这些参数也适用于 ndbmtd(ndbd 的多线程版本)。三个额外的数据节点配置参数—MaxNoOfExecutionThreads
、ThreadConfig
和 NoOfFragmentLogParts
—仅适用于 ndbmtd,对 ndbd 无效。有关更多信息,请参阅 多线程配置参数(ndbmtd)。另请参阅 第 25.5.3 节,“ndbmtd — NDB 集群数据节点守护进程(多线程)”。
标识数据节点。 数据节点标识符(NodeId 或 Id 值)可以在命令行上分配或在配置文件中分配。
-
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
是唯一支持的参数名称,用于标识数据节点。 -
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
不足以区分进程。旨在用于测试。 -
Version (or later) NDB 8.3.0 Type or units 名称或IP地址 Default localhost Range ... Restart Type 节点重启:需要滚动重启集群。 (NDB 8.3.0)
指定该参数定义了数据节点所在的计算机的主机名。使用
HostName
指定其他主机名,而不是localhost
。 -
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
),因此从任何数据节点到管理节点的出站连接都应该总是允许的。 -
将该参数设置为
TRUE
或1
以绑定IP_ADDR_ANY
,以便从任何地方(对于自动生成的连接)建立连接。默认值为FALSE
(0
)。 -
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 集群数据节点:详细示例”。 -
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 与不设置该参数相同。 -
-
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。 -
该参数指定了跟踪文件、日志文件、PID 文件和错误日志的目录。
默认是数据节点进程的工作目录。
-
该参数指定了元数据、REDO 日志、UNDO 日志(对于磁盘数据表)和数据文件的目录。默认是由
数据目录
指定的目录。Note该目录必须在ndbd进程启动之前存在。
推荐的目录层次结构为 NDB 集群包括
/var/lib/mysql-cluster
,在其中创建一个节点文件系统的目录。该子目录的名称包含节点 ID。例如,如果节点 ID 是 2,则该子目录名为ndb_2_fs
。 -
该参数指定了备份的目录。
数据内存、索引内存和字符串内存
数据内存
和索引内存
是[ndbd]
参数,指定用于存储实际记录和索引的内存段的大小。在设置这些值时,需要了解数据内存
的使用情况,因为它通常需要根据集群的实际使用情况进行更新。
索引内存
已弃用,并将在未来版本的 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 位操作系统出于这个原因。 -
-
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
的有序索引,该索引在两个四字节整数上。假设此外,IndexStatSaveSize
和IndexStatSaveScale
设置为默认值(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(零)。
-
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]
部分中指定。介于0
和100
之间的值被解释为最大默认值的百分比,该值基于多个因素计算,包括表的数量、最大表名大小、最大.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 字节的开销。此外,我们还有两个有序索引在列 a
和 b
上,每个记录大约消耗 10 字节。还有一个主键哈希索引在基础表上,使用大约 29 字节的记录。唯一约束是通过一个单独的表实现的,该表使用 b
作为主键和 a
作为列,该表还消耗了额外的 29 字节的索引内存每个记录,以及 8 字节的记录数据加 12 字节的开销。
因此,对于 100万记录,我们需要 58MB 的索引内存来处理主键哈希索引和唯一约束。此外,我们还需要 64MB 来处理基础表和唯一索引表的记录,以及两个有序索引表。
您可以看到,哈希索引占用了相当多的内存空间;然而,它们提供了非常快速的数据访问方式。它们也用于 NDB 集群中处理唯一约束。
目前,唯一的分区算法是哈希和有序索引是每个节点的本地的。因此,不能使用有序索引来处理一般情况下的唯一约束。
一个重要的点是对于IndexMemory
和DataMemory
,总数据库大小是每个节点组的所有数据内存和所有索引内存的总和。每个节点组用于存储复制信息,因此如果有四个节点具有两个片段副本,那么就有两个节点组。因此,总数据内存可用是每个数据节点的2 × DataMemory
。
强烈建议将DataMemory
和IndexMemory
设置为所有节点的相同值。数据分布是所有节点在集群中的均匀分布,因此任何节点可用的最大空间不能大于集群中最小节点的空间。
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 操作数量。
-
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。
-
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。
-
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)
在一个数据节点上具有专用资源的同时索引操作的数量。
-
Version (or later) NDB 8.3.0 Type or units 数字 Default 0 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启: 需要集群的 滚动重启。(NDB 8.3.0)
在一个数据节点上具有专用资源的同时操作的数量。
-
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)
在一个数据节点上具有专用资源的同时事务的数量。
-
Version (or later) NDB 8.3.0 Type or units 数字 Default 0 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
在一个 ndbd(DB) 节点上专门用于触发器的资源数量。
-
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)
每个数据节点分配的动态缓冲区空间(以字节为单位),用于键和属性数据。
-
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)的缓冲区空间。到目前为止,我们没有收到用户报告,也没有我们的测试结果表明这些编译时限制需要增加。
-
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)
该参数用于计算并发扫描操作所需的锁记录数。
已弃用。
BatchSizePerLocalScan
与BatchSize
在 SQL 节点中的定义存在强烈的关联。 -
Version (or later) NDB 8.3.0 Type or units 字节 Default 64M Range 512K - 4294967039 (0xFFFFFEFF) Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
这是用于在单个节点和节点之间传递消息的内部缓冲区。默认值为 64MB。
该参数很少需要从默认值更改。
-
Version (or later) NDB 8.3.0 Type or units 整数 Default 64 Range 16 - 512 Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
用于构建外键的最大扫描批量大小。增加该参数的值可能会加速外键的构建,但会对正在进行的流量产生更大的影响。
-
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。 -
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
) 中设置这两个参数的值,管理服务器将拒绝启动。 -
Version (or later) NDB 8.3.0 Type or units 整数 Default 0 Range 0 - 64 Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
该参数设置在节点重启或系统重启期间的并行复制阶段使用的并行度。当一个节点启动时,它会与已经具有当前数据的节点同步,通过从更新的节点复制更改的记录。由于完全并行可能导致过载情况,因此
MaxParallelCopyInstances
提供了一种减少并行度的方法。该参数的默认值为 0,这意味着有效的并行度等于启动节点和更新节点中的 LDM 实例数。 -
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 并提高扫描性能。 -
Version (or later) NDB 8.3.0 Type or units 整数 Default 64 Range 16 - 512 Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
重新组织表分区时使用的最大扫描批量大小。增加该参数的值可能会加速重新组织,但会对正在进行的流量产生更大的影响。
-
Version (or later) NDB 8.3.0 Type or units 整数 Default 64 Range 16 - 512 Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
构建唯一键时使用的最大扫描批量大小。增加该参数的值可能会加速构建,但会对正在进行的流量产生更大的影响。
内存分配
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
参数值来影响分配的传输器数量,该参数是在该版本中引入的。
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
将使用这两个数字中的最大值线程数。这意味着大于这个值的设置将被忽略。
哈希映射大小
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]
参数控制日志和检查点行为。
-
设置这个参数可以直接控制 redo 日志文件的大小。这在 NDB 集群在高负载下操作时非常有用,无法快速关闭 fragment 日志文件之前尝试打开新文件(只有 2 个 fragment 日志文件可以同时打开);增加 fragment 日志文件的大小可以给集群更多时间在尝试打开每个新 fragment 日志文件之前。
有关 fragment 日志文件的更多信息,请参阅
NoOfFragmentLogFiles
的描述。 -
Version (or later) NDB 8.3.0 Type or units 文件 Default 27 Range 20 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启: 需要对集群进行 滚动重启。(NDB 8.3.0)
这个参数设置内部线程的初始数量,以便打开文件。
默认值是 27。
-
默认情况下,fragment 日志文件是在数据节点的初始启动时稀疏创建的——也就是说,取决于操作系统和文件系统的类型,不是所有字节都被写入磁盘。但是,可以通过这个参数强制写入所有字节,忽略平台和文件系统类型。
InitFragmentLogFiles
可以取以下两个值:-
SPARSE
. Fragment 日志文件稀疏创建。这是默认值。 -
FULL
. 强制写入 fragment 日志文件的所有字节。
根据您的操作系统和文件系统,设置
InitFragmentLogFiles=FULL
可能有助于消除 redo 日志的 I/O 错误。 -
-
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 控制机制中使用的磁盘写入速度计算。 -
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 碎片扫描监视器。
-
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。
-
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 个跟踪文件。
-
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。 -
Version (or later) NDB 8.3.0 Type or units 整数 Default 16 Range 3 - 4294967039 (0xFFFFFEFF) Restart Type 该参数设置节点的 REDO 日志文件数目,从而确定了 REDO 日志记录的空间分配。因为 REDO 日志文件是环形组织的,因此非常重要的是,第一个和最后一个日志文件(有时称为“头”和“尾”日志文件)不应该太接近。当它们太接近时,节点将开始中止所有包含更新的事务,因为没有足够的空间来记录新的日志记录。
一个 REDO 日志记录不会被删除,直到两个本地检查点都已完成,因为该日志记录被插入。检查点频率由其自己的配置参数确定,该参数在本章节的其他地方讨论。
默认参数值为 16,这意味着 16 个 4MB 的文件,总共 1024MB。单个日志文件的大小可以使用
FragmentLogFileSize
参数配置。在需要大量更新的场景中,NoOfFragmentLogFiles
的值可能需要设置为 300 或更高,以提供足够的空间来记录 REDO 日志。如果检查点速度慢,数据库写入很多,日志文件已满,日志尾部不能被截断以免危及恢复,所有更新事务将被中止,内部错误代码为 410(
日志文件空间暂时不足
)。这种情况将持续下去,直到检查点完成,日志尾部可以被移动。Important该参数不能在“飞行”中更改;您必须使用
--initial
重新启动节点。如果您想更改集群中所有数据节点的该值,可以使用滚动节点重启(使用--initial
启动每个数据节点)。 -
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_work
、insert_work
和delete_work
的值,并重新编译来改变模拟结果。有关更多信息,请参阅程序的源代码。 -
-
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 时才生效。 -
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 停止错误。在这种情况下,设置EnableRedoControl
为false
以禁用它。设置EnablePartialLcp
为false
也会禁用自适应计算。
元数据对象。 下一组 [ndbd]
参数定义了元数据对象的池大小,用于定义集群中使用的最大数量的属性、表、索引和触发器对象。
这些只是对集群的 “建议”,任何未指定的参数将恢复到默认值。
-
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
的倍数,并再次测试。 -
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。
NoteMaxNoOfTables
、MaxNoOfOrderedIndexes
和MaxNoOfUniqueHashIndexes
之和不得超过232 − 2
(4294967294)。 -
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。
NoteMaxNoOfTables
、MaxNoOfOrderedIndexes
和MaxNoOfUniqueHashIndexes
之和不得超过232 − 2
(4294967294)。 -
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。
NoteMaxNoOfTables
、MaxNoOfOrderedIndexes
和MaxNoOfUniqueHashIndexes
之和不得超过232 − 2
(4294967294)。 -
Version (or later) NDB 8.3.0 Type or units 整数 Default 768 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启: 需要集群的 滚动重启。(NDB 8.3.0)
内部更新、插入和删除触发器被分配给每个唯一哈希索引。(这意味着三个触发器对象被创建 для每个唯一哈希索引。)然而,一个有序索引只需要一个触发器对象。备份也使用三个触发器对象 для每个普通表在集群中。
集群之间的复制也使用内部触发器。
该参数设置集群中的触发器对象的最大数量。
默认值为 768。
-
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 字节。 -
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]
参数的影响,这些参数采用布尔值。这些参数可以通过将其设置为 1
或 Y
来指定为 TRUE
,或者通过将其设置为 0
或 N
来指定为 FALSE
。
-
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
(禁用)。 -
Version (or later) NDB 8.3.0 Type or units 布尔值 Default true Range true, false Restart Type 节点重启: 需要集群的 滚动重启。(NDB 8.3.0)
当启用此参数(默认情况)时,它将强制数据节点在遇到损坏的元组时关闭。
-
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
默认情况下是禁用的。 -
加密 LCP 和表空间文件,包括撤销日志和重做日志。默认情况下禁用 (
0
);设置为1
以启用。Important启用文件系统加密时,必须在启动每个数据节点时提供密码,使用
--filesystem-password
或--filesystem-password-from-stdin
选项。否则,数据节点无法启动。有关更多信息,请参阅 第 25.6.14 节,“NDB 集群文件系统加密”。
-
Version (or later) NDB 8.3.0 Type or units 数字 Default 1 Range 0 - 1 Restart Type 节点重启: 需要集群的 滚动重启。(NDB 8.3.0)
在与管理服务器建立连接后分配此数据节点的内存。默认情况下启用。
-
Version (or later) NDB 8.3.0 Type or units 数字 Default 0 Range 0 - 2 Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
对于一些操作系统,包括 Solaris 和 Linux,可以锁定进程到内存中,从而避免交换到磁盘上。这可以帮助保证集群的实时特性。
该参数采用整数值
0
、1
或2
-
0
:禁用锁定。这是默认值。 -
1
:在分配进程内存后执行锁定。 -
2
:在分配进程内存前执行锁定。
如果操作系统不允许非特权用户锁定页面,那么使用该参数的数据节点进程可能需要以系统根用户身份运行。(
LockPagesInMainMemory
使用mlockall
函数。从 Linux 内核 2.6.9 开始,非特权用户可以锁定内存,限制为max locked memory
。有关更多信息,请参阅 ulimit -l 和 http://linux.die.net/man/2/mlock)。Note在较旧的 NDB 集群版本中,该参数是一个布尔值。
0
或false
是默认设置,禁用锁定。1
或true
启用锁定进程内存分配后。NDB 集群 8.3 将true
或false
作为该参数的值视为错误。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
提供的库。 -
-
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
默认情况下是禁用的。 -
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 搜索路径中查找密钥和有效的当前证书,并且如果找不到它们则无法启动。 -
Version (or later) NDB 8.3.0 Type or units 布尔值 Default false Range ... Added NDB Restart Type 节点重启:需要集群的滚动重启。 (NDB 8.3.0)
如果该参数设置为
true
,连接到该数据节点必须使用 TLS 进行身份验证。 -
Version (or later) NDB 8.3.0 Type or units 错误代码 Default 2 Range 0 - 4 Restart Type 节点重启:需要集群的滚动重启。 (NDB 8.3.0)
该功能仅在调试版本中可用,用于在单个代码块的执行过程中插入错误作为测试的一部分。
该功能默认情况下是禁用的。
-
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]
参数指定了集群数据节点中的超时、间隔和磁盘分页。除非另有说明,否则大多数超时值都以毫秒为单位。
-
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 集群数据节点”,以获取更多信息。
-
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
配置参数的描述。 -
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 服务器。
更多信息,请参阅网络通信和延迟。
-
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台主机计算机
host1
和host2
上,这些数据节点组成了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
值设置如下:
要使用该参数更改心跳传输顺序在运行的NDB集群中,必须首先在全局配置文件(
config.ini
)中设置HeartbeatOrder
值对于集群中的每个数据节点。要使更改生效,必须执行以下操作:-
完全关闭并重新启动整个集群。
-
2次连续的集群滚动重启。所有节点必须在两个滚动重启中以相同的顺序重新启动。
可以使用
DUMP 908
观察该参数在数据节点日志中的效果。 -
-
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 毫秒。
-
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 集群复制的性能。 -
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毫秒。
-
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较长,可能需要将该值设置得较低。断开连接可以防止客户端问题影响数据节点服务,避免内存不足以缓冲数据,最后关闭服务。相反,只有客户端受到影响(例如二进制日志中的间隙事件),强制客户端重新连接或重新启动进程。
-
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
。默认值为 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
进行调整。 -
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
进行调整。 -
Version (or later) NDB 8.3.0 Type or units numeric Default 10M Range 1M - 1024G Restart Type 系统重新启动: 需要完全关闭并重新启动集群。 (NDB 8.3.0)
设置本地检查点和备份操作的最小磁盘写入速率,以字节每秒为单位。
LCP 和备份操作在各种条件下的最大磁盘写入速率可以通过参数
MaxDiskWriteSpeed
、MaxDiskWriteSpeedOwnRestart
和MaxDiskWriteSpeedOtherNodeRestart
进行调整。请参阅这些参数的描述以获取更多信息。 -
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 秒)。
-
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 集群版本中删除该参数。
-
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
字节。 -
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。原因是这些消息也被发送到管理服务器的集群日志中。
可以为管理客户端设置类似的级别,以确定哪些事件级别记录在集群日志中。
-
Version (or later) NDB 8.3.0 Type or units 整数 Default 1 Range 0 - 15 Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
过程启动期间的事件报告级别。
默认级别是 1。
-
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 集群日志事件”中所述。 -
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 日志文件。当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(默认值),那么报告将仅在 redo 日志文件初始化过程的开始和完成时写入集群日志。
数据节点调试参数
以下参数仅供测试或调试数据节点时使用,不适用于生产环境。
-
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
调试输出的记录。 -
Version (or later) NDB 8.3.0 Type or units 布尔值 Default false Range true, false Restart Type 节点重启:需要对集群进行滚动重启。(NDB 8.3.0)
您可以通过启用
WatchdogImmediateKill
数据节点配置参数来立即终止线程,以便在 watchdog 问题出现时进行调试或故障排除,以获取报告执行停止时的确切情况的跟踪文件。
备份参数。 本节讨论的 [ndbd]
参数定义了用于在线备份的内存缓冲区。
-
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。
-
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 支持多线程备份,因此通常不需要调整该参数,该参数在多线程情况下无效。以下讨论仅适用于单线程备份。在正常操作期间,数据节点尝试最大化磁盘写入速度,以便在本地检查点和备份中保持在
MinDiskWriteSpeed
和MaxDiskWriteSpeed
的限制范围内。磁盘写入限制为每个 LDM 线程分配一个相等的份额。这允许并行 LCPs 发生,而不会超过磁盘 I/O 预算。由于备份是由单个 LDM 线程执行的,因此这实际上减少了预算,导致备份完成时间延长,如果更改率足够高,可能会导致备份失败。可以使用
BackupDiskWriteSpeedPct
配置参数来解决这个问题,该参数的值在 0-90 之间(包括),表示节点最大写入速率预算的百分比,该百分比将被保留,以便在备份过程中使用。该参数的默认值为 50(解释为 50%)。
-
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。
-
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 集群中删除。对其设置的任何值都将被忽略。
-
Version (or later) NDB 8.3.0 Type or units 秒 Default 0 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启:需要集群的滚动重启。(NDB 8.3.0)
该参数控制备份状态报告的频率,在管理客户端中,以及在集群日志中(假设集群事件日志记录已配置为允许它—见日志记录和检查点)。
BackupReportFrequency
代表备份状态报告之间的时间(以秒为单位)。默认值为 0。
-
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。
-
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。
-
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
(禁用)。 -
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 集群管理客户端创建备份”。
备份文件的位置由 BackupDataDir
数据节点配置参数确定。
附加要求。 指定这些参数时,以下关系必须成立。否则,数据节点无法启动。
-
BackupDataBufferSize >= BackupWriteSize + 188KB
-
BackupLogBufferSize >= BackupWriteSize + 16KB
-
BackupMaxWriteSize >= BackupWriteSize
NDB 集群实时性能参数
本节讨论的 [ndbd]
参数用于调度和锁定线程到多处理器数据节点主机的特定 CPU。
要使用这些参数,数据节点进程必须以系统根用户身份运行。
-
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(默认值)将禁用多线程构建有序索引。
您可以通过将
TwoPassInitialNodeRestartCopy
数据节点配置参数设置为TRUE
来启用多线程构建。 -
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
没有默认值。 -
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(含)之间的整数。没有默认值。
-
Version (or later) NDB 8.3.0 Type or units 数字 Default 1 Range ... Restart Type 节点重启:需要滚动重启集群。 (NDB 8.3.0)
该参数确定了是否由操作系统或数据节点进程控制非统一内存访问(NUMA),无论数据节点是否使用ndbd或ndbmtd。默认情况下,
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)
该参数提供了一个简单的界面来控制数据节点上的自适应自旋,具有四个可能的值,提供了自旋参数值的预设,如下所示:
-
静态自旋
(默认):将EnableAdaptiveSpinning
设置为false
,将调度器自旋计时器
设置为 0。(SetAllowedSpinOverhead
在这种情况下不相关。) -
基于成本的自旋
:将EnableAdaptiveSpinning
设置为true
,将调度器自旋计时器
设置为 100,将SetAllowedSpinOverhead
设置为 200。 -
延迟优化的自旋
:将EnableAdaptiveSpinning
设置为true
,将调度器自旋计时器
设置为 200,将SetAllowedSpinOverhead
设置为 1000。 -
DatabaseMachineSpinning
:将EnableAdaptiveSpinning
设置为true
,SchedulerSpinTimer
设置为 500,并将SetAllowedSpinOverhead
设置为 10000。这是为在每个线程拥有自己的 CPU 的情况下使用的。
由
SpinMethod
修改的自旋参数在以下列表中描述:-
SchedulerSpinTimer
:这与数据节点配置参数的名称相同。由SpinMethod
应用的设置将覆盖config.ini
文件中的任何值。 -
EnableAdaptiveSpinning
:启用或禁用自适应自旋。禁用它将导致自旋不检查 CPU 资源。这不能直接在集群配置文件中设置,但可以使用DUMP 104004 1
或禁用使用DUMP 104004 0
在 ndb_mgm 管理客户端中。 -
SetAllowedSpinOverhead
:设置允许的 CPU 时间以获取延迟。这不能直接在config.ini
文件中设置。在大多数情况下,SpinMethod
应用的设置应该是满意的,但如果需要直接更改它,可以使用DUMP 104002
,其中overhead
overhead
是一个从 0 到 10000 的值;请参阅所示DUMP
命令的描述。
在缺乏可用自旋指令的平台上,如 PowerPC 和一些 SPARC 平台,自旋时间将在所有情况下设置为 0,
SpinMethod
的值除StaticSpinning
外的所有值将被忽略。 -
-
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 多线程。
使用并行备份需要在集群中的所有数据节点上使用多个 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 数量来配置数据节点线程,考虑到由
taskset
、numactl
、虚拟机、Docker 等控制应用程序可用的 CPU 的限制;否则,可以将NumCPUs
设置为所需的 CPU 数量(最多 1024 个 CPU,可以由自动线程配置处理)。任何ThreadConfig
和MaxNoOfExecutionThreads
设置将被忽略。此外,启用该参数将自动禁用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
ValueLDM 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 valuevalue
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 线程数的整数倍。
-
-
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
将导致数据节点等待足够长的时间,以确保它们发送更大的包。实际上,这引入了发送过程中的人工瓶颈,从而可以显著提高吞吐量。 -
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
的描述以获取更多信息。 -
Version (or later) NDB 8.3.0 Type or units 整数 Default 0 Range 0 - 1024 Restart Type 初始系统重新启动: 需要完全关闭集群,使用 备份 恢复集群文件系统,然后重新启动集群。(NDB 8.3.0)
使自动线程配置仅使用这些 CPU。不受
AutomaticThreadConfig
启用时的影响。 -
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
。) -
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 上的信息(通过
cpubind
或cpuset
指定)。cpubind
使每个线程非排他地绑定到集合中的一个 CPU;cpuset
表示每个线程非排他地绑定到指定的 CPU 集合。在 Solaris 上,可以指定一个 CPU 集合,以便将线程绑定到该集合中。
cpubind_exclusive
使每个线程排他地绑定到集合中的一个 CPU;cpuset_exclusive
表示每个线程排他地绑定到指定的 CPU 集合。在单个配置中只能提供
cpubind
、cpuset
、cpubind_exclusive
或cpuset_exclusive
中的一个。 -
spintime
确定线程旋转等待时间(以微秒为单位)。默认情况下,
spintime
的值是SchedulerSpinTimer
数据节点配置参数的值。spintime
不适用于 I/O 线程、watchdog 或离线索引构建线程,因此不能为这些线程类型设置。 -
realtime
可以设置为 0 或 1。如果设置为 1,线程将以实时优先级运行。这也意味着thread_prio
不能被设置。默认情况下,
realtime
的值是RealtimeScheduler
数据节点配置参数的值。realtime
不能用于离线索引构建线程。 -
通过将
nosend
设置为 1,可以防止main
、ldm
、rep
或tc
线程帮助发送线程。这参数默认为 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
valuenice
value0 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
valueSolaris FX
priority0 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 APISetThreadPriority()
函数。该映射如下表所示:表 25.14 thread_prio 到 Windows 线程优先级映射
thread_prio
valueWindows 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 时,main
、rep
和tc
也必须为 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
: 数据字典和事务协调器(DBDIH
和DBTC
内核块),提供模式管理。也可以指定零个或两个主线程。范围:0-2。
将
main
设置为0和rep
设置为1会将main
块放入rep
线程中;组合线程在ndbinfo.threads
表中显示为main_rep
。这与将rep
设置为1和main
设置为0相同。也可以将
main
和rep
都设置为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 相同。也可以将
main
和rep
都设置为 0,在这种情况下,两个线程都将被放入第一个recv
线程中;在threads
表中,组合线程被命名为main_rep_recv
。如果从
ThreadConfig
值字符串中省略rep
,则创建一个rep
线程。 -
io
:文件系统和其他杂项操作。这些任务不需要高性能,并且总是由一个专门的 I/O 线程处理。范围:1 只。
-
watchdog
:与此类型关联的参数设置实际上应用于多个线程,每个线程都有特定的用途。这些线程包括SocketServer
线程,该线程从其他节点接收连接设置;SocketClient
线程,该线程尝试设置与其他节点的连接;以及监视线程,该线程检查线程是否正在进行。范围:1 只。
-
idxbld
:离线索引构建线程。与其他线程类型不同,这些线程是临时的,仅在节点或系统重新启动时创建和使用,或者在运行 ndb_restore--rebuild-indexes
时创建和使用。它们可能绑定到与永久线程类型相同的 CPU 集合中。thread_prio
、realtime
和spintime
值不能为离线索引构建线程设置。此外,对于这种类型的线程,count
将被忽略。如果未指定
idxbld
,则默认行为如下:-
如果 I/O 线程未绑定,则离线索引构建线程不绑定,并使用所有可用的核心。
-
如果 I/O 线程绑定,则离线索引构建线程将绑定到绑定的线程集,因为这些线程没有其他任务要执行。
范围:0 - 1。
-
更改
ThreadConfig
通常需要系统初始重新启动,但在某些情况下可以放松这个要求:-
如果更改后 LDM 线程的数量与之前相同,那么只需要简单的节点重新启动(滚动重新启动,或者 N)来实现更改。
-
否则(即 LDM 线程的数量发生变化),仍然可以使用节点初始重新启动 (NI) 实现更改,前提是满足以下两个条件:
-
每个 LDM 线程最多处理 8 个碎片,
-
总的表碎片数量是 LDM 线程数量的整数倍。
-
在任何其他情况下,需要系统初始重新启动来更改这个参数。
NDB
可以根据以下两个标准区分线程类型:-
线程是否是执行线程。类型为
main
、ldm
、query
、recv
、rep
、tc
和send
的线程是执行线程:io
、recover
、watchdog
和idxbld
线程不是执行线程。 -
线程是否是永久的或临时的。目前所有线程类型除了
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,如我们在上面的示例中所做的那样。
以下示例将使用
cpuset
和cpubind
定义的 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
,第二个使用cpuset
。thread_prio
和spintime
对于每个组设置为相同的值。这意味着总共有八个 LDM 线程。(您应该确保NoOfFragmentLogParts
也设置为 8。)四个 TC 线程使用两个 CPU;使用cpuset
可以指定少于线程组中的 CPU 数量。(这不是cpubind
的情况。)发送线程使用两个线程,使用cpubind
将这些线程绑定到 CPU 10 和 11。主线程和 rep 线程可以重用这些 CPU。这个示例展示了如何为 24-CPU 主机设置
ThreadConfig
和NoOfFragmentLogParts
,留下 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
的设置。前两个示例展示了如何使用cpuset
和cpubind
定义的 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_CPUS
为0xFFFFF0
,并在grub.conf
中使用isolcpus
启动选项。有关详细信息,请参阅操作系统或平台文档。 -
-
Version (or later) NDB 8.3.0 Type or units 字节 Default 64MB Range 4MB - 16TB Restart Type 节点重启: 需要对集群进行 滚动重启。(NDB 8.3.0)
这是分配的页面条目(页面引用)数量。它指定为 32K 页的数量,在
DiskPageBufferMemory
中。默认值足以满足大多数情况,但如果您在磁盘数据表上遇到非常大的事务问题,可能需要增加该参数的值。每个页面条目需要大约 100 字节。 -
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 表”,以获取更多信息。 -
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 GROUP
和ALTER LOGFILE GROUP
语句,包括该选项的默认值,该值由InitialLogFileGroup
数据节点配置参数的设置所隐含。SharedGlobalMemory
可以在[ndbd]
或[ndbd default]
部分的config.ini
配置文件中设置,以字节为单位。默认值为
128M
。 -
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磁盘数据文件放在特定的目录中。
-
如果指定了该参数,则NDB Cluster磁盘数据文件和撤销日志文件将被放置在指定的目录中。这可以被
FileSystemPathDataFiles
、FileSystemPathUndoFiles
或两者所覆盖。它也可以被CREATE TABLESPACE
或ALTER TABLESPACE
语句中的ADD DATAFILE
子句所覆盖,或者被CREATE LOGFILE GROUP
或ALTER LOGFILE GROUP
语句中的ADD UNDOFILE
子句所覆盖。如果FileSystemPathDD
未被指定,则使用FileSystemPath
。如果为某个数据节点指定了
FileSystemPathDD
目录(包括在config.ini
文件的[ndbd default]
部分中指定该参数的情况),那么使用--initial
启动该数据节点将删除该目录中的所有文件。 -
如果指定了这个参数,那么 NDB 集群磁盘数据文件将被放置在指定的目录中。这将覆盖
FileSystemPathDD
的任何值。此参数可以在创建数据文件时被覆盖,方法是指定ADD DATAFILE
子句中的路径,用于CREATE TABLESPACE
或ALTER TABLESPACE
语句。如果FileSystemPathDataFiles
未指定,则使用FileSystemPathDD
(或FileSystemPath
,如果FileSystemPathDD
也未设置)。如果为某个数据节点(包括在
[ndbd default]
部分的config.ini
文件中指定参数)指定了FileSystemPathDataFiles
目录,那么使用--initial
启动该数据节点将删除目录中的所有文件。 -
Version (or later) NDB 8.3.0 Type or units 文件名 Default FileSystemPathDD Range ... Restart Type 初始节点重启: 需要集群的滚动重启;每个数据节点必须使用
--initial
重启。 (NDB 8.3.0)如果指定了这个参数,那么 NDB 集群磁盘数据撤销日志文件将被放置在指定的目录中。这将覆盖
FileSystemPathDD
的任何值。此参数可以在创建数据文件时被覆盖,方法是指定ADD UNDO
子句中的路径,用于CREATE LOGFILE GROUP
或ALTER LOGFILE GROUP
语句。如果FileSystemPathUndoFiles
未指定,则使用FileSystemPathDD
(或FileSystemPath
,如果FileSystemPathDD
也未设置)。如果为某个数据节点(包括在
[ndbd default]
部分的config.ini
文件中指定参数)指定了FileSystemPathUndoFiles
目录,那么使用--initial
启动该数据节点将删除目录中的所有文件。
有关更多信息,请参阅 第 25.6.11.1 节,“NDB 集群磁盘数据对象”。
-
-
磁盘数据对象创建参数。 接下来的两个参数使您可以在第一次启动集群时创建磁盘数据日志文件组、表空间或两者,而无需使用 SQL 语句。
-
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 日志文件根据FileSystemPath
、FileSystemPathDD
和FileSystemPathUndoFiles
的值来放置,就像它们是通过CREATE LOGFILE GROUP
或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 集群的行为未定义。 -
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 也是可选的,默认为1M
。file-specification-list
使用与InitialLogfileGroup
参数相同的语法,只是每个file-specification
用于InitialTablespace
对应一个数据文件。至少需要在file-specification-list
中指定一个。数据文件根据FileSystemPath
、FileSystemPathDD
和FileSystemPathDataFiles
的值来放置,就像它们是通过CREATE TABLESPACE
或ALTER 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 内核为每个节点分配了固定的发送缓冲区大小,该大小在节点启动时确定并且不能在节点运行时更改。)TotalSendBufferMemory
和 OverLoadLimit
数据节点配置参数允许设置对该内存分配的限制。有关这些参数(以及 SendBufferMemory
)的使用信息,请参阅 第 25.4.3.14 节,“配置 NDB 集群发送缓冲区参数”。
-
该参数指定了在 addition 到使用
TotalSendBufferMemory
、SendBufferMemory
或两者时分配的传输器发送缓冲区内存的数量。 -
该参数用于确定在该节点上为所有配置的传输器共享发送缓冲区内存的总量。
如果设置了该参数,其最小允许值为 256KB;0 表示该参数未设置。有关详细信息,请参阅 第 25.4.3.14 节,“配置 NDB 集群发送缓冲区参数”。
另请参阅 第 25.6.7 节,“在线添加 NDB 集群数据节点”。
重做日志超时提交处理。 可以控制数据节点在flush 重做日志到磁盘时的操作处理。当重做日志flush 超过 RedoOverCommitLimit
秒时,超过 RedoOverCommitCounter
次,导致事务中止。然后,API 节点将根据 DefaultOperationRedoProblemAction
处理操作。
-
Version (or later) NDB 8.3.0 Type or units 数字 Default 3 Range 1 - 4294967039 (0xFFFFFEFF) Restart Type 节点重启: 需要 滚动重启 集群。 (NDB 8.3.0)
当
RedoOverCommitLimit
超过时,尝试将重做日志写入磁盘时,如果超过该次数或更多次,则中止未提交的事务,并根据DefaultOperationRedoProblemAction
处理操作。 -
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
处理操作。
控制重启尝试。 可以使用 MaxStartFailRetries
和 StartFailRetryDelay
数据节点配置参数来对数据节点在启动失败时的重启尝试进行细粒度控制。
MaxStartFailRetries
限制了数据节点在启动失败时的总重启尝试次数,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。 -
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 索引统计生成相关。
-
Version (or later) NDB 8.3.0 Type or units 整数 Default 1 Range 0, 1 Restart Type 节点重启: 需要对集群进行 滚动重启。(NDB 8.3.0)
启用(设置为 1)或禁用(设置为 0)自动统计收集,当索引创建时。
-
Version (or later) NDB 8.3.0 Type or units 整数 Default 1 Range 0, 1 Restart Type 节点重启: 需要对集群进行 滚动重启。(NDB 8.3.0)
启用(设置为 1)或禁用(设置为 0)监控索引的变化,并在检测到变化时触发自动统计更新。触发更新的程度由
IndexStatTriggerPct
和IndexStatTriggerScale
选项确定。 -
Version (or later) NDB 8.3.0 Type or units 字节 Default 32768 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 最大允许的字节大小,用于保存任何给定索引的统计信息,在
NDB
系统表和mysqld内存缓存中。至少生成一个样本,不管大小限制如何。这大小是根据
IndexStatSaveScale
进行缩放的。由
IndexStatSaveSize
指定的大小是根据IndexStatSaveScale
的值进行缩放的,对于大索引,乘以0.01。此外,还乘以索引大小的对数以2为底。如果将IndexStatTriggerPct
设置为0,则禁用缩放效果。 -
Version (or later) NDB 8.3.0 Type or units 百分比 Default 100 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 由
IndexStatSaveSize
指定的大小是根据IndexStatTriggerPct
的值进行缩放的,对于大索引,乘以0.01。此外,还乘以索引大小的对数以2为底。如果将IndexStatTriggerPct
设置为0,则禁用缩放效果。 -
Version (or later) NDB 8.3.0 Type or units 百分比 Default 100 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 触发索引统计更新的百分比变化。该值是根据
IndexStatTriggerScale
进行缩放的。你可以通过将IndexStatTriggerPct
设置为0来禁用该触发器。 -
Version (or later) NDB 8.3.0 Type or units 百分比 Default 100 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 将
IndexStatTriggerPct
乘以该值,乘以0.01,对于大索引。如果将该值设置为0,则禁用缩放。 -
Version (or later) NDB 8.3.0 Type or units 秒 Default 60 Range 0 - 4294967039 (0xFFFFFEFF) Restart Type 自动索引统计更新之间的最小延迟时间(以秒为单位)。将该变量设置为0将禁用任何延迟。默认值为60秒。
表 25.15 NDB 集群重启类型
Symbol | Restart Type | Description |
---|---|---|
N | 节点 | 该参数可以使用滚动重启(见 第 25.6.5 节,“执行 NDB 集群的滚动重启”)来更新 |
S | 系统 | 为了生效该参数的更改,所有集群节点必须完全关闭,然后重新启动 |
I | 初始 | 数据节点必须使用 --initial 选项重新启动 |