21.3.3.6 定义 NDB 群集数据节点
[ndbd]
和[ndbd default]
部分用于配置群集数据节点的行为。
无论将ndbd或ndbmtd二进制文件用于数据节点进程,始终将[ndbd]
和[ndbd default]
用作节名称。
有许多参数可控制缓冲区大小,池大小,超时等。唯一的必需参数是ExecuteOnComputer
或HostName
之一;这必须在本地[ndbd]
部分中定义。
参数NoOfReplicas应该在[ndbd default]
部分中定义,因为它对于所有群集数据节点都是公用的。严格来说,不必设置NoOfReplicas,但最好是显式设置。
大多数数据节点参数在[ndbd default]
部分中设置。仅在[ndbd]
部分中允许更改那些明确声明可以设置局部值的参数。如果存在HostName
,NodeId
和ExecuteOnComputer
*,则必须在本地[ndbd]
部分中定义,而不能在config.ini
的任何其他部分中定义。换句话说,这些参数的设置特定于一个数据节点。
对于那些影响内存使用量或缓冲区大小的参数,可以使用K
,M
或G
作为后缀来 table 示 1024、1024×1024 或 1024×1024×1024 的单位。 (例如100K
table 示 100×1024 =102400.)
参数名称和值不区分大小写,除非在 MySQL Server my.cnf
或my.ini
文件中使用,在这种情况下,它们区分大小写。
有关特定于 NDB 群集磁盘数据 table 的配置参数的信息,可以在本节的后面部分找到(请参阅磁盘数据配置参数)。
所有这些参数也适用于ndbmtd(ndbd的多线程版本)。三个附加的数据节点配置参数MaxNoOfExecutionThreads,ThreadConfig和NoOfFragmentLogParts仅适用于ndbmtd;与ndbd一起使用时,这些无效。有关更多信息,请参见多线程配置参数(ndbmtd)。另请参见第 21.4.3 节“ ndbmtd-NDB 群集数据节点守护程序(多线程)”。
标识数据节点. 可以在启动节点时在命令行上或在配置文件中分配NodeId
或Id
值(即数据节点标识符)。
table21.27 该 table 提供了 NodeId 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | [none] |
Range | 1 - 48 |
Restart Type | IS |
唯一的节点 ID 用作所有群集内部消息的节点地址。对于数据节点,这是 1 到 48(含)之间的整数。集群中的每个节点必须具有唯一的标识符。
NodeId
是标识数据节点时唯一使用的受支持参数名称。 (Id
已在 NDB 7.5.0 中删除.)
table21.28 该 table 提供 ExecuteOnComputer 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | name |
Default | [none] |
Range | ... |
Restart Type | S |
Deprecated | NDB 7.5.0 |
这是指在[computer]
部分中定义的其中一台计算机的Id
集。
Important
从 NDB 7.5.0 开始不推荐使用此参数,并且在将来的发行版中可能会删除该参数。请使用HostName参数。
table21.29 该 table 提供了 HostName 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | 名称或 IP 地址 |
Default | localhost |
Range | ... |
Restart Type | N |
指定此参数定义数据节点将驻留在其上的计算机的主机名。要指定除localhost
以外的主机名,此参数或ExecuteOnComputer
是必需的。
table21.30 此 table 提供 ServerPort 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | [none] |
Range | 1 -64K |
Restart Type | S |
群集中的每个节点都使用端口连接到其他节点。默认情况下,此端口是动态分配的,以确保同一主机上没有两个节点接收相同的端口号,因此通常不必为此参数指定值。
但是,如果您需要能够在防火墙中打开特定端口以允许数据节点与 API 节点(包括 SQL 节点)之间进行通信,则可以在[ndbd]
部分中将此参数设置为所需端口的编号,或者(如果您config.ini
文件的[ndbd default]
部分,需要对多个数据节点执行此操作,然后打开具有该编号的端口以用于来自 SQL 节点,API 节点或两者的传入连接。
Note
从数据节点到 Management 节点的连接是使用ndb_mgmdManagement 端口(Management 服务器的PortNumber)完成的,因此应始终允许从任何数据节点到该端口的传出连接。
将此参数设置为TRUE
或1
会绑定IP_ADDR_ANY
,以便可以从任何地方构建连接(对于自动生成的连接)。默认值为FALSE
(0
)。
table21.31 该 table 提供了 NodeGroup 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | [none] |
Range | 0 - 65536 |
Restart Type | IS |
此参数可用于将数据节点分配给特定的节点组。它仅在群集首次启动时是只读的,并且不能用于将数据节点重新分配给联机的其他节点组。通常不希望在config.ini
文件的[ndbd default]
部分中使用此参数,并且必须注意不要以将无效数量的节点分配给任何节点组的方式将节点分配给节点组。
NodeGroup参数主要用于将新节点组添加到正在运行的 NDB 群集中,而无需执行滚动重启。为此,应将其设置为 65536(最大值)。您不需要为所有群集数据节点设置NodeGroup值,仅需要为以后要启动并作为新节点组添加到群集的那些节点设置。有关更多信息,请参见第 21.5.7.3 节“在线添加 NDB 群集数据节点:详细示例”。
table21.32 该 table 提供了 LocationDomainId 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 16 |
Restart Type | S |
Added | NDB 7.6.4 |
将数据节点分配给云中特定的availability domain(也称为可用性区域)。通过通知NDB
哪个节点位于哪个可用性域中,可以通过以下方式在云环境中提高性能:
-
如果在同一节点上找不到请求的数据,则可以将读取定向到同一可用性域中的另一个节点。
-
保证不同可用性域中的节点之间的通信使用
NDB
传输者的 WAN 支持,而无需任何进一步的手动干预。 -
传输者的组号可以基于使用哪个可用性域,以便 SQL 和其他 API 节点也尽可能与同一可用性域中的本地数据节点通信。
-
仲裁器可以从不存在数据节点的可用性域中选择,或者,如果找不到这样的可用性域,则可以从第三个可用性域中选择。
-
LocationDomainId
取 0 到 16 之间的一个整数值,其中 0 是默认值;使用 0 等于不设置参数。
table21.33 该 table 提供了 NoOfReplicas 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 2 |
Range | 1 - 2 |
Restart Type | IS |
只能在[ndbd default]
部分中设置此全局参数,并为群集中存储的每个 table 定义副本数。此参数还指定节点组的大小。节点组是一组节点,所有节点都存储相同的信息。
节点组是隐式形成的。第一个节点组由具有最低节点 ID 的数据节点集合构成,第二个节点组由具有次要最低节点标识的集合构成,依此类推。举例来说,假设我们有 4 个数据节点并将NoOfReplicas
设置为 2.这四个数据节点具有节点 ID 2、3、4 和 5.然后,第一个节点组由节点 2 和 3 组成,第二个节点组由节点 4 和 5 组成。重要的是,以这样一种方式配置群集,即不要将同一节点组中的节点放置在同一台计算机上,因为单个硬件故障会导致整个群集发生故障。
如果未提供节点 ID,则数据节点的 Sequences 将成为节点组的决定因素。无论是否进行了显式分配,都可以在 ManagementClient 端的SHOW命令的输出中查看它们。
NoOfReplicas
的默认值和建议的最大值是 2.这是大多数生产环境的建议值。
Important
尽管从理论上讲该参数的值可能为 3 或 4,但是 NDB Cluster 7.5 和 NDB Cluster 7.6 在生产 中不支持将NoOfReplicas
设置为大于 2 的值。
Warning
将NoOfReplicas
设置为 1 意味着所有集群数据只有一个副本。在这种情况下,单个数据节点的丢失会导致群集发生故障,因为该节点没有存储数据的其他副本。
此参数的值必须平均分配到群集中的数据节点数。例如,如果有两个数据节点,则NoOfReplicas必须等于 1 或 2,因为 2/3 和 2/4 都产生分数值;如果有四个数据节点,则NoOfReplicas必须等于 1、2 或 4.
table21.34 该 table 提供了 DataDir 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | path |
Default | . |
Range | ... |
Restart Type | IN |
此参数指定放置跟踪文件,日志文件,pid 文件和错误日志的目录。
默认值为数据节点进程工作目录。
table21.35 该 table 提供了 FileSystemPath 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | path |
Default | DataDir |
Range | ... |
Restart Type | IN |
此参数指定放置为元数据,REDO 日志,UNDO 日志(针对磁盘数据 table)和数据文件创建的所有文件的目录。默认值为DataDir
指定的目录。
Note
在启动ndbd进程之前,该目录必须存在。
NDB 群集的建议目录层次结构包括/var/lib/mysql-cluster
,在该目录下将创建节点文件系统的目录。该子目录的名称包含节点 ID。例如,如果节点 ID 为 2,则此子目录名为ndb_2_fs
。
table21.36 该 table 提供了 BackupDataDir 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | path |
Default | FileSystemPath |
Range | ... |
Restart Type | IN |
此参数指定放置备份的目录。
Important
字符串“ /BACKUP
”始终附加在此值之后。例如,如果将BackupDataDir的值设置为/var/lib/cluster-data
,则所有备份都存储在/var/lib/cluster-data/BACKUP
下。这也意味着有效的默认备份位置是FileSystemPath参数指定的位置下名为BACKUP
的目录。
数据存储器,索引存储器和字符串存储器
DataMemory和IndexMemory是[ndbd]
参数,用于指定用于存储实际记录及其索引的内存段的大小。在设置这些值时,重要的是要了解DataMemory和IndexMemory的用法,因为通常需要更新它们以反映集群的实际使用情况。
Note
IndexMemory
在 NDB 7.6 中已弃用,并且在以后的 NDB Cluster 版本中会被删除。有关更多信息,请参见以下描述。
table21.37 该 table 提供了 DataMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 80M |
Range | 1 M-1T |
Restart Type | N |
版本(或更高版本) | NDB 7.6.2 |
类型或单位 | bytes |
Default | 98M |
Range | 1 M-1T |
Restart Type | N |
此参数定义可用于存储数据库记录的空间量(以字节为单位)。该值指定的全部量都分配在内存中,因此,机器具有足够的物理内存来容纳它非常重要。
DataMemory分配的内存用于存储实际记录和索引。每条记录有 16 字节的开销;每条记录都会产生额外的金额,因为它存储在 32KB 页面中,具有 128 个字节的页面开销(请参见下文)。由于每个记录仅存储在一页中,因此每页也有少量浪费。
对于可变大小的 table 属性,数据存储在从DataMemory分配的单独数据页上。可变长度记录使用具有 4 个字节额外开销的固定大小部分来引用可变大小部分。可变大小部分的开销为 2 字节,每个属性 2 字节。
最大记录大小为 14000 字节。
在 NDB 7.5(及更早版本)中,由DataMemory定义的内存空间也用于存储有序索引,每条记录大约使用 10 个字节。每个 table 行均以有序索引 table 示。用户之间的常见错误是假定所有索引都存储在IndexMemory分配的内存中,但事实并非如此:只有主键和唯一哈希索引使用此内存;有序索引使用DataMemory分配的内存。但是,创建主键或唯一哈希索引也会在相同的键上创建有序索引,除非您在索引创建语句中指定USING HASH
。可以通过运行ndb_desc -d db_nametable 名进行验证。
在 NDB 7.6 中,分配给DataMemory
的资源用于存储所有数据和索引;配置为IndexMemory
的所有内存都会自动添加到DataMemory
所使用的内存中,以形成一个公共资源池。
当前,NDB Cluster 每个分区的哈希索引最多可以使用 512 MB,这意味着在某些情况下,即使ndb_mgm -e“所有报告内存”显示出很大的空闲DataMemory,在 MySQLClient 端应用程序中也可能出现 Table is full 错误。这也可能导致在数据负载较重的节点上重新启动数据节点的问题。
在 NDB 7.5.4 及更高版本中,您可以通过将NDB_TABLE
选项PARTITION_BALANCE
设置为 1、4、2、3 的值FOR_RA_BY_LDM
,FOR_RA_BY_LDM_X_2
,FOR_RA_BY_LDM_X_3
或FOR_RA_BY_LDM_X_4
之一来控制给定 table 的每个本地数据 Management 器的分区数。创建 table 时,每个 LDM 分别有 4 个或 4 个分区(请参见第 13.1.18.9 节“设置 NDB_TABLE 选项”)。
Note
在以前版本的 NDB Cluster 中,可以为 NDB Clustertable 创建额外的分区,从而可以通过为CREATE TABLE使用MAX_ROWS
选项为哈希索引提供更多的内存。尽管仍然支持向后兼容,但从 NDB 7.5.4 开始不建议使用MAX_ROWS
,而应该使用PARTITION_BALANCE
。
您还可以使用MinFreePct配置参数来帮助避免节点重新启动的问题。
DataMemory分配的内存空间由 32KB 页组成,这些页分配给 table 片段。每个 table 通常被划分为与群集中的数据节点相同数量的片段。因此,对于每个节点,与NoOfReplicas中设置的片段数量相同。
分配页面后,当前无法将其返回到空闲页面池,除非删除 table。 (这也意味着一旦分配给给定 table 的DataMemory页将不能被其他 table 使用。)执行数据节点恢复还会压缩分区,因为所有记录都已从其他活动节点插入到空分区中。
DataMemory内存空间还包含 UNDO 信息:对于每次更新,未更改记录的副本将分配在DataMemory中。在有序 table 索引中也有对每个副本的引用。仅当唯一索引列更新时,唯一哈希索引才会更新,在这种情况下,将在索引 table 中插入新条目,并在提交时删除旧条目。因此,还必须分配足够的内存来处理使用群集的应用程序执行的最大事务。在任何情况下,由于以下原因,执行一些大型事务都不会比使用许多较小的事务具有优势:
-
大笔 Transaction 并不比小笔 Transaction 快
-
大型事务会增加丢失的操作数量,因此在发生事务失败时必须重复操作
-
大笔 Transaction 占用更多内存
-
在 NDB 7.5(及更低版本)中,DataMemory的默认值为 80MB;从 NDB 7.6.2 开始,这是 98MB。最小值为 1MB。没有最大大小,但是实际上必须调整最大大小,以便在达到限制时该过程不会开始交换。此限制由计算机上可用的物理 RAM 的数量以及 os 可承诺给任何一个进程的内存量确定。每个进程通常将 32 位 os 限制为 2-4 GB; 64 位 os 可以使用更多。对于大型数据库,由于这个原因,最好使用 64 位 os。
table21.38 该 table 提供了 IndexMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 18M |
Range | 1 M-1T |
Restart Type | N |
版本(或更高版本) | NDB 7.6.2 |
类型或单位 | bytes |
Default | 0 |
Range | 1 M-1T |
Restart Type | N |
Deprecated | NDB 7.6.2 |
在 NDB 7.5 和更早版本中,此参数控制 NDB 群集中用于哈希索引的存储量。哈希索引始终用于主键索引,唯一索引和唯一约束。在定义主键或唯一索引时,将创建两个索引,其中之一是用于所有 Tuples 访问以及锁处理的哈希索引。该索引还用于强制执行唯一约束。
从 NDB 7.6.2 开始,不推荐使用IndexMemory
参数(并可能在将来删除)。分配给IndexMemory
的任何内存将分配给与DataMemory相同的池,而不是分配给与DataMemory相同的池,该池将独自负责在内存中存储数据和索引所需的所有资源。在 NDB 7.6.2 和更高版本中,在群集配置文件中使用IndexMemory
会触发来自 Management 服务器的警告。
您可以使用以下公式估算哈希索引的大小:
size = ( (fragments * 32K) + (rows * 18) )
* replicas
fragments
是片段数,replicas
是副本数(通常为 2),rows
*是行数。如果一个 table 有一百万行,8 个片段和 2 个副本,则按如下所示计算预期的索引内存使用量:
((8 * 32K) + (1000000 * 18)) * 2 = ((8 * 32768) + (1000000 * 18)) * 2
= (262144 + 18000000) * 2
= 18262144 * 2 = 36524288 bytes = ~35MB
有序索引(启用时)的索引统计信息存储在mysql.ndb_index_stat_sample
table 中。由于此 table 具有哈希索引,因此会增加索引内存使用率。给定排序索引的行数上限可以如下计算:
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
*是基 table 中的行数。
假设 tablet1
有 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 字节。
在 NDB 7.6.2 之前,IndexMemory的默认值为 18MB,最小值为 1MB。在 NDB 7.6.2 和更高版本中,此参数的最小值和默认值是 0(零)。这将导致从 NDB 7.6 降级到 NDB Cluster 的早期版本。有关更多信息,请参见第 21.2.9 节“升级和降级 NDB 集群”。
table21.39 该 table 提供 StringMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | %或字节 |
Default | 25 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | S |
此参数确定为 table 名等字符串分配多少内存,并在config.ini
文件的[ndbd]
或[ndbd default]
部分中指定。 0
和100
之间的一个值(包含在内)被解释为最大默认值的百分比,该值是根据许多因素计算得出的,这些因素包括 table 数,最大 table 名大小,.FRM
文件的最大大小,MaxNoOfTriggers和最大列名的大小,以及最大默认列值。
大于100
的值将解释为字节数。
默认值为 25,即默认最大值的 25%。
在大多数情况下,默认值应该足够,但是当您有很多NDB
个 table(1000 个或更多)时,有可能从字符串内存中获取错误 773,请修改 StringMemory 配置参数:永久错误:架构错误,在这种情况下,您应该增加此值。 25
(25%)不太高,应该防止在最极端的情况下在所有情况下都不会再次发生此错误。
以下示例说明了如何将内存用于 table。考虑此 table 定义:
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 个字节。基 table 上有一个主键哈希索引,每个记录大约使用 29 个字节。唯一约束由一个单独的 table 实现,该 table 以b
作为主键,而a
作为列。该另一个 table 在example
table 中的每个记录消耗了额外的 29 字节索引存储器,以及 8 字节的记录数据和 12 字节的开销。
因此,对于一百万条记录,我们需要 58MB 的索引内存来处理主键和唯一约束的哈希索引。我们还需要 64MB 用于基本 table 和唯一索引 table 以及两个有序索引 table 的记录。
您可以看到哈希索引占用了大量的内存空间。但是,它们提供了对数据的快速访问。它们还用于 NDB 群集中以处理唯一性约束。
当前,唯一的分区算法是散列,并且有序索引对于每个节点都是本地的。因此,在一般情况下,有序索引不能用于处理唯一性约束。
IndexMemory和DataMemory的重要一点是,数据库的总大小是每个节点组的所有数据内存和所有索引内存的总和。每个节点组用于存储复制的信息,因此,如果有四个带有两个副本的节点,则将有两个节点组。因此,每个数据节点可用的总数据存储器为 2×DataMemory。
强烈建议将所有节点的DataMemory和IndexMemory设置为相同的值。数据分布甚至分布在群集中的所有节点上,因此任何节点可用的最大空间量不能大于群集中最小节点的空间量。
可以更改DataMemory(以及在 NDB 7.5 和更早版本的IndexMemory中),但是降低它可能会有风险;这样做很容易导致节点或什至整个 NDB 群集由于内存空间不足而无法重新启动。增加应该是可以接受的,但是建议以与软件升级相同的方式执行此类升级,首先是更新配置文件,然后重新启动 Management 服务器,然后依次重新启动每个数据节点。
MinFreePct. 保留一定比例(默认情况下为 5%)的数据节点资源,包括DataMemory(在 NDB 7.5 和更早版本中为IndexMemory),以确保数据节点在执行以下操作时不会耗尽其内存重新开始。可以使用MinFreePct数据节点配置参数(默认值为 5)进行调整。
table21.40 该 table 提供了 MinFreePct 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 5 |
Range | 0 - 100 |
Restart Type | N |
更新不会增加使用的索引内存量。插入立即生效;但是,在提交事务之前,实际上不会删除行。
Transaction 参数. 我们接下来讨论的[ndbd]
参数很重要,因为它们会影响并行事务的数量和系统可以处理的事务的大小。 MaxNoOfConcurrentTransactions设置节点中可能的并行事务数。 MaxNoOfConcurrentOperations设置可以处于更新阶段或同时锁定的记录数。
这两个参数(尤其是MaxNoOfConcurrentOperations)都可能是用户设置特定值而不使用默认值的目标。为使用小事务的系统设置默认值,以确保这些事务不使用过多的内存。
MaxDMLOperationsPerTransaction设置可以在给定事务中执行的 DML 操作的最大数量。
table21.41 该 table 提供了 MaxNoOfConcurrentTransactions 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 4096 |
Range | 32 -4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | 是(在 NDB 8.0 中) |
每个群集数据节点都需要群集中每个活动事务的事务记录。协调事务的任务分布在所有数据节点之间。群集中的事务记录总数是任何给定节点中的事务数乘以群集中的节点数。
事务记录分配给各个 MySQL 服务器。到 MySQL 服务器的每个连接都至少需要一个事务记录,并且每个连接访问的 table 都需要一个附加的事务对象。这意味着群集中事务总数的合理最小值可以 table 示为
TotalNoOfConcurrentTransactions =
(maximum number of tables accessed in any single transaction + 1)
* number of SQL nodes
假设有 10 个使用该群集的 SQL 节点。包含 10 个 table 的单个联接需要 11 个事务记录;如果一个事务中有 10 个这样的联接,则每个 MySQL 服务器为此事务需要 10 * 11 = 110 个事务记录,或者总计 110 * 10 = 1100 个事务记录。可以期望每个数据节点处理 TotalNoOfConcurrentTransactions /数据节点数。对于具有 4 个数据节点的 NDB 群集,这意味着将每个数据节点上的MaxNoOfConcurrentTransactions
设置为 1100/4 =275.此外,应通过确保单个节点组可以容纳所有并发事务来提供故障恢复;换句话说,每个数据节点的 MaxNoOfConcurrentTransactions 足以覆盖等于 TotalNoOfConcurrentTransactions /节点组数量的事务数量。如果该群集具有单个节点组,则应将MaxNoOfConcurrentTransactions
设置为 1100(与整个群集的并发事务总数相同)。
另外,每笔 Transaction 至少涉及一项操作;因此,为MaxNoOfConcurrentTransactions
设置的值应始终不超过MaxNoOfConcurrentOperations的值。
对于所有群集数据节点,必须将此参数设置为相同的值。这是由于以下事实:当数据节点发生故障时,最旧的幸存节点会重新创建发生故障的节点中所有事务的事务状态。
可以使用滚动重新启动来更改此值,但是群集上的流量必须确保发生的事务数量不超过新旧级别中发生的事务。
默认值为 4096.
table21.42 该 table 提供 MaxNoOfConcurrentOperations 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 32K |
Range | 32 -4294967039(0xFFFFFEFF) |
Restart Type | N |
最好根据事务的大小和数量来调整此参数的值。当执行仅涉及少量操作和记录的事务时,此参数的默认值通常就足够了。执行涉及许多记录的大型事务通常需要您增加其价值。
在事务协调器和执行实际更新的节点中,都为每个事务更新群集数据保留记录。这些记录包含查找 UNDO 记录以进行回滚,锁定队列和其他用途所需的状态信息。
此参数的最小值应设置为在事务中要同时更新的记录数除以群集数据节点数。例如,在具有四个数据节点且预期将使用事务处理一百万个并发更新的群集中,应将此值设置为 1000000/4 =250000.为帮助提供针对故障的弹性,建议您设置此值参数设置为足够高的值,以允许单个数据节点处理其节点组的负载。换句话说,您应该将值设置为total number of concurrent operations / number of node groups
。 (在有单个节点组的情况下,这与整个集群的并发操作总数相同.)
因为每个事务总是涉及至少一个操作,所以MaxNoOfConcurrentOperations
的值应始终大于或等于MaxNoOfConcurrentTransactions的值。
设置锁定的读取查询还会导致创建操作记录。在各个节点内分配了一些额外的空间,以适应节点上分配不理想的情况。
当查询使用唯一的哈希索引时,实际上在事务中每个记录使用两个操作记录。第一条记录 table 示索引 table 中的读取,第二条记录处理基 table 上的操作。
默认值为 32768.
该参数实际上处理两个可以分别配置的值。其中的第一个指定将与事务协调器一起放置多少个操作记录。第二部分指定要在数据库本地存储多少个操作记录。
在八节点群集上执行的非常大的事务需要事务协调器中的操作记录与事务中涉及的读取,更新和删除一样多。但是,的操作记录分布在所有八个节点上。因此,如果有必要为一个非常大的事务配置系统,则最好分别配置两个部分。 MaxNoOfConcurrentOperations将始终用于计算节点的事务协调器部分中的操作记录数。
了解操作记录的存储要求也很重要。每条记录消耗大约 1KB。
table21.43 该 table 提供了 MaxNoOfLocalOperations 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | UNDEFINED |
Range | 32 -4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | 是(在 NDB 8.0 中) |
默认情况下,此参数计算为 1.1×MaxNoOfConcurrentOperations。这适合于具有许多同时事务的系统,但没有一个非常大。如果需要一次处理一个非常大的事务并且有很多节点,则最好通过显式指定此参数来覆盖默认值。
table21.44 该 table 提供了 MaxDMLOperationsPerTransaction 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | operations (DML) |
Default | 4294967295 |
Range | 32 - 4294967295 |
Restart Type | N |
此参数限制事务的大小。如果该事务需要多个 DML 操作,则中止该事务。每笔 Transaction 的最小操作数为 32;但是,可以将MaxDMLOperationsPerTransaction
设置为 0 以禁用对每个事务的 DML 操作数量的任何限制。最大值(默认)是 4294967295.
事务临时存储. 下一组[ndbd]
参数用于在执行作为 Cluster 事务一部分的语句时确定临时存储。语句完成并且集群正在 await 提交或回滚时,将释放所有记录。
这些参数的默认值适用于大多数情况。但是,需要支持涉及大量行或操作的事务的用户可能需要增加这些值,以在系统中实现更好的并行性,而其应用程序需要较小事务的用户可以减小值以节省内存。
table21.45 该 table 提供了 MaxNoOfConcurrentIndexOperations 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 8K |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | 是(在 NDB 8.0 中) |
对于使用唯一哈希索引的查询,在查询的执行阶段将使用另一组临时的操作记录。此参数设置该记录池的大小。因此,仅在执行查询的一部分时才分配此记录。一旦执行了该部分,记录就会被释放。处理中止和提交所需的状态由正常操作记录处理,其中池大小由参数MaxNoOfConcurrentOperations设置。
此参数的默认值为 8192.仅在极少数情况下使用唯一哈希索引的并行度极高时,才有必要增加此值。如果 DBA 确定集群不需要高并行度,则可以使用较小的值,并且可以节省内存。
table21.46 该 table 提供了 MaxNoOfFiredTriggers 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 4000 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | 是(在 NDB 8.0 中) |
MaxNoOfFiredTriggers的默认值为 4000,在大多数情况下就足够了。在某些情况下,如果 DBA 确信集群中对并行性的需求不高,那么甚至可以减少它。
当执行影响唯一哈希索引的操作时,将创建一条记录。在具有唯一哈希索引的 table 中插入或删除记录,或更新作为唯一哈希索引一部分的列会在索引 table 中引发插入或删除操作。结果记录在 await 触发它的原始操作完成时用于 table 示此索引 table 操作。此操作是短暂的,但对于在包含一组唯一哈希索引的基 table 上进行许多并行写操作的情况下,该池中仍需要大量记录。
table21.47 该 table 提供了 TransactionBufferMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 1M |
Range | 1 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
受此参数影响的内存用于跟踪在更新索引 table 和读取唯一索引时触发的操作。该存储器用于存储这些操作的键和列信息。很少需要将此参数的值更改为默认值。
TransactionBufferMemory的默认值为 1MB。
正常的读取和写入操作使用类似的缓冲区,其使用期更短。编译时参数ZATTRBUF_FILESIZE
(位于ndb/src/kernel/blocks/Dbtc/Dbtc.hpp
中)设置为 4000×128 字节(500KB)。类似的密钥信息缓冲区ZDATABUF_FILESIZE
(也在Dbtc.hpp
中)包含 4000×16 = 62.5KB 的缓冲区空间。 Dbtc
是处理事务协调的模块。
扫描和缓冲. Dblqh
模块(在ndb/src/kernel/blocks/Dblqh/Dblqh.hpp
中)还有其他[ndbd]
参数会影响读取和更新。其中包括ZATTRINBUF_FILESIZE
(默认设置为 10000×128 字节(1250KB))和ZDATABUF_FILE_SIZE
(默认设置为 10000 * 16 字节(大约 156KB)的缓冲区)。迄今为止,既没有来自用户的任何报告,也没有来自我们自己广泛测试的结果 table 明,应该增加这两个编译时限制。
table21.48 该 table 提供了 BatchSizePerLocalScan 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 256 |
Range | 1 - 992 |
Restart Type | N |
Deprecated | 是(在 NDB 8.0 中) |
此参数用于计算用于处理并发扫描操作的锁定记录的数量。
BatchSizePerLocalScan
与 SQL 节点中定义的BatchSize有很强的联系。
table21.49 该 table 提供了 LongMessageBuffer 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 64M |
Range | 512 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
这是一个内部缓冲区,用于在各个节点之间以及节点之间传递消息。默认值为 64MB。
此参数很少需要从默认值更改。
table21.50 该 table 提供了 MaxFKBuildBatchSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | integer |
Default | 64 |
Range | 16 - 512 |
Restart Type | S |
Added | NDB 7.6.4 |
用于构建外键的最大扫描批处理大小。增大为此参数设置的值可能会加快外键构建的构建,但会以更大的代价影响正在进行的通信。
在 NDB 7.6.4 中添加
table21.51 该 table 提供了 MaxNoOfConcurrentScans 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 256 |
Range | 2 - 500 |
Restart Type | N |
此参数用于控制可以在群集中执行的并行扫描的数量。每个事务协调器都可以处理为此参数定义的并行扫描的数量。通过并行扫描所有分区来执行每个扫描查询。每次分区扫描都使用分区所在节点中的扫描记录,记录数是此参数的值乘以节点数。群集应能够同时支持群集中所有节点的MaxNoOfConcurrentScans扫描。
扫描实际上是在两种情况下执行的。当不存在任何哈希或有序索引来处理查询时,就会发生第一种情况,在这种情况下,查询是通过执行全 table 扫描来执行的。当没有哈希索引支持查询但有序索引时,会遇到第二种情况。使用有序索引意味着执行并行范围扫描。该 Sequences 仅保留在本地分区上,因此有必要在所有分区上执行索引扫描。
缺省值MaxNoOfConcurrentScans为 256.最大值为 500.
table21.52 该 table 提供了 MaxNoOfLocalScans 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 4 * MaxNoOfConcurrentScans * [数据节点数] 2 |
Range | 32 -4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | 是(在 NDB 8.0 中) |
如果许多扫描未完全并行化,则指定本地扫描记录的数量。如果未提供本地扫描记录数,则按如下所示进行计算:
4 * MaxNoOfConcurrentScans * [# data nodes] + 2
最小值是 32.
table21.53 该 table 提供了 MaxParallelCopyInstances 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 64 |
Restart Type | S |
通过从当前节点上复制任何已更改的记录来复制当前刚刚启动的节点与已经具有当前数据的节点同步时,此参数设置在节点重新启动或系统重新启动的复制阶段中使用的并行化。由于在这种情况下完全并行会导致过载情况,因此MaxParallelCopyInstances
提供了减少这种情况的方法。该参数的默认值 0.该值意味着有效的并行度等于节点中刚开始以及对其进行更新的 LDM 实例的数量。
table21.54 该 table 提供了 MaxParallelScansPerFragment 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 256 |
Range | 1 -4294967039(0xFFFFFEFF) |
Restart Type | N |
可以在开始排队进行串行处理之前配置允许的最大并行扫描数(TUP
扫描和TUX
扫描)。您可以增加此值,以在并行执行大量扫描时利用任何未使用的 CPU 并提高其性能。
此参数的默认值为 256.
table21.55 该 table 提供了 MaxReorgBuildBatchSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | integer |
Default | 64 |
Range | 16 - 512 |
Restart Type | S |
Added | NDB 7.6.4 |
用于重组 table 分区的最大扫描批处理大小。增大为此参数设置的值可能会加快重组速度,但会对正在进行的流量产生更大的影响。
在 NDB 7.6.4 中添加
table21.56 该 table 提供了 MaxUIBuildBatchSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | integer |
Default | 64 |
Range | 16 - 512 |
Restart Type | S |
Added | NDB 7.6.4 |
用于构建唯一密钥的最大扫描批处理大小。增大为此参数设置的值可能会加快此类构建的速度,但以更大的代价影响正在进行的流量。
在 NDB 7.6.4 中添加
Memory Allocation
table21.57 该 table 提供了 MaxAllocate 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 32M |
Range | 1 M-1G |
Restart Type | N |
这是为 table 分配内存时要使用的内存单元的最大大小。如果NDB发出内存不足错误,但通过检查群集日志或DUMP 1000的输出可以明显看出尚未使用所有可用内存,则可以将此参数(或MaxNoOfTables或两者)的值增加为导致NDB提供足够的可用内存。
哈希图大小
table21.58 该 table 提供 DefaultHashMapSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | LDM threads |
Default | 240 |
Range | 0 - 3840 |
Restart Type | N |
NDB使用的 table 哈希 Map 的大小可以使用此参数进行配置。 DefaultHashMapSize
可以采用三个可能的值(0、240、3840)中的任何一个。
此参数的最初预期用途是促进具有不同默认哈希 Map 大小的非常老的版本之间的升级,尤其是降级。从 NDB Cluster 7.3(或更高版本)升级到更高版本时,这不是问题。
不支持使用DefaultHashMapSize
等于 3840 创建或修改任何 table 后在线减小此参数。
日志记录和检查点. 以下[ndbd]
参数控制日志和检查点的行为。
table21.59 该 table 提供了 FragmentLogFileSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 16M |
Range | 4 M-1G |
Restart Type | IN |
设置此参数使您可以直接控制重做日志文件的大小。当 NDB Cluster 在高负载下运行并且在尝试打开新文件之前无法足够快地关闭片段日志文件(一次只能打开 2 个片段日志文件)时,这很有用。增加片段日志文件的大小可以使群集有更多时间才能打开每个新的片段日志文件。该参数的默认值为 16M。
有关片段日志文件的更多信息,请参见NoOfFragmentLogFiles的描述。
table21.60 该 table 提供 InitialNoOfOpenFiles 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | files |
Default | 27 |
Range | 20 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数设置要分配给打开文件的内部线程的初始数量。
默认值为 27.
table21.61 此 table 提供 InitFragmentLogFiles 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | [see values] |
Default | SPARSE |
Range | SPARSE, FULL |
Restart Type | IN |
默认情况下,片段日志文件是在执行数据节点的初始启动时稀疏创建的,也就是说,取决于所使用的 os 和文件系统,不一定所有字节都必须写入磁盘。但是,可以忽略此行为,并通过此参数强制写入所有字节,而与使用的平台和文件系统类型无关。 InitFragmentLogFiles取两个值之一:
-
SPARSE
。片段日志文件是稀疏创建的。这是默认值。FULL
。强制将片段日志文件的所有字节写入磁盘。
根据您的 os 和文件系统,设置InitFragmentLogFiles=FULL
可能有助于消除在写入 REDO 日志时出现的 I/O 错误。
table21.62 该 table 提供 EnablePartialLcp 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | boolean |
Default | true |
Range | ... |
Restart Type | N |
Added | NDB 7.6.4 |
当true
时,启用部分本地检查点:这意味着每个 LCP 仅记录整个数据库的一部分,以及包含自上一个 LCP 以来已更改的行的所有记录;如果没有行更改,则 LCP 仅更新 LCP 控制文件,而不更新任何数据文件。
如果禁用了EnablePartialLcp
(false
),则每个 LCP 仅使用单个文件并写入完整的检查点;这需要最少数量的 LCP 磁盘空间,但会增加每个 LCP 的写入负载。默认值已启用(true
)。可以通过RecoveryWork配置参数的设置来修改部分 LCPS 使用的空间比例。
有关用于完整和部分 LCP 的文件和目录的更多信息,请参见NDB 群集数据节点文件系统目录。
在 NDB 7.6.7 和更高版本中,将此参数设置为false
也会禁用自适应 LCP 控制机制使用的磁盘写入速度的计算。
table21.63 该 table 提供了 LcpScanProgressTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | second |
Default | 60 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
本地检查点片段扫描看门狗会定期检查在作为本地检查点的一部分执行的每个片段扫描中是否没有进度,如果在经过给定的时间后没有进度,则关闭节点。可以使用LcpScanProgressTimeout数据节点配置参数来设置此间隔,该参数设置在 LCP 片段扫描看门狗关闭节点之前,本地检查点可以停止的最长时间。
默认值为 60 秒(提供与以前版本的兼容性)。将此参数设置为 0 将完全禁用 LCP 片段扫描看门狗。
table21.64 该 table 提供了 MaxNoOfOpenFiles 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 0 |
Range | 20 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数设置了为打开的文件分配多少个内部线程的上限。 *任何需要更改此参数的情况均应报告为 bug *。
默认值为 0.但是,可以将此参数设置为的最小值为 20.
table21.65 该 table 提供了 MaxNoOfSavedMessages 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 25 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数设置在错误日志中写入的最大错误数,以及覆盖现有文件之前保留的最大跟踪文件数。不管什么原因,节点崩溃时都会生成跟踪文件。
默认值为 25,它将这些最大值设置为 25 条错误消息和 25 个跟踪文件。
table21.66 该 table 提供了 MaxLCPStartDelay 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | seconds |
Default | 0 |
Range | 0 - 600 |
Restart Type | N |
在并行数据节点恢复中,实际上只有 table 数据被并行复制和同步;元数据(例如字典和检查点信息)的同步以串行方式完成。另外,字典和检查点信息的恢复不能与执行本地检查点并行执行。这意味着,在同时启动或重新启动许多数据节点时,可能会迫使数据节点在执行本地检查点时 await,这可能导致更长的节点恢复时间。
可以在本地检查点中强制延迟,以允许更多(可能是所有)数据节点完成元数据同步。一旦每个数据节点的元数据同步完成,即使正在执行本地检查点,所有数据节点都可以并行恢复 table 数据。要强制这种延迟,请设置MaxLCPStartDelay,它确定群集在数据节点 continue 同步元数据时可以 await 开始本地检查点的秒数。应该在config.ini
文件的[ndbd default]
部分中设置此参数,以便对于所有数据节点都相同。最大值为 600;默认值为 0.
table21.67 该 table 提供了 NoOfFragmentLogFiles 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 16 |
Range | 3 -4294967039(0xFFFFFEFF) |
Restart Type | IN |
此参数设置该节点的 REDO 日志文件的数量,从而设置分配给 REDO 日志记录的空间量。由于 REDO 日志文件是环形组织的,因此不符合集合中的第一个和最后一个日志文件(有时分别称为“头”和“尾”日志文件)非常重要。当这些方法彼此过于接近时,由于缺少新日志记录的空间,该节点开始中止所有包含更新的事务。
自插入该日志记录以来,直到两个必需的本地检查点都已完成,才会删除REDO
日志记录。检查点频率由本章其他地方讨论的其自己的配置参数集确定。
默认参数值为 16,默认情况下意味着 16 组 4 组 16MB 文件,总计 1024MB。单个日志文件的大小可以使用FragmentLogFileSize参数进行配置。在需要大量更新的方案中,NoOfFragmentLogFiles的值可能需要设置为 300 甚至更高,以便为 REDO 日志提供足够的空间。
如果检查点很慢,并且对数据库的写操作太多,以至于日志文件已满,并且在不损害恢复的情况下无法剪切日志尾部,则所有更新事务都会中止,并显示内部错误代码 410(Out of log file space temporarily
)。这种情况一直持续到检查点完成并且日志尾可以向前移动为止。
Important
此参数不能“即时”更改。您必须使用--initial
重新启动节点。如果要为正在运行的集群中的所有数据节点更改此值,则可以使用滚动节点重新启动(在启动每个数据节点时使用--initial
)来进行更改。
table21.68 该 table 提供了 RecoveryWork 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | integer |
Default | 50 |
Range | 25 - 100 |
Restart Type | N |
版本(或更高版本) | NDB 7.6.5 |
类型或单位 | integer |
Default | 60 |
Range | 25 - 100 |
Restart Type | N |
Added | NDB 7.6.4 |
LCP 文件的存储开销百分比。该参数仅在EnablePartialLcp为 true 时才有效,即,仅在启用了局部局部检查点时才有效。较高的值 table 示:
-
每个 LCP 写入的记录更少,LCP 使用更多空间
- 重新启动期间需要做更多的工作
RecoveryWork
的值较低 table 示:
-
每个 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 MByte 的速度写入更改,则检查点需要以每秒约 26.7 MByte 的速度写入。
设置RecoveryWork
= 40 意味着仅需要 LCP 总大小的 1.4 倍(因此,还原阶段所需的时间减少了 10%到 15%。在这种情况下,检查点写入速率是更改速率的 3.5 倍。
NDB 源代码分发包括用于模拟 LCP 的测试程序。 lcp_simulator.cc
可以在storage/ndb/src/kernel/blocks/backup/
中找到。要在 Unix 平台上编译并运行它,请执行以下命令:
shell> gcc lcp_simulator.cc
shell> ./a.out
该程序除了stdio.h
之外没有其他依赖项,并且不需要连接到 NDB 群集或 MySQL 服务器。默认情况下,它模拟 300 个 LCP(三组,每组 100 个 LCP,依次由插入,更新和删除组成),并在每个 LCP 之后报告 LCP 的大小。您可以通过更改源中的recovery_work
,insert_work
和delete_work
的值并重新编译来更改模拟。有关更多信息,请参见程序源。
table21.69 该 table 提供了 InsertRecoveryWork 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.5 |
类型或单位 | integer |
Default | 40 |
Range | 0 - 70 |
Restart Type | N |
Added | NDB 7.6.5 |
用于插入的行的RecoveryWork百分比。较高的值将增加本地检查点期间的写入次数,并减小 LCP 的总大小。较低的值会减少 LCP 期间的写入次数,但会导致 LCP 使用更多空间,这意味着恢复需要更长的时间。该参数仅在EnablePartialLcp为 true 时才有效,也就是说,仅在启用了局部局部检查点时才有效。
table21.70 下 table 提供了 EnableRedoControl 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.7 |
类型或单位 | boolean |
Default | false |
Range | ... |
Restart Type | N |
Added | NDB 7.6.7 |
启用自适应检查点速度以控制重做日志的使用。设置为false
以禁用(默认值)。将EnablePartialLcp设置为false
也会禁用自适应计算。
启用后,EnableRedoControl
允许数据节点在将 LCP 写入磁盘的速率方面具有更大的灵 Active。更具体地说,启用此参数意味着可以采用更高的写入速率,从而可以完成 LCP 并更快地修整重做日志,从而减少了恢复时间和磁盘空间需求。此功能使数据节点可以更好地利用更高的 I/O 速率和现代固态存储设备和协议(例如使用非易失性内存 Express(NVMe)的固态驱动器(SSD))可用的更大带宽。
由于NDB
仍广泛部署在 I/O 或带宽相对于使用固态技术的系统(例如使用传统硬盘(HDD)的系统)受约束的系统上,因此该参数当前默认为false
(禁用)。在这样的设置中,EnableRedoControl
机制很容易导致 I/O 子系统饱和,从而增加了数据节点 Importing 和输出的 await 时间。特别是,这可能会导致 NDB 磁盘数据 table 出现问题,这些 table 具有 table 空间或日志文件组,它们与数据节点 LCP 和重做日志文件共享受约束的 IO 子系统;此类问题可能包括由于 GCP 停止错误而导致的节点或群集故障。
元数据对象. 下一组[ndbd]
参数定义元数据对象的池大小,用于定义索引,事件和集群之间复制所使用的最大属性,table,索引和触发器对象。
Note
这些仅充当集群的“建议”,而未指定的任何建议都将还原为所示的默认值。
table21.71 该 table 提供了 MaxNoOfAttributes 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 1000 |
Range | 32 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数设置可以在群集中定义的建议的最大属性数。像MaxNoOfTables一样,它并不是要用作硬上限。
(在较早的 NDB Cluster 版本中,此参数有时被视为某些操作的硬性限制.这会导致 NDB Cluster Replication 出现问题,当它可能创建的 table 数量多于可复制的 table 时,有时会导致混乱[或视情况而定]创建超过MaxNoOfAttributes
个属性.)
默认值为 1000,最小值为 32.最大值为 4294967039.每个属性在每个节点上消耗大约 200 字节的存储空间,原因是所有元数据都已在服务器上完全复制。
设置MaxNoOfAttributes时,重要的是要为将来可能要执行的任何ALTER TABLE语句做好准备。这是由于以下事实:在群集 table 上执行ALTER TABLE时,使用的属性数量是原始 table 中属性数量的 3 倍,并且一种好的做法是允许该数量增加一倍。例如,如果具有最大数量的属性(* greatest_number_of_attributes
*)的 NDB 群集 table 具有 100 个属性,则MaxNoOfAttributes的值的一个好的起点将是6 * greatest_number_of_attributes = 600
。
您还应该估计每个 table 的平均属性数,并将其乘以MaxNoOfTables。如果该值大于上一段中获得的值,则应改用较大的值。
假设您可以创建所有所需的 table 而没有任何问题,则还应该通过在配置参数后尝试实际的ALTER TABLE来验证此数目是否足够。如果这样做不成功,请将MaxNoOfAttributes增加MaxNoOfTables的另一个倍数,然后再次进行测试。
table21.72 该 table 提供了 MaxNoOfTables 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 128 |
Range | 8 - 20320 |
Restart Type | N |
table 对象分配给群集中的每个 table 和每个唯一的哈希索引。此参数为群集整体设置建议的最大 table 对象数。像MaxNoOfAttributes一样,它并不是要用作硬上限。
(在较早的 NDB Cluster 版本中,此参数有时被视为某些操作的硬性限制.这会导致 NDB Cluster Replication 出现问题,当它可能创建的 table 数量多于可复制的 table 时,有时会导致混乱[或视情况而定]创建多个MaxNoOfTables
个 table.)
对于每个具有BLOB数据类型的属性,一个额外的 table 用于存储大多数BLOB数据。定义 table 总数时,还必须考虑这些 table。
此参数的默认值为 128.最小值为 8,最大值为 20320.每个 table 对象每个节点大约消耗 20KB。
Note
MaxNoOfTables,MaxNoOfOrderedIndexes和MaxNoOfUniqueHashIndexes的总和不得超过232 - 2
(4294967294)。
table21.73 该 table 提供了 MaxNoOfOrderedIndexes 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 128 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
对于集群中的每个有序索引,将分配一个对象,该对象描述正在索引的内容及其存储段。默认情况下,这样定义的每个索引还定义一个有序索引。每个唯一索引和主键都具有有序索引和哈希索引。 MaxNoOfOrderedIndexes设置可以随时在系统中使用的有序索引总数。
此参数的默认值为 128.每个索引对象每个节点消耗大约 10KB 的数据。
Note
MaxNoOfTables,MaxNoOfOrderedIndexes和MaxNoOfUniqueHashIndexes的总和不得超过232 - 2
(4294967294)。
table21.74 该 table 提供了 MaxNoOfUniqueHashIndexes 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 64 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
对于不是主键的每个唯一索引,将分配一个特殊 table,该 table 将唯一键 Map 到索引 table 的主键。默认情况下,还为每个唯一索引定义了有序索引。为防止这种情况,在定义唯一索引时必须指定USING HASH
选项。
默认值为 64.每个索引每个节点大约消耗 15KB。
Note
MaxNoOfTables,MaxNoOfOrderedIndexes和MaxNoOfUniqueHashIndexes的总和不得超过232 - 2
(4294967294)。
table21.75 该 table 提供了 MaxNoOfTriggers 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 768 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
内部更新,插入和删除触发器分配给每个唯一的哈希索引。 (这意味着将为每个唯一的哈希索引创建三个触发器.)但是,有序索引仅需要单个触发器对象。备份还为群集中的每个普通 table 使用三个触发器对象。
群集之间的复制还利用内部触发器。
此参数设置集群中触发器对象的最大数量。
默认值为 768.
table21.76 该 table 提供了 MaxNoOfSubscriptions 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
NDB 群集中的每个NDBtable 都需要在 NDB 内核中进行预订。对于某些 NDB API 应用程序,可能有必要或希望更改此参数。但是,对于正常使用 MySQL 服务器作为 SQL 节点的情况,则不需要这样做。
MaxNoOfSubscriptions的默认值为 0,它等于MaxNoOfTables。每个订阅占用 108 个字节。
table21.77 该 table 提供了 MaxNoOfSubscribers 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
仅当使用 NDB 群集复制时,此参数才有意义。默认值为 0,它被视为2 * MaxNoOfTables
;也就是说,对于两个 MySQL 服务器(一个充当复制源,另一个充当副本),每个NDBtable 有一个预订。每个订户使用 16 个字节的内存。
当使用循环复制,多源复制以及涉及超过 2 个 MySQL 服务器的其他复制设置时,应将此参数增加为复制中包含的mysqld进程数(通常但不总是与复制数相同)。集群)。例如,如果您有一个使用三个 NDB 群集的循环复制设置,每个群集上附加一个mysqld,并且每个mysqld进程都充当源和副本,则应将MaxNoOfSubscribers设置为3 * MaxNoOfTables
。
有关更多信息,请参见第 21.6 节“ NDB 群集复制”。
table21.78 该 table 提供了 MaxNoOfConcurrentSubOperations 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 256 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数设置了群集中所有 API 节点一次可以执行的操作数的上限。默认值(256)对于正常操作是足够的,并且仅在存在大量 API 节点且每个 API 节点同时执行大量操作的情况下才可能需要调整默认值。
布尔值参数。数据节点的行为也受一组具有布尔值的[ndbd]
参数影响。通过将它们设置为等于1
或Y
可以将它们分别指定为TRUE
,通过将它们设置为0
或N
可以将它们指定为FALSE
。
table21.79 该 table 提供了 CompressedBackup 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | N |
启用此参数将导致备份文件被压缩。所使用的压缩等效于 gzip --fast ,并且可以节省数据节点上存储未压缩备份文件所需的 50%或更多空间。可以为单个数据节点或所有数据节点启用压缩备份(通过在config.ini
文件的[ndbd default]
部分中设置此参数)。
Important
您不能将压缩备份还原到运行不支持此功能的 MySQL 版本的群集。
默认值为0
(已禁用)。
table21.80 该 table 提供了 CompressedLCP 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | N |
将此参数设置为1
将导致本地检查点文件被压缩。使用的压缩等效于 gzip --fast ,并且可以节省数据节点上存储未压缩检查点文件所需的 50%或更多空间。可以为单个数据节点或所有数据节点启用压缩 LCP(通过在config.ini
文件的[ndbd default]
部分中设置此参数)。
Important
您无法将压缩的本地检查点还原到运行不支持此功能的 MySQL 版本的群集。
默认值为0
(已禁用)。
table21.81 该 table 提供了 CrashOnCorruptedTuple 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | true |
Range | true, false |
Restart Type | S |
启用此参数后,它会在遇到损坏的 Tuples 时强制关闭数据节点。在 NDB 7.5 中,默认情况下启用它。
table21.82 该 table 提供了无盘数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | true|false (1|0) |
Default | false |
Range | true, false |
Restart Type | IS |
可以将 NDB 群集 table 指定为无磁盘,这意味着这些 table 不会被检查点指向磁盘,并且不会发生任何日志记录。这样的 table 仅存在于主存储器中。使用无盘 table 的结果是,table 或这些 table 中的记录都不会崩溃。但是,以无盘模式运行时,可以在无盘计算机上运行ndbd。
Important
此功能使* entire *集群以无盘模式运行。
启用此功能后,将禁用群集联机备份。此外,无法部分启动群集。
默认情况下,禁用Diskless。
table21.83 该 table 提供了 LateAlloc 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 1 |
Range | 0 - 1 |
Restart Type | N |
构建与 Management 服务器的连接后,为此数据节点分配内存。默认启用。
table21.84 该 table 提供 LockPagesInMainMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 0 |
Range | 0 - 2 |
Restart Type | N |
对于许多 os,包括 Solaris 和 Linux,可以将进程锁定在内存中,从而避免任何交换到磁盘的情况。这可以用来帮助确保群集的实时特性。
此参数采用整数值0
,1
或2
之一,其作用如下 table 所示:
-
0
:禁用锁定。这是默认值。-
1
:为进程分配内存后执行锁定。 -
2
:在分配进程内存之前执行锁定。
-
如果未将 os 配置为允许非特权用户锁定页面,则使用此参数的数据节点进程可能必须作为系统根目录运行。 (LockPagesInMainMemory使用mlockall
函数。从 Linux 内核 2.6.9 开始,无特权的用户可以按max locked memory
的限制锁定内存。有关更多信息,请参见 ulimit -l 和http://linux.die.net/man/2/mlock)。
Note
在较早的 NDB Cluster 版本中,此参数是布尔值。默认设置为0
或false
,并且已禁用锁定。 1
或true
在分配其内存后启用了进程锁定。 NDB 群集 7.5 将此参数的值视为true
或false
作为错误。
Important
从glibc
2.10 开始,glibc
使用每个线程的竞技场来减少共享池上的锁争用,这会消耗实际内存。通常,数据节点进程不需要每个线程的竞技场,因为它在启动后不会执行任何内存分配。 (分配器的这种差异似乎不会显着影响性能.)
glibc
行为旨在通过MALLOC_ARENA_MAX
环境变量进行配置,但是glibc
2.16 之前的此机制中的错误 table 示不能将此变量设置为小于 8,从而无法回收浪费的内存。 (缺陷号 15907219;有关此问题的更多信息,另请参见http://sourceware.org/bugzilla/show_bug.cgi?id=13137。)
解决此问题的一种可能的方法是使用LD_PRELOAD
环境变量来预加载jemalloc
内存分配库,以代替glibc
提供的库。
table21.85 该 table 提供了 ODirect 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | N |
启用此参数会导致NDB尝试对 LCP,备份和重做日志使用O_DIRECT
写操作,这通常会降低 kswapd **和 CPU 使用率。在 Linux 上使用 NDB 群集时,如果使用 2.6 或更高版本的内核,请启用ODirect。
默认情况下,禁用ODirect。
table21.86 该 table 提供了 ODirectSyncFlag 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | N |
Added | NDB 7.6.4 |
启用此参数后,将执行重做日志写操作,以使每个完成的文件系统写操作都作为对fsync
的调用来处理。如果至少满足以下条件之一,则忽略此参数的设置:
-
ODirect未启用。
InitFragmentLogFiles
设置为SPARSE
。
默认禁用。
table21.87 该 table 提供了 RestartOnErrorInsert 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | error code |
Default | 2 |
Range | 0 - 4 |
Restart Type | N |
仅当构建调试版本时才可以使用此功能,在调试版本中,可以在测试的一部分中在执行各个代码块时插入错误。
默认情况下禁用此功能。
table21.88 该 table 提供 StopOnError 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | 1 |
Range | 0, 1 |
Restart Type | N |
此参数指定遇到错误情况时是退出数据节点进程还是执行自动重启。
此参数的默认值为 1;默认值为 1.这意味着默认情况下,错误会导致数据节点进程停止。
当遇到错误并且StopOnError
为 0 时,数据节点进程将重新启动。
在 NDB Cluster 7.5.5 之前,如果数据节点进程以不受控制的方式退出(例如,由于在执行查询时对数据节点进程执行kill -9或出现分段错误),并且StopOnError
设置为 0 ,angel 进程尝试以与以前启动时完全相同的方式重新启动它-即,使用与上次启动节点时相同的启动选项。因此,如果数据节点进程最初是使用--initial选项启动的,那么它也将通过--initial
重新启动。这意味着,在这种情况下,如果故障在很短的间隔内出现在足够数量的数据节点上,则效果与您执行了整个集群的初始重新启动一样,导致所有数据丢失。 NDB 群集 7.5.5 和更高版本的 NDB 7.5 版中已解决此问题(错误#83510,错误#24945638)。
MySQL Cluster Manager 的用户应注意,当StopOnError
等于 1 时,这将防止 MySQL Cluster Manager 代理在执行自己的重新启动和恢复后重新启动任何数据节点。有关更多信息,请参见在 Linux 上启动和停止代理。
table21.89 该 table 提供 UseShm 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.6 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | S |
Added | NDB 7.6.6 |
在此数据节点和也在此主机上运行的 API 节点之间使用共享内存连接。设置为 1 启用。
有关更多信息,请参见第 21.3.3.12 节“ NDB 群集共享内存连接”。
控制超时,时间间隔和磁盘分页
有许多[ndbd]
参数指定群集数据节点中各种操作之间的超时和间隔。大多数超时值以毫秒为单位指定。在适用的地方会提及任何 exceptions。
table21.90 该 table 提供了 TimeBetweenWatchDogCheck 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 6000 |
Range | 70 -4294967039(0xFFFFFEFF) |
Restart Type | N |
为了防止主线程在某个 Moment 陷入无限循环,“看门狗”线程会检查主线程。此参数指定两次检查之间的毫秒数。如果经过三次检查后进程仍保持相同状态,则看门狗线程将终止该进程。
出于实验目的或适应当地条件,可以轻松更改此参数。尽管似乎没有什么理由,但可以基于每个节点进行指定。
默认超时为 6000 毫秒(6 秒)。
table21.91 该 table 提供了 TimeBetweenWatchDogCheckInitial 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 6000 |
Range | 70 -4294967039(0xFFFFFEFF) |
Restart Type | N |
这与TimeBetweenWatchDogCheck参数相似,不同之处在于TimeBetweenWatchDogCheckInitial控制在分配内存的早期启动阶段中,在存储节点内部执行检查之间经过的时间。
默认超时为 6000 毫秒(6 秒)。
table21.92 该 table 提供了 StartPartialTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 30000 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数指定在调用集群初始化例程之前,集群 await 所有数据节点出现的时间。此超时用于避免集群的部分启动。
在执行群集的初始启动或初始重新启动时,将覆盖此参数。
默认值为 30000 毫秒(30 秒)。 0 禁用超时,在这种情况下,只有在所有节点都可用时群集才能启动。
table21.93 该 table 提供了 StartPartitionedTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 60000 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | milliseconds |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
如果集群在 awaitStartPartialTimeout毫秒后已准备好启动,但仍可能处于分区状态,则集群将 await 直到该超时也过去。如果StartPartitionedTimeout设置为 0,则群集将无限期 await(232-1 毫秒,或大约 49.71 天)。
在执行群集的初始启动或初始重新启动时,将覆盖此参数。
以 NDB 7.6.4 开头的默认值为 0;否则为 0.以前是 60000(60 秒)。
table21.94 该 table 提供了 StartFailureTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
如果数据节点在此参数指定的时间内未完成其启动 Sequences,则该节点启动失败。将此参数设置为 0(默认值)意味着不应用数据节点超时。
对于非零值,此参数以毫秒为单位。对于包含大量数据的数据节点,应增加此参数。例如,在数据节点包含数 GB 数据的情况下,执行节点重新启动可能需要长达 10 到 15 分钟(即 600000 到 1000000 毫秒)的时间。
table21.95 该 table 提供了 StartNoNodeGroupTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 15000 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
当数据节点配置有节点组= 65536时,被视为未分配给任何节点组。完成此操作后,群集将 awaitStartNoNodegroupTimeout
毫秒,然后将这些节点视为已将它们添加到传递给--nowait-nodes选项的列 table 中,然后启动。默认值为15000
(即 Management 服务器 await15 秒)。将此参数设置为0
意味着群集无限期 await。
StartNoNodegroupTimeout
对于集群中的所有数据节点必须相同;因此,您应该始终在config.ini
文件的[ndbd default]
部分中进行设置,而不是为单个数据节点进行设置。
有关更多信息,请参见第 21.5.7 节“在线添加 NDB 群集数据节点”。
table21.96 该 table 提供了 HeartbeatIntervalDbDb 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 5000 |
Range | 10 -4294967039(0xFFFFFEFF) |
Restart Type | N |
发现故障节点的主要方法之一是使用心跳。此参数说明发送心跳 signal 的频率以及期望接收它们的频率。心跳不能被禁用。
连续丢失四个心跳间隔后,该节点被宣布为死亡。因此,通过心跳机制发现故障的最大时间是心跳间隔的五倍。
默认的心跳间隔是 5000 毫秒(5 秒)。此参数不得大幅度更改,并且节点之间的更改范围不得太大。如果一个节点使用 5000 毫秒,而观看该节点的节点使用 1000 毫秒,则显然该节点将很快被宣告死亡。可以在在线软件升级期间更改此参数,但只能以较小的增量进行更改。
另请参见网络通讯和延迟以及ConnectCheckIntervalDelay配置参数的说明。
table21.97 该 table 提供了 HeartbeatIntervalDbApi 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 1500 |
Range | 100 -4294967039(0xFFFFFEFF) |
Restart Type | N |
每个数据节点将心跳 signal 发送到每个 MySQL 服务器(SQL 节点)以确保其保持联系。如果 MySQL 服务器未能及时发送心跳,则将其声明为“死”,在这种情况下,所有正在进行的事务都将完成,所有资源都将释放。在完成由先前的 MySQL 实例发起的所有活动之前,SQL 节点无法重新连接。此确定的三个心跳标准与HeartbeatIntervalDbDb所述相同。
默认间隔为 1500 毫秒(1.5 秒)。该间隔在各个数据节点之间可能会有所不同,因为每个数据节点独立于所有其他数据节点监视与其连接的 MySQL 服务器。
有关更多信息,请参见网络通讯和延迟。
table21.98 该 table 提供了 HeartbeatOrder 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 0 |
Range | 0 - 65535 |
Restart Type | S |
数据节点以循环方式相互发送心跳,由此每个数据节点监视前一个。如果给定的数据节点未检测到心跳,则此节点将圆圈中的前一个数据节点声明为“已死”(即群集不再可访问)。全局确定数据节点已死。换一种说法;一旦数据节点被声明为死节点,集群中的所有节点都将其视为死节点。
与其他成对节点之间的心跳相比,驻留在不同主机上的数据节点之间的心跳可能太慢(例如,由于心跳间隔很短或临时连接问题所致),从而使数据节点被宣布为死亡,即使该节点仍然可以充当群集的一部分。 。
在这种情况下,可能在数据节点之间传输心跳的 Sequences 会影响特定数据节点是否被宣告死亡。如果此声明不必要地发生,则可能反过来导致节点组的不必要丢失,从而导致集群故障。
考虑一个设置,其中在 2 台主机host1
和host2
上运行 4 个数据节点 A,B,C 和 D,并且这些数据节点组成 2 个节点组,如下 table 所示:
table21.99 在两个主机 host1,host2 上运行的四个数据节点 A,B,C,D;每个数据节点都属于两个节点组之一.
Node Group | 在host1 上运行的节点 |
在host2 上运行的节点 |
---|---|---|
*节点组 0 *: | Node A | Node B |
*节点组 1 *: | Node C | Node D |
假设心跳按 A-> B-> C-> D-> A 的 Sequences 传输。在这种情况下,主机之间心跳的丢失会导致节点 B 宣布节点 A 死亡,节点 C 宣布节点 B 死亡。这导致丢失节点组 0,因此群集发生故障。另一方面,如果传输 Sequences 为 A-> B-> D-> C-> A(并且所有其他条件如前所述),则丢失心跳将导致节点 A 和 D 被声明为死亡;在这种情况下,每个节点组都有一个幸存节点,并且群集也幸存。
HeartbeatOrder配置参数使心跳传输的 Sequences 可由用户配置。 HeartbeatOrder的默认值为零;允许在所有数据节点上使用默认值将导致心跳传输的 Sequences 由NDB
确定。如果使用此参数,则必须为集群中的每个数据节点将其设置为非零值(最大 65535),并且该值对于每个数据节点必须唯一;这会导致心跳传输从数据节点到数据节点,按照它们的HeartbeatOrder值从最低到最高的 Sequences 进行(然后直接从具有最高HeartbeatOrder的数据节点到具有最低值的数据节点,以完成循环) 。这些值不必是连续的。例如,要在前面概述的场景中强制心跳传输 SequencesA-> B-> D-> C-> A,可以设置HeartbeatOrder值,如下所示:
table21.100 HeartbeatOrder 值强制执行 A-> B-> D-> C-> A 的心跳过渡 Sequences.
Node | HeartbeatOrder 值 |
---|---|
A | 10 |
B | 20 |
C | 30 |
D | 25 |
若要使用此参数更改正在运行的 NDB 群集中的心跳传输 Sequences,必须首先在一个或多个全局配置(config.ini
)文件中为群集中的每个数据节点设置HeartbeatOrder。要使更改生效,您必须执行以下任一操作:
-
完全关闭并重新启动整个集群。
- 2 连续滚动重启群集。 在两次滚动重启中,所有节点必须以相同的 Sequences 重启。
您可以使用DUMP 908在数据节点日志中观察此参数的效果。
table21.101 该 table 提供了 ConnectCheckIntervalDelay 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数使数据节点之一心跳检查失败达 5 个间隔(最长HeartbeatIntervalDbDb毫秒)后,将启用数据节点之间的连接检查。
这样的数据节点在ConnectCheckIntervalDelay
毫秒的间隔内进一步无法响应,被认为是可疑的,并且在两个这样的间隔后被视为已死。这在具有已知延迟问题的设置中很有用。
此参数的默认值为 0(禁用)。
table21.102 该 table 提供了 TimeBetweenLocalCheckpoints 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | 4 字节字的数量,以 2 为底的对数 |
Default | 20 |
Range | 0 - 31 |
Restart Type | N |
此参数是一个 exception,因为它没有指定开始新的本地检查点之前要 await 的时间。相反,它用于确保在更新相对较少的集群中不执行本地检查点。在大多数具有较高更新率的集群中,很可能在前一个检查点完成后立即启动新的本地检查点。
自从先前的本地检查点开始以来执行的所有写操作的大小将被添加。此参数也很特别,因为它被指定为 4 字节字数的以 2 为底的对数,因此默认值 20table 示 4MB(4×220)的写操作,21table 示 8MB,依此类推。最大值为 31,相当于 8GB 的写操作。
集群中的所有写操作都被加在一起。将TimeBetweenLocalCheckpoints设置为 6 或更小意味着本地检查点将连续执行而不会暂停,而与群集的工作负载无关。
table21.103 该 table 提供了 TimeBetweenGlobalCheckpoints 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 2000 |
Range | 20 - 32000 |
Restart Type | N |
提交事务后,会将其提交到镜像数据所在的所有节点的主内存中。但是,事务日志记录不会作为提交的一部分刷新到磁盘。此行为背后的原因是,至少在两台自主主机上安全地执行事务应该符合合理的持久性标准。
确保即使是最坏的情况(集群完全崩溃)也必须得到正确处理,这一点也很重要。为了确保发生这种情况,将在给定时间间隔内发生的所有事务放入全局检查点,可以将其视为已刷新到磁盘的一组已提交事务。换句话说,作为提交过程的一部分,将事务放置在全局检查点组中。稍后,该组的日志记录将刷新到磁盘,然后将整个事务组安全地提交到集群中所有计算机上的磁盘。
此参数定义全局检查点之间的间隔。默认值为 2000 毫秒。
table21.104 该 table 提供了 TimeBetweenGlobalCheckpointsTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 120000 |
Range | 10 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数定义全局检查点之间的最小超时。默认值为 120000 毫秒。
table21.105 该 table 提供了 TimeBetweenEpochs 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 100 |
Range | 0 - 32000 |
Restart Type | N |
此参数定义 NDB 群集复制的同步时间间隔。默认值为 100 毫秒。
TimeBetweenEpochs是“微型 GCP”实施的一部分,可用于提高 NDB 群集复制的性能。
table21.106 该 table 提供了 TimeBetweenEpochsTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 0 |
Range | 0 - 256000 |
Restart Type | N |
此参数定义 NDB 群集复制的同步时期的超时。如果节点在此参数确定的时间内未能参加全局检查点,则该节点将关闭。默认值为 0;默认值为 0.换句话说,超时被禁用。
TimeBetweenEpochsTimeout是“微型 GCP”实施的一部分,可用于提高 NDB 群集复制的性能。
每当 GCP 保存时间超过 1 分钟或 GCP 提交时间超过 10 秒时,此参数的当前值和警告就会写入群集日志。
将此参数设置为零具有禁用由保存超时和/或提交超时引起的 GCP 停止的效果。此参数的最大可能值为 256000 毫秒。
table21.107 此 table 提供了 MaxBufferedEpochs 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | epochs |
Default | 100 |
Range | 0 - 100000 |
Restart Type | N |
订阅节点可能滞后的未处理时期数。超过此数字将导致滞后的订户断开连接。
对于大多数正常操作,默认值 100 就足够了。如果订阅节点的滞后时间足以导致断开连接,则通常是由于与进程或线程有关的网络或调度问题。 (在极少数情况下,问题可能是由于NDBClient 端中的错误引起的。)当历时较长时,最好将其值设置为低于默认值。
断开连接可防止 Client 端问题影响数据节点服务,用尽内存来缓冲数据并最终关闭。相反,断开连接(例如,二进制日志中的间隔事件)仅会影响 Client 端,从而迫使 Client 端重新连接或重新启动该过程。
table21.108 此 table 提供了 MaxBufferedEpochBytes 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 26214400 |
Range | 26214400 (0x01900000)-4294967039(0xFFFFFEFF) |
Restart Type | N |
此节点分配用于缓冲时期的字节总数。
table21.109 该 table 提供了 TimeBetweenInactiveTransactionAbortCheck 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 1000 |
Range | 1000 -4294967039(0xFFFFFEFF) |
Restart Type | N |
通过为此参数指定的每个时间间隔检查一次每个事务上的计时器来执行超时处理。因此,如果将此参数设置为 1000 毫秒,则将检查每个事务每秒是否超时。
默认值为 1000 毫秒(1 秒)。
table21.110 该 table 提供了 TransactionInactiveTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 4294967039 (0xFFFFFEFF) |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数说明在中止事务之前允许在同一事务中的两次操作之间经过的最长时间。
此参数的默认值为4G
(也是最大值)。对于需要确保没有事务保持锁定时间太长的实时数据库,应将此参数设置为一个较小的值。将其设置为 0 意味着应用程序永不超时。单位为毫秒。
table21.111 该 table 提供了 TransactionDeadlockDetectionTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 1200 |
Range | 50 -4294967039(0xFFFFFEFF) |
Restart Type | N |
当节点执行涉及事务的查询时,该节点在 continue 之前 await 集群中的其他节点响应。此参数设置事务可以花费在数据节点上执行的时间,即事务协调器 await 参与事务的每个数据节点执行请求的时间。
出于以下任何原因都可能导致响应失败:
-
该节点是“死”的
-
该操作已进入锁定队列
-
请求执行该操作的节点可能会严重过载。
-
此超时参数说明事务协调器在中止事务之前 await 另一个节点执行查询的时间,对于节点故障处理和死锁检测都很重要。
默认超时值为 1200 毫秒(1.2 秒)。
此参数的最小值为 50 毫秒。
table21.112 此 table 提供 DiskSyncSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 4M |
Range | 32 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
这是在将数据刷新到本地检查点文件之前要存储的最大字节数。这样做是为了防止写缓冲,写缓冲可能会严重影响性能。该参数不是旨在代替TimeBetweenLocalCheckpoints。
Note
启用ODirect时,无需设置DiskSyncSize;实际上,在这种情况下,其值只是被忽略了。
默认值为 4M(4 兆字节)。
table21.113 下 table 提供了 MaxDiskWriteSpeed 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 20M |
Range | 1 M-1024G |
Restart Type | S |
在此 NDB 群集中未进行任何重新启动(通过此数据节点或任何其他数据节点)的情况下,通过本地检查点和备份操作设置写入磁盘的最大速率,以每秒字节数为单位。
要设置此数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeedOwnRestart。要设置在其他数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeedOtherNodeRestart。可以通过设置MinDiskWriteSpeed来调整所有 LCP 和备份操作进行磁盘写入的最低速度。
table21.114 该 table 提供了 MaxDiskWriteSpeedOtherNodeRestart 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 50M |
Range | 1 M-1024G |
Restart Type | S |
当此 NDB 群集中的一个或多个数据节点重新启动时,设置本地检查点和备份操作以每秒最大字节数写入磁盘的最大速率,该节点除外。
要设置此数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeedOwnRestart。要设置没有数据节点重新启动群集中任何位置时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeed。可以通过设置MinDiskWriteSpeed来调整所有 LCP 和备份操作进行磁盘写入的最低速度。
table21.115 下 table 提供了 MaxDiskWriteSpeedOwnRestart 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 200M |
Range | 1 M-1024G |
Restart Type | S |
在此数据节点重新启动时,通过本地检查点和备份操作设置写入磁盘的最大速率,以每秒字节数为单位。
要设置在其他数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeedOtherNodeRestart。要设置没有数据节点重新启动群集中任何位置时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeed。可以通过设置MinDiskWriteSpeed来调整所有 LCP 和备份操作进行磁盘写入的最低速度。
table21.116 该 table 提供了 MinDiskWriteSpeed 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 10M |
Range | 1 M-1024G |
Restart Type | S |
设置通过本地检查点和备份操作写入磁盘的最小速率,以每秒字节数为单位。
可使用参数MaxDiskWriteSpeed,MaxDiskWriteSpeedOwnRestart和MaxDiskWriteSpeedOtherNodeRestart调整在各种条件下 LCP 和备份所允许的最大磁盘写入速率。有关更多信息,请参见这些参数的描述。
table21.117 此 table 提供 ArbitrationTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | milliseconds |
Default | 7500 |
Range | 10 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数指定数据节点 await 仲裁程序对仲裁消息的响应的时间。如果超出此范围,则认为网络已分裂。
默认值为 7500 毫秒(7.5 秒)。
table21.118 该 table 提供了仲裁数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | enumeration |
Default | Default |
Range | 默认,禁用,WaitExternal |
Restart Type | N |
Arbitration参数允许选择仲裁方案,该方案对应于此参数的三个可能值之一:
-
默认. 这使仲裁能够正常进行,这取决于 Management 和 API 节点的
ArbitrationRank
设置。这是默认值。-
已禁用. 在
config.ini
文件的[ndbd default]
部分中设置Arbitration = Disabled
可以完成与在所有 Management 和 API 节点上将ArbitrationRank
设置为 0 相同的任务。以这种方式设置Arbitration
时,将忽略任何ArbitrationRank
设置。 -
WaitExternal. Arbitration参数还使配置仲裁的方式成为可能,即群集 await 直到ArbitrationTimeout确定的时间过去之后,外部群集 Management 器应用程序才可以执行仲裁,而不是在内部进行仲裁。这可以通过在
config.ini
文件的[ndbd default]
部分中设置Arbitration = WaitExternal
来完成。为获得WaitExternal
设置的最佳效果,建议ArbitrationTimeout的长度是外部集群 Management 器执行仲裁所需间隔的 2 倍。
-
Important
仅在群集配置文件的[ndbd default]
部分中使用此参数。当将Arbitration设置为各个数据节点的不同值时,未指定群集的行为。
table21.119 此 table 提供 RestartSubscriberConnectTimeout 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | ms |
Default | 12000 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | S |
此参数确定数据节点 await 订阅 API 节点连接的时间。一旦超时到期,所有“丢失”的 API 节点都将从集群断开连接。要禁用此超时,请将RestartSubscriberConnectTimeout
设置为 0.
尽管以毫秒为单位指定了此参数,但超时本身被解析为倒数第二个秒。
缓冲和日志记录. 几个[ndbd]
配置参数使高级用户可以更好地控制节点进程使用的资源,并根据需要调整各种缓冲区大小。
在将日志记录写入磁盘时,这些缓冲区用作文件系统的前端。如果节点以无盘模式运行,则由于NDB存储引擎的文件系统抽象层“伪造”了磁盘写操作,因此可以将这些参数设置为其最小值,而不会受到影响。
table21.120 此 table 提供 UndoIndexBuffer 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 2M |
Range | 1 M-4294967039(0xFFFFFEFF) |
Restart Type | N |
在本地检查点期间使用 UNDO 索引缓冲区,该缓冲区的大小由此参数设置。 NDB存储引擎将基于检查点一致性的恢复方案与可操作的 REDO 日志结合使用。为了在不阻塞整个系统进行写入的情况下产生一致的检查点,请在执行本地检查点时执行 UNDO 日志记录。一次在单个 table 片段上激活 UNDO 日志记录。这种优化是可能的,因为 table 完全存储在主存储器中。
UNDO 索引缓冲区用于对主键哈希索引进行更新。插入和删除重新排列哈希索引; NDB 存储引擎将写入 UNDO 日志记录,这些记录将所有物理更改 Map 到索引页,以便可以在系统重新启动时撤消它们。它还会在本地检查点开始时记录每个片段的所有活动插入操作。
读取和更新设置的锁定位,并更新哈希索引条目中的 Headers。这些更改由页面写入算法处理,以确保这些操作不需要 UNDO 日志记录。
默认情况下,此缓冲区为 2MB。最小值为 1MB,对于大多数应用程序来说已足够。对于执行非常大或大量插入和删除以及大事务和大主键的应用程序,可能有必要增加此缓冲区的大小。如果此缓冲区太小,则 NDB 存储引擎将发出内部错误代码 677(Index UNDO buffers overloaded
)。
Important
在滚动重启期间减小此参数的值是不安全的。
table21.121 此 table 提供 UndoDataBuffer 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 16M |
Range | 1 M-4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数设置 UNDO 数据缓冲区的大小,该功能执行与 UNDO 索引缓冲区类似的功能,不同之处在于,UNDO 数据缓冲区用于数据存储而非索引存储。此缓冲区在片段的本地检查点阶段用于插入,删除和更新。
由于随着记录更多的操作,UNDO 日志条目趋向于增大,因此该缓冲区也大于其索引存储器对应的缓冲区,其默认值为 16MB。
对于某些应用程序,此内存量可能不必要地大。在这种情况下,可以将此大小减小到最小 1MB。
几乎没有必要增加此缓冲区的大小。如果有这种需要,最好检查磁盘是否可以实际处理数据库更新活动引起的负载。不能通过增加此缓冲区的大小来解决磁盘空间不足的问题。
如果此缓冲区太小且变得拥塞,则 NDB 存储引擎将发出内部错误代码 891(数据 UNDO 缓冲区超载)。
Important
在滚动重启期间减小此参数的值是不安全的。
table21.122 该 table 提供了 RedoBuffer 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 32M |
Range | 1 M-4294967039(0xFFFFFEFF) |
Restart Type | N |
还需要记录所有更新活动。 REDO 日志使每当系统重新启动时就可以重放这些更新。 NDB 恢复算法将数据的“模糊”检查点与 UNDO 日志一起使用,然后应用 REDO 日志来回放所有更改直至恢复点。
RedoBuffer
设置要写入 REDO 日志的缓冲区的大小。预设值为 32MB;最小值为 1MB。
如果此缓冲区太小,则NDB存储引擎将发出错误代码 1221(REDO 日志缓冲区超载)。因此,如果尝试降低RedoBuffer
的值作为群集配置在线更改的一部分,则应格外小心。
ndbmtd为每个 LDM 线程分配一个单独的缓冲区(请参阅ThreadConfig)。例如,对于 4 个 LDM 线程,一个ndbmtd数据节点实际上具有 4 个缓冲区,并为每个缓冲区分配RedoBuffer
个字节,总共4 * RedoBuffer
个字节。
table21.123 该 table 提供了 EventLogBufferSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 8192 |
Range | 0 -64K |
Restart Type | S |
控制用于数据节点内 NDB 日志事件的循环缓冲区的大小。
控制日志消息. 在 Management 集群中,能够控制针对stdout
的各种事件类型发送的日志消息的数量非常重要。对于每个事件类别,有 16 种可能的事件级别(编号从 0 到 15)。将给定事件类别的事件报告设置为 15 级意味着将该类别中的所有事件报告发送到stdout
;将其设置为 0table 示该类别中不会有任何事件报告。
默认情况下,仅将启动消息发送到stdout
,其余事件报告级别默认设置为 0.其原因是,这些消息也发送到了 Management 服务器的群集日志中。
可以为 ManagementClient 端设置一组类似的级别,以确定要在集群日志中记录的事件级别。
table21.124 此 table 提供 LogLevelStartup 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 1 |
Range | 0 - 15 |
Restart Type | N |
在流程启动期间生成的事件的报告级别。
默认级别为 1.
table21.125 此 table 提供 LogLevelShutdown 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
作为正常关闭节点的一部分而生成的事件的报告级别。
默认级别为 0.
table21.126 此 table 提供 LogLevelStatistic 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
统计事件的报告级别,例如主键读取次数,更新次数,插入次数,与缓冲区使用情况有关的信息等。
默认级别为 0.
table21.127 此 table 提供 LogLevelCheckpoint 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | log level |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
由本地和全局检查点生成的事件的报告级别。
默认级别为 0.
table21.128 此 table 提供 LogLevelNodeRestart 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
节点重新启动期间生成的事件的报告级别。
默认级别为 0.
table21.129 此 table 提供 LogLevelConnection 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
由群集节点之间的连接生成的事件的报告级别。
默认级别为 0.
table21.130 该 table 提供 LogLevelError 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
整个集群由错误和警告生成的事件的报告级别。这些错误不会导致任何节点故障,但是仍然值得报告。
默认级别为 0.
table21.131 此 table 提供 LogLevelCongestion 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | level |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
拥塞产生的事件的报告级别。这些错误不会导致节点故障,但是仍然值得报告。
默认级别为 0.
table21.132 此 table 提供 LogLevelInfo 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0 - 15 |
Restart Type | N |
事件的报告级别,以获取有关集群一般状态的信息。
默认级别为 0.
table21.133 该 table 提供了 MemReportFrequency 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数控制在集群日志中记录数据节点内存使用情况报告的频率;它是一个整数值,table 示两次报告之间的秒数。
每个数据节点的数据内存和索引内存使用情况分别记录为在config.ini
文件中设置的DataMemory和(NDB 7.5 及更早版本)IndexMemory的百分比和 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%)时才记录内存报告,如第 21.5.3.2 节“ NDB 群集日志事件”中的统计事件讨论中所述。
table21.134 此 table 提供 StartupStatusReportFrequency 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | seconds |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
当数据节点以--initial启动时,它将在启动阶段 4(请参阅第 21.5.4 节“ NDB 群集启动阶段的摘要”)中初始化重做日志文件。如果为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
在开始阶段 4 期间,这些报告每StartupStatusReportFrequency秒记录一次。如果StartupStatusReportFrequency为 0(默认值),则仅在重做日志文件初始化过程的开始和完成时才将报告写入群集日志。
数据节点调试参数
以下参数旨在在数据节点的测试或调试期间使用,而不在 Producing 使用。
table21.135 该 table 提供了 DictTrace 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | undefined |
Range | 0 - 100 |
Restart Type | N |
对于使用DictTrace
创建和删除 table 所生成的事件,可能会导致跟踪记录。此参数仅在调试 NDB 内核代码时有用。 DictTrace
取一个整数值。在 NDB 7.5.2 之前,仅支持 0(默认-无日志记录)和 1(启用日志记录)。在 NDB 7.5.2 和更高版本中,将此参数设置为 2 将启用对其他DBDICT
调试输出的日志记录(错误#20368450)。
table21.136 此 table 提供了 WatchDogImmediateKill 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.6.7 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | S |
Added | NDB 7.6.7 |
在 NDB 7.6.7 和更高版本中,只要启用WatchdogImmediateKill
数据节点配置参数,就可以在监视程序出现问题时立即杀死线程。仅在调试或疑难解答时才应使用此参数,以获取准确报告执行停止瞬间发生的情况的跟踪文件。
备份参数. 本节讨论的[ndbd]
参数定义为执行在线备份预留的内存缓冲区。
table21.137 此 table 提供了 BackupDataBufferSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 16M |
Range | 2 M-4294967039(0xFFFFFEFF) |
Restart Type | N |
版本(或更高版本) | NDB 7.5.1 |
类型或单位 | bytes |
Default | 16M |
Range | 512 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | NDB 7.6.4 |
在创建备份时,有两个缓冲区用于将数据发送到磁盘。备份数据缓冲区用于填充通过扫描节点 table 记录的数据。一旦此缓冲区已填充到指定为BackupWriteSize的级别,页面就会发送到磁盘。在将数据刷新到磁盘时,备份过程可以 continue 填充该缓冲区,直到空间用完为止。发生这种情况时,备份过程将暂停扫描并 await,直到某些磁盘写操作已完成释放内存,以便扫描可以 continue 进行。
此参数的默认值为 16MB。在 NDB 7.5.1 中,最小值从 2M 更改为 512K。 (缺陷号 22749509)
table21.138 该 table 提供了 BackupDiskWriteSpeedPct 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | percent |
Default | 50 |
Range | 0 - 90 |
Restart Type | N |
在正常操作期间,数据节点尝试使用于本地检查点和备份的磁盘写入速度最大化,同时保持在MinDiskWriteSpeed和MaxDiskWriteSpeed设置的范围内。磁盘写限制使每个 LDM 线程在总预算中享有相等的份额。这允许并行 LCP 发生而不会超出磁盘 I/O 预算。由于备份仅由一个 LDM 线程执行,因此有效地导致了预算削减,从而导致更长的备份完成时间,并且-如果更改率足够高,则当备份日志缓冲区的填充率为时,将无法完成备份。高于可达到的写入率。
可以通过使用BackupDiskWriteSpeedPct
配置参数来解决此问题,该参数的取值范围为 0-90(含 0)(包括 90),该值解释为在共享剩余预算之前保留的节点最大写入速率预算的百分比 LCP 的 LDM 线程之间。运行备份的 LDM 线程接收备份的整个写入速率预算,以及其(减少的)本地检查点写入速率预算的份额。 (这使磁盘写入速率预算的行为类似于在 NDB Cluster 7.3 及更早版本中的处理方式.)
此参数的默认值为 50(解释为 50%)。
table21.139 该 table 提供了 BackupLogBufferSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 16M |
Range | 2 M-4294967039(0xFFFFFEFF) |
Restart Type | N |
备份日志缓冲区的功能与备份数据缓冲区相似,不同之处在于,备份日志缓冲区用于生成备份执行期间所有 table 写入的日志。写入这些页面与备份数据缓冲区的原理相同,不同之处在于,当备份日志缓冲区中没有更多空间时,备份将失败。因此,备份日志缓冲区的大小必须足够大,以处理进行备份时由写活动引起的负载。参见第 21.5.8.3 节“ NDB 群集备份的配置”。
对于大多数应用程序,此参数的默认值应足够。实际上,备份失败是由于磁盘写入速度不足而引起的,而不是备份日志缓冲区已满。如果未为磁盘子系统配置应用程序引起的写负载,则群集不太可能执行所需的操作。
最好以这样的方式配置群集节点,使处理器成为瓶颈,而不是磁盘或网络连接。
此参数的默认值为 16MB。
table21.140 该 table 提供了 BackupMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 32M |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | 是(在 NDB 7.4 中) |
不建议使用此参数,并且可以在以后的 NDB Cluster 版本中将其删除。为此所做的任何设置都将被忽略。
table21.141 此 table 提供了 BackupReportFrequency 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | seconds |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数控制在备份过程中在 ManagementClient 端中发布备份状态报告的频率,以及将这些报告写入集群日志的频率(已配置的集群事件日志已配置为允许该行为,请参见记录和检查点)。 BackupReportFrequencytable 示两次备份状态报告之间的时间(以秒为单位)。
默认值为 0.
table21.142 此 table 提供了 BackupWriteSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 256K |
Range | 32 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | NDB 7.6.4 |
此参数指定备份日志和备份数据缓冲区写入磁盘的消息的默认大小。
此参数的默认值为 256KB。
table21.143 该 table 提供了 BackupMaxWriteSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 1M |
Range | 256 K-4294967039(0xFFFFFEFF) |
Restart Type | N |
Deprecated | NDB 7.6.4 |
此参数指定备份日志和备份数据缓冲区写入磁盘的消息的最大大小。
此参数的默认值为 1MB。
Note
备份文件的位置由BackupDataDir数据节点配置参数确定。
其他要求. 当指定这些参数时,以下关系必须成立。否则,数据节点将无法启动。
-
BackupDataBufferSize >= BackupWriteSize + 188KB
-
BackupLogBufferSize >= BackupWriteSize + 16KB
-
BackupMaxWriteSize >= BackupWriteSize
NDB 群集实时性能参数
本节中讨论的[ndbd]
参数用于调度和锁定 multiprocessing 器数据节点主机上特定 CPU 的线程。
Note
要使用这些参数,数据节点进程必须以系统根用户身份运行。
table21.144 此 table 提供 BuildIndexThreads 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 0 |
Range | 0 - 128 |
Restart Type | S |
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | numeric |
Default | 128 |
Range | 0 - 128 |
Restart Type | S |
此参数确定在系统或节点启动期间以及在运行ndb_restore --rebuild-indexes时重建有序索引时要创建的线程数。仅当每个数据节点的 table 有多个片段时(例如,当COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_LDM_X_2"
与CREATE TABLE一起使用时)才支持该功能。
将此参数设置为 0(默认值)将禁用多线程构建有序索引。
通过将TwoPassInitialNodeRestartCopy数据节点配置参数设置为TRUE
,可以在数据节点初始重新启动期间启用多线程构建。
table21.145 下 table 提供了 LockExecuteThreadToCPU 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | CPU ID 集 |
Default | 0 |
Range | ... |
Restart Type | N |
与ndbd一起使用时,此参数(现在为字符串)指定分配给处理NDBCLUSTER执行线程的 CPU 的 ID。与ndbmtd一起使用时,此参数的值是分配给处理执行线程的 CPU ID 的逗号分隔列 table。列 table 中的每个 CPU ID 都应为 0 到 65535(含)之间的整数。
指定的 ID 数量应与MaxNoOfExecutionThreads确定的执行线程数量匹配。但是,不能保证在使用此参数时以任何给定 Sequences 将线程分配给 CPU。您可以使用ThreadConfig获得这种类型的更细粒度的控件。
LockExecuteThreadToCPU没有默认值。
table21.146 该 table 提供 LockMaintThreadsToCPU 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | CPU ID |
Default | 0 |
Range | 0 -64K |
Restart Type | N |
此参数指定分配给处理NDBCLUSTER个维护线程的 CPU 的 ID。
整数形式,取值范围是 0~65535. 没有默认值 。
table21.147 此 table 提供了 Numa 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 1 |
Range | ... |
Restart Type | N |
此参数确定是由 os 还是由数据节点进程控制非统一内存访问(NUMA),即数据节点使用ndbd还是ndbmtd。默认情况下,NDB
尝试在主机 os 提供 NUMA 支持的任何数据节点上使用交错式 NUMA 内存分配策略。
设置Numa = 0
意味着 datanode 进程本身不会尝试设置内存分配策略,而是允许 os 确定此行为,这可以通过单独的 numactl 工具进一步指导。也就是说,Numa = 0
产生系统默认行为,可以通过 numactl 对其进行自定义。对于许多 Linux 系统,系统默认行为是在分配时将套接字本地内存分配给任何给定的进程。使用ndbmtd时可能会出现问题;这是因为 nbdmtd 会在启动时分配所有内存,从而导致不平衡,从而为不同的套接字提供不同的访问速度,尤其是在将页面锁定在主内存中时。
设置Numa = 1
意味着数据节点进程使用libnuma
请求交错存储分配。 (这也可以在 os 级别使用 numactl 手动完成.)实际上,使用交错分配可以告诉数据节点进程忽略非均匀的内存访问,但不会尝试利用快速本地访问的任何优势。Memory;取而代之的是,数据节点进程尝试避免由于远程内存缓慢而导致的不平衡。如果不需要交错分配,请将Numa
设置为 0,以便可以在 os 级别上确定所需的行为。
Numa
配置参数仅在libnuma.so
可用的 Linux 系统上受支持。
table21.148 此 table 提供 RealtimeScheduler 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | N |
将此参数设置为 1 将启用数据节点线程的实时调度。
默认值为 0(禁用计划)。
table21.149 此 table 提供了 SchedulerExecutionTimer 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | µs |
Default | 50 |
Range | 0 - 11000 |
Restart Type | N |
此参数指定线程在发送之前在调度程序中执行的时间(以微秒为单位)。将其设置为 0 可最大程度地缩短响应时间。为了获得更高的吞吐量,您可以以更长的响应时间为代价来增加价值。
默认值为 50 微秒,我们的测试 table 明,在高负载情况下,吞吐量会略有增加,而不会严重延迟请求。
table21.150 该 table 提供了 SchedulerResponsiveness 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 5 |
Range | 0 - 10 |
Restart Type | S |
在NDB
调度程序中设置速度和吞吐量之间的平衡。该参数采用一个整数,其值在 0 到 10 之间(含 0 和 10),缺省值为 5.相对于吞吐量,较高的值可提供更好的响应时间。较低的值以较长的响应时间为代价提供了增加的吞吐量。
table21.151 此 table 提供了 SchedulerSpinTimer 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | µs |
Default | 0 |
Range | 0 - 500 |
Restart Type | N |
此参数指定睡眠前在调度程序中执行线程的时间(以微秒为单位)。
默认值为 0.
table21.152 此 table 提供 TwoPassInitialNodeRestartCopy 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | boolean |
Default | false |
Range | true, false |
Restart Type | N |
版本(或更高版本) | NDB 7.6.4 |
类型或单位 | boolean |
Default | true |
Range | true, false |
Restart Type | N |
通过将此配置参数设置为true
,可以为数据节点的初始重新启动启用有序索引的多线程构建,这可以在初始节点重新启动期间进行两次数据复制。从 NDB 7.6.4 开始,这是默认值(错误#26704312,错误#27109117)。
您还必须将BuildIndexThreads设置为非零值。
多线程配置参数(ndbmtd). ndbmtd默认作为单线程进程运行,并且必须使用两种方法之一配置为使用多线程,这两种方法都需要在config.ini
文件中设置配置参数。第一种方法只是为MaxNoOfExecutionThreads配置参数设置适当的值。第二种方法可以使用ThreadConfig为ndbmtd多线程设置更复杂的规则。接下来的几段提供了有关这些参数及其与多线程数据节点一起使用的信息。
table21.153 此 table 提供了 MaxNoOfExecutionThreads 多线程数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 2 |
Range | 2 - 72 |
Restart Type | IS |
此参数直接控制ndbmtd使用的执行线程数,最多为 72.尽管此参数在config.ini
文件的[ndbd]
或[ndbd default]
节中设置,但它是ndbmtd独有的,不适用于ndbd。
设置MaxNoOfExecutionThreads
设置每种类型的线程数,这由文件storage/ndb/src/kernel/vm/mt_thr_config.cpp
中的矩阵确定。下 table 显示了MaxNoOfExecutionThreads
可能值的线程数量。
table21.154 MaxNoOfExecutionThreads 值以及按线程类型(LQH,TC,发送,接收)对应的线程数.
MaxNoOfExecutionThreads 值 |
LDM Threads | TC Threads | Send Threads | Receive Threads |
---|---|---|---|---|
0 .. 3 | 1 | 0 | 0 | 1 |
4 .. 6 | 2 | 0 | 0 | 1 |
7 .. 8 | 4 | 0 | 0 | 1 |
9 | 4 | 2 | 0 | 1 |
10 | 4 | 2 | 1 | 1 |
11 | 4 | 3 | 1 | 1 |
12 | 6 | 2 | 1 | 1 |
13 | 6 | 3 | 1 | 1 |
14 | 6 | 3 | 1 | 2 |
15 | 6 | 3 | 2 | 2 |
16 | 8 | 3 | 1 | 2 |
17 | 8 | 4 | 1 | 2 |
18 | 8 | 4 | 2 | 2 |
19 | 8 | 5 | 2 | 2 |
20 | 10 | 4 | 2 | 2 |
21 | 10 | 5 | 2 | 2 |
22 | 10 | 5 | 2 | 3 |
23 | 10 | 6 | 2 | 3 |
24 | 12 | 5 | 2 | 3 |
25 | 12 | 6 | 2 | 3 |
26 | 12 | 6 | 3 | 3 |
27 | 12 | 7 | 3 | 3 |
28 | 12 | 7 | 3 | 4 |
29 | 12 | 8 | 3 | 4 |
30 | 12 | 8 | 4 | 4 |
31 | 12 | 9 | 4 | 4 |
32 | 16 | 8 | 3 | 3 |
33 | 16 | 8 | 3 | 4 |
34 | 16 | 8 | 4 | 4 |
35 | 16 | 9 | 4 | 4 |
36 | 16 | 10 | 4 | 4 |
37 | 16 | 10 | 4 | 5 |
38 | 16 | 11 | 4 | 5 |
39 | 16 | 11 | 5 | 5 |
40 | 20 | 10 | 4 | 4 |
41 | 20 | 10 | 4 | 5 |
42 | 20 | 11 | 4 | 5 |
43 | 20 | 11 | 5 | 5 |
44 | 20 | 12 | 5 | 5 |
45 | 20 | 12 | 5 | 6 |
46 | 20 | 13 | 5 | 6 |
47 | 20 | 13 | 6 | 6 |
48 | 24 | 12 | 5 | 5 |
49 | 24 | 12 | 5 | 6 |
50 | 24 | 13 | 5 | 6 |
51 | 24 | 13 | 6 | 6 |
52 | 24 | 14 | 6 | 6 |
53 | 24 | 14 | 6 | 7 |
54 | 24 | 15 | 6 | 7 |
55 | 24 | 15 | 7 | 7 |
56 | 24 | 16 | 7 | 7 |
57 | 24 | 16 | 7 | 8 |
58 | 24 | 17 | 7 | 8 |
59 | 24 | 17 | 8 | 8 |
60 | 24 | 18 | 8 | 8 |
61 | 24 | 18 | 8 | 9 |
62 | 24 | 19 | 8 | 9 |
63 | 24 | 19 | 9 | 9 |
64 | 32 | 16 | 7 | 7 |
65 | 32 | 16 | 7 | 8 |
66 | 32 | 17 | 7 | 8 |
67 | 32 | 17 | 8 | 8 |
68 | 32 | 18 | 8 | 8 |
69 | 32 | 18 | 8 | 9 |
70 | 32 | 19 | 8 | 9 |
71 | 32 | 20 | 8 | 9 |
72 | 32 | 20 | 8 | 10 |
总有一个 SUMA(复制)线程。
NoOfFragmentLogParts应该设置为等于ndbmtd使用的 LDM 线程数,这取决于此参数的设置。该比例不应大于 4:1;从 NDB 7.5.7 和 NDB 7.6.3 开始,明确禁止这种情况的配置。 (缺陷号 25333414)
LDM 线程的数量还决定了未显式分区的NDB
table 使用的分区数。这是 LDM 线程数乘以群集中数据节点数。 (如果在数据节点上使用ndbd而不是ndbmtd,则始终只有一个 LDM 线程;在这种情况下,自动创建的分区数仅等于数据节点的数目。有关更多信息,请参见第 21.1.2 节“ NDB 群集节点,节点组,副本和分区”。
如果磁盘页面缓冲区不够大,则在使用超过默认数量的 LDM 线程时为磁盘数据 table 添加大 table 空间可能会导致资源和 CPU 使用率问题。有关更多信息,请参见DiskPageBufferMemory配置参数的描述。
线程类型将在本节后面介绍(请参见ThreadConfig)。
将此参数设置在允许的值范围之外会导致 Management 服务器在启动时中止,并出现错误错误行* number
:参数 MaxNoOfExecutionThreads 的非法值 value
*。
对于MaxNoOfExecutionThreads
,在内部将NDB的值四舍五入为 0 或 1,因此将 2 视为此参数的默认值和最小值。
通常将MaxNoOfExecutionThreads
设置为等于可用的 CPU 线程数,并分配每种类型的线程数以适合典型的工作负载。它不会将特定线程分配给指定的 CPU。对于需要更改提供的设置或将线程绑定到 CPU 的情况,应改用ThreadConfig,它允许您将每个线程直接分配给所需的类型,CPU 或两者。
多线程数据节点进程始终至少产生以下列出的线程:
-
1 本地查询处理程序(LDM)线程
-
1 接收线程
-
1 订阅 Management 器(SUMA 或复制)线程
-
如果MaxNoOfExecutionThreads
值等于或小于 8,则不会创建 TC 线程,而是由主线程执行 TC 处理。
在 NDB 7.6 之前,更改 LDM 线程数始终要求系统重新启动,无论使用此参数还是ThreadConfig进行更改。在 NDB 7.6 和更高版本中,只要满足以下条件,就可以使用节点初始重启(* NI *)来进行更改:
-
如果更改后 LDM 线程的数量与以前相同,则仅需要简单的节点重新启动(滚动重新启动或* N *)即可实现更改。
- 否则(即,如果 LDM 线程数发生变化),只要满足以下两个条件,仍然可以使用节点初始重新启动(* NI *)来进行更改:
-
每个 LDM 线程最 multiprocessing8 个片段,并且
-
table 片段的总数是 LDM 线程数的整数倍。
在 NDB 7.6 之前,如果群集的IndexMemory使用率大于 50%,则要更改此值,需要重新启动群集。 (在这种情况下,建议最大使用 30_35%IndexMemory
.)否则,节点之间的资源使用和 LDM 线程分配不能达到平衡,这可能导致 LDM 线程未充分利用和过度利用,最终导致数据节点故障。在 NDB 7.6 和更高版本中,不需要进行初次重启来实现此参数的更改。
table21.155 该 table 提供了 NoOfFragmentLogParts 多线程数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 4 |
Range | 4, 6, 8, 10, 12, 16, 20, 24, 32 |
Restart Type | IN |
设置属于此ndbmtd的重做日志的日志文件组数。该参数的值应设置为等于MaxNoOfExecutionThreads的设置所确定的ndbmtd使用的 LDM 线程数。从 NDB 7.5.7 和 NDB 7.6.3 开始,每个 LDM 不允许使用超过 4 个重做日志部分的配置。 (缺陷号 25333414)
有关更多信息,请参见MaxNoOfExecutionThreads的描述。
table21.156 该 table 提供了 ThreadConfig 多线程数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | string |
Default | '' |
Range | ... |
Restart Type | IS |
此参数与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
即使列 table 中只有一个参数,也必须在参数列 table 周围加上花括号({
... }
)。
param
*(参数)指定以下任何或所有信息:
-
给定类型(
count
)的线程数。- 给定类型的线程将非排他地绑定到这组 CPU。这由
cpubind
或cpuset
之一确定。cpubind
使每个线程(非排他地)绑定到集合中的 CPU;cpuset
table 示每个线程(非排他性地)绑定到指定的 CPU 集合。
- 给定类型的线程将非排他地绑定到这组 CPU。这由
在 Solaris 上,您可以改为指定一组 CPU,给定类型的线程将专门与这些 CPU 绑定。 cpubind_exclusive
使每个线程专门绑定到集合中的 CPU; cpuset_exclsuive
table 示每个线程都专门绑定到指定的 CPU 集合。
单个配置中只能提供cpubind
,cpuset
,cpubind_exclusive
或cpuset_exclusive
之一。
spintime
确定线程进入睡眠之前旋转的 await 时间(以微秒为单位)。
spintime
的默认值是SchedulerSpinTimer数据节点配置参数的值。
spintime
不适用于 I/O 线程,看门狗或脱机索引构建线程,因此无法为这些线程类型设置。
realtime
可以设置为 0 或 1.如果设置为 1,则线程以实时优先级运行。这也意味着无法设置thread_prio
。
默认情况下,realtime
参数设置为RealtimeScheduler数据节点配置参数的值。
无法为离线索引构建线程设置realtime
。
- 通过将
nosend
设置为 1,可以防止main
,ldm
,rep
或tc
线程辅助发送线程。默认情况下,此参数为 0,并且不能与其他类型的线程一起使用。
nosend
已添加到 NDB 7.6.4 中。
thread_prio
是线程优先级,可以设置为 0 到 10,其中 10table 示最大优先级。默认值为 5.此参数的精确效果是特定于平台的,本节稍后将进行介绍。
无法为脱机索引构建线程设置线程优先级。
每个平台的 thread_prio 设置和效果. thread_prio
的实现在 Linux/FreeBSD,Solaris 和 Windows 之间有所不同。在下面的列 table 中,我们依次讨论了其对这些平台的影响:
-
- Linux 和 FreeBSD *:我们将
thread_prio
Map 到要提供给nice
系统调用的值。由于某个流程的较低的值 table 示较高的流程优先级,因此增加thread_prio
具有降低nice
值的效果。
- Linux 和 FreeBSD *:我们将
table21.157 在 Linux 和 FreeBSD 上 thread_prio 到漂亮值的 Map
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 |
某些 os 可能会提供最高 20 的进程友好级别,但是并非所有目标版本都支持此级别。因此,我们选择 19 作为可以设置的最大nice
值。
-
- Solaris *:在 Solaris 上设置
thread_prio
可设置 Solaris FX 优先级,其 Map 如下 table 所示:
- Solaris *:在 Solaris 上设置
table21.158 在 Solaris 上 thread_prio 到 FX 优先级的 Map
thread_prio 值 |
Solaris FX 优先级 |
---|---|
0 | 15 |
1 | 20 |
2 | 25 |
3 | 30 |
4 | 35 |
5 | 40 |
6 | 45 |
7 | 50 |
8 | 55 |
9 | 59 |
10 | 60 |
thread_prio
设置 9 在 Solaris 上 Map 到特殊的 FX 优先级值 59,这意味着 os 还尝试强制线程在其自己的 CPU 内核上单独运行。
-
- Windows *:我们将
thread_prio
Map 到传递给 Windows APISetThreadPriority()
函数的 Windows 线程优先级值。下 table 中显示了此 Map:
- Windows *:我们将
table21.159 thread_prio 到 Windows 线程优先级的 Map
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
*属性 table 示 NDB 线程类型。以下列 table 提供了支持的线程类型以及每个线程允许的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%,则需要重新启动集群;否则,请重新启动集群。在这种情况下,建议最多使用 30-35%的IndexMemory
。否则,无法在节点之间平衡内存和 LDM 线程的分配,最终可能导致数据节点故障。
如果DiskPageBufferMemory不够大,则在使用大于默认数量的 LDM 时为磁盘数据 table 添加较大的 table 空间(数百 GB 或更多)可能会导致资源和 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
:数据字典和事务协调器(DBDIH
和DBTC
内核块),提供模式 Management。这始终由单个专用线程处理。
范围:仅 1.
recv
:接收线程(CMVMI
内核块)。每个接收线程处理一个或多个套接字以与 NDB 群集中的其他节点通信,每个节点一个套接字。 NDB 群集支持多个接收线程;最多是 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_prio
,realtime
和spintime
值。另外,对于这种类型的线程,count
被忽略。
如果未指定idxbld
,则默认行为如下:
-
如果还没有绑定 I/O 线程,则不绑定脱机索引构建线程,并且这些线程使用任何可用的核心。
- 如果绑定了 I/O 线程,则脱机索引构建线程将绑定到整个绑定线程集,原因是这些线程不应该执行其他任何任务。
范围:0-1.
此线程类型是在 NDB 7.6.4 中添加的。 (缺陷#25835748,错误#26928111)
在 NDB 7.6 之前,更改ThreadCOnfig
要求系统重新启动。在 NDB 7.6 和更高版本中,可以在某些情况下放宽此要求:
-
如果更改后 LDM 线程的数量与以前相同,则仅需要简单的节点重新启动(滚动重新启动或* N *)即可实现更改。
-
否则(即,如果 LDM 线程数发生变化),只要满足以下两个条件,仍然可以使用节点初始重新启动(* NI *)来进行更改:
-
每个 LDM 线程最 multiprocessing8 个片段,并且
-
table 片段的总数是 LDM 线程数的整数倍。
在任何其他情况下,都需要系统重新启动才能更改此参数。
NDB 7.6.4 和更高版本可以通过以下两个条件来区分线程类型:
-
该线程是否为执行线程。
main
,ldm
,recv
,rep
,tc
和send
类型的线程是执行线程;io
,watchdog
和idxbld
线程不被视为执行线程。 -
给给定任务的线程分配是永久的还是临时的。当前,除
idxbld
之外的所有线程类型都被视为永久线程;idxbld
个线程被视为临时线程。
Simple examples:
# 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}
通常,在为数据节点主机配置线程使用量时,需要为 os 和其他任务预留一个或多个 CPU。因此,对于具有 24 个 CPU 的主机,您可能希望使用 20 个 CPU 线程(将 4 个留给其他用途),8 个 LDM 线程,4 个 TC 线程(LDM 线程数的一半),3 个发送线程,3 个接收线程和 1 个线程,分别用于模式 Management,异步复制和 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}
在大多数情况下,应该可以将主(模式 Management)线程和 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.main 和 rep 线程可以重用这些 CPU。
此示例显示了如何为具有超线程的 24-CPU 主机设置ThreadConfig
和NoOfFragmentLogParts
,而使 CPU 10、11、22 和 23 可以用于 os 功能和中断:
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
的设置。其中的前两个演示了为idxbld
定义的 CPU 集如何与为其他(永久)线程类型指定的 CPU 集重叠,第一个使用cpuset
,第二个使用cpubind
:
ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
io={cpubind=8},idxbld={cpuset=1-8}
ThreadConfig=main,ldm={count=1,cpubind=1},idxbld={count=1,cpubind=1}
下一个示例为 I/O 线程指定一个 CPU,但为索引构建线程指定一个 CPU:
ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, \
io={cpubind=8}
由于刚刚显示的ThreadConfig
设置将线程锁定到编号为 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 是隔离的,并且不受中断的影响,也不会被 os 安排用于其他任务。在许多 Linux 系统上,您可以通过将/etc/sysconfig/irqbalance
中的IRQBALANCE_BANNED_CPUS
设置为0xFFFFF0
并使用grub.conf
中的isolcpus
引导选项来实现。有关特定信息,请参阅您的 os 或平台文档。
table21.160 此 table 提供了 DiskPageBufferEntries 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | 32K pages |
Default | 10 |
Range | 1 - 1000 |
Restart Type | N |
这是要分配的页面条目(页面引用)的数量。在DiskPageBufferMemory中指定为 32K 页数。在大多数情况下,默认值就足够了,但是如果在磁盘数据 table 上处理非常大的事务时遇到问题,则可能需要增加此参数的值。每个页面条目大约需要 100 个字节。
table21.161 此 table 提供了 DiskPageBufferMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 64M |
Range | 4 M-1T |
Restart Type | N |
这确定了用于在磁盘上缓存页面的空间量,并在config.ini
文件的[ndbd]
或[ndbd default]
部分中进行了设置。以字节为单位。每页占用 32 KB。这意味着 NDB 群集磁盘数据存储始终使用* N
* * 32 KB 内存,其中* N
*是一些非负整数。
此参数的默认值为64M
(2000 页,每页 32 KB)。
如果将DiskPageBufferMemory
的值设置得太低,并且使用的ThreadConfig中的 LDM 线程数量超过默认数量(例如{ldm=6...}
),则在尝试向基于磁盘的磁盘中添加大型(例如 500G)数据文件时可能会出现问题。 NDB
table,其中该过程无限长地占用了 CPU 内核之一。
这是由于以下事实:作为向 table 空间添加数据文件的一部分,扩展页被锁定在额外的 PGMAN 工作线程中的内存中,以便快速访问元数据。添加大文件时,此工作程序没有足够的内存来存储所有数据文件元数据。在这种情况下,您应该增加DiskPageBufferMemory
或添加较小的 table 空间文件。您可能还需要调整DiskPageBufferEntries。
您可以查询ndbinfo.diskpagebuffertable,以帮助确定是否应增加此参数的值,以最大程度地减少不必要的磁盘搜寻。有关更多信息,请参见节 21.5.14.20,“ ndbinfo diskpagebuffertable”。
table21.162 此 table 提供了 SharedGlobalMemory 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 128M |
Range | 0 -64 吨 |
Restart Type | N |
此参数确定用于日志缓冲区,磁盘操作(例如页面请求和 await 队列)以及 table 空间,日志文件组,UNDO
文件和数据文件的元数据的内存量。共享的全局内存池还提供用于满足创建日志文件组和更改日志文件组语句使用的UNDO_BUFFER_SIZE
选项的内存要求的内存,包括InitialLogFileGroup数据节点配置参数的设置对此选项隐含的任何默认值。可以在config.ini
配置文件的[ndbd]
或[ndbd default]
部分中设置SharedGlobalMemory
,以字节为单位。
默认值为128M
。
table21.163 该 table 提供了 DiskIOThreadPool 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | threads |
Default | 2 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数确定用于磁盘数据文件访问的未绑定线程数。在引入DiskIOThreadPool之前,每个磁盘数据文件都恰好产生了一个线程,这可能会导致性能问题,尤其是在使用非常大的数据文件时。例如,使用DiskIOThreadPool可以使用多个并行工作的线程访问单个大数据文件。
此参数仅适用于磁盘数据 I/O 线程。
此参数的最佳值取决于您的硬件和配置,并包括以下因素:
-
磁盘数据文件的物理分发. 通过将数据文件,撤消日志文件和数据节点文件系统放置在单独的物理磁盘上,可以获得更好的性能。如果对其中的部分或全部文件集执行此操作,则可以将DiskIOThreadPool设置为更高,以使单独的线程可以处理每个磁盘上的文件。
- 磁盘性能和类型. 磁盘数据文件处理可容纳的线程数还取决于磁盘的速度和吞吐量。更快的磁盘和更高的吞吐量允许更多的磁盘 I/O 线程。我们的测试结果 table 明,固态磁盘驱动器可以处理的磁盘 I/O 线程比常规磁盘多得多,因此DiskIOThreadPool的值更高。
此参数的默认值为 2.
table21.164 该 table 提供了 FileSystemPathDD 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | filename |
Default | FileSystemPath |
Range | ... |
Restart Type | IN |
如果指定了此参数,则将 NDB 群集磁盘数据数据文件和撤消日志文件放置在指示的目录中。可以通过指定FileSystemPathDataFiles,FileSystemPathUndoFiles或两者的值来覆盖数据文件和/或撤消日志文件,如针对这些参数所述。也可以通过在CREATE TABLESPACE或ALTER TABLESPACE语句的ADD DATAFILE
子句中指定路径来覆盖数据文件,并通过在创建日志文件组或更改日志文件组语句的ADD UNDOFILE
子句中指定路径来撤消日志文件。如果未指定FileSystemPathDD,则使用FileSystemPath。
如果为给定的数据节点指定了FileSystemPathDD目录(包括在config.ini
文件的[ndbd default]
部分中指定了参数的情况),则以--initial
开头该数据节点将导致删除目录中的所有文件。
table21.165 该 table 提供了 FileSystemPathDataFiles 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | filename |
Default | FileSystemPathDD |
Range | ... |
Restart Type | IN |
如果指定了此参数,则将 NDB 群集磁盘数据数据文件放置在指示的目录中。这将覆盖为FileSystemPathDD设置的任何值。通过在用于创建该数据文件的CREATE TABLESPACE或ALTER TABLESPACE语句的ADD DATAFILE
子句中指定路径,可以为给定的数据文件覆盖此参数。如果未指定FileSystemPathDataFiles,则使用FileSystemPathDD(或FileSystemPath,如果尚未设置FileSystemPathDD)。
如果为给定的数据节点指定了FileSystemPathDataFiles目录(包括在config.ini
文件的[ndbd default]
部分中指定了参数的情况),则以--initial
开头该数据节点将导致删除目录中的所有文件。
table21.166 该 table 提供了 FileSystemPathUndoFiles 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | filename |
Default | FileSystemPathDD |
Range | ... |
Restart Type | IN |
如果指定了此参数,则将 NDB 群集磁盘数据撤消日志文件放置在指示的目录中。这将覆盖为FileSystemPathDD设置的任何值。通过在用于创建该数据文件的创建日志文件组或更改日志文件组语句的ADD UNDO
子句中指定路径,可以为给定的数据文件覆盖此参数。如果未指定FileSystemPathUndoFiles,则使用FileSystemPathDD(或FileSystemPath,如果尚未设置FileSystemPathDD)。
如果为给定的数据节点指定了FileSystemPathUndoFiles目录(包括在config.ini
文件的[ndbd default]
部分中指定了参数的情况),则以--initial
开头该数据节点将导致删除目录中的所有文件。
有关更多信息,请参见第 21.5.10.1 节“ NDB 群集磁盘数据对象”。
table21.167 此 table 提供 InitialLogFileGroup 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | string |
Default | [see documentation] |
Range | ... |
Restart Type | S |
此参数可用于指定在执行群集的初始启动时创建的日志文件组。如下所示指定了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
对应一个撤消日志文件,并且必须在 file-specification-list
*中至少指定一个。撤消日志文件将根据为FileSystemPath,FileSystemPathDD和FileSystemPathUndoFiles设置的任何值放置,就像它们是根据创建日志文件组或更改日志文件组语句创建的。
考虑以下:
InitialLogFileGroup = name=LG1; undo_buffer_size=128M; undo1.log:250M; undo2.log:150M
这等效于以下 SQL 语句:
CREATE LOGFILE GROUP LG1
ADD UNDOFILE 'undo1.log'
INITIAL_SIZE 250M
UNDO_BUFFER_SIZE 128M
ENGINE NDBCLUSTER;
ALTER LOGFILE GROUP LG1
ADD UNDOFILE 'undo2.log'
INITIAL_SIZE 150M
ENGINE NDBCLUSTER;
当数据节点以--initial
开头时,将创建此日志文件组。
初始日志文件组的资源与值SharedGlobalMemory指示的资源一起添加到了全局内存池中。
如果使用此参数,则应始终在config.ini
文件的[ndbd default]
部分中进行设置。未定义在不同数据节点上设置不同值时,NDB 群集的行为。
table21.168 此 table 提供 InitialTablespace 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | string |
Default | [see documentation] |
Range | ... |
Restart Type | S |
此参数可用于指定在执行群集的初始启动时创建的 NDB 群集磁盘数据 table 空间。如下所示指定了InitialTablespace:
InitialTablespace = [name=name;] [extent_size=size;] file-specification-list
table 空间的name
是可选的,默认为DEFAULT-TS
。 extent_size
也是可选的;它默认为1M
。 * file-specification-list
使用与InitialLogfileGroup参数所示相同的语法,唯一的区别是与InitialTablespace一起使用的每个 file-specification
*都对应一个数据文件。 * file-specification-list
*中必须至少指定一个。数据文件根据为FileSystemPath,FileSystemPathDD和FileSystemPathDataFiles设置的任何值放置,就像它们是根据CREATE TABLESPACE或ALTER TABLESPACE语句的结果创建的一样。
例如,考虑以下行在config.ini
文件的[ndbd default]
部分中指定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;
该 table 空间是在数据节点以--initial
开头时创建的,以后可在创建 NDB 群集磁盘数据 table 时使用。
磁盘数据和 GCP 停止错误. 使用磁盘数据 table(例如 Node * nodeid
*)时遇到的错误使该节点终止,因为检测到 GCP 停止(错误 2303),通常称为“ GCP 停止错误”。当重做日志没有足够快地刷新到磁盘时,会发生此类错误。这通常是由于磁盘速度慢和磁盘吞吐量不足所致。
通过使用更快的磁盘,以及将磁盘数据文件放置在与数据节点文件系统不同的磁盘上,可以帮助防止发生这些错误。减小TimeBetweenGlobalCheckpoints的值往往会减少每个全局检查点要写入的数据量,因此可以在尝试写入全局检查点时为重做日志缓冲区溢出提供某种保护。但是,减小该值还可以减少编写 GCP 的时间,因此必须谨慎行事。
除了前面介绍的有关DiskPageBufferMemory的注意事项外,正确设置DiskIOThreadPool配置参数也很重要; DiskIOThreadPool设置得太高很可能导致 GCP 停止错误(错误#37227)。
GCP 停止可能是由保存或提交超时引起的; TimeBetweenEpochsTimeout数据节点配置参数确定提交的超时。但是,可以通过将此参数设置为 0 来禁用两种类型的超时。
用于配置发送缓冲区内存分配的参数. 发送缓冲区内存是从所有传输器之间共享的内存池中动态分配的,这意味着可以根据需要调整发送缓冲区的大小。 (以前,NDB 内核为群集中的每个节点使用固定大小的发送缓冲区,该缓冲区在节点启动时分配,并且在节点运行时无法更改.)TotalSendBufferMemory和OverLoadLimit数据节点配置参数允许进行设置此内存分配的限制。有关使用这些参数(以及SendBufferMemory)的更多信息,请参见第 21.3.3.13 节,“配置 NDB 群集发送缓冲区参数”。
除了使用TotalSendBufferMemory,SendBufferMemory或同时使用这两者的任何集合外,此参数还指定要分配的传输器发送缓冲存储器的数量。
此参数用于确定要在此节点上分配的内存总量,以在所有已配置的传输器之间共享共享发送缓冲区内存。
如果设置了此参数,则其最小允许值为 256KB; 0table 示尚未设置参数。有关更多详细信息,请参见第 21.3.3.13 节,“配置 NDB 群集发送缓冲区参数”。
另请参见第 21.5.7 节“在线添加 NDB 群集数据节点”。
重做日志过量提交处理. 如果花费太多时间将重做日志刷新到磁盘,则可以控制数据节点对操作的处理。当给定的重做日志刷新花费的时间超过RedoOverCommitLimit秒,超过RedoOverCommitCounter次,从而导致任何挂起的事务被中止时,就会发生这种情况。发生这种情况时,发送事务的 API 节点可以通过排队操作并重试它们,或者通过中止它们来处理应提交的操作,如DefaultOperationRedoProblemAction所确定。下 table 描述了用于设置超时以及在 API 节点执行此操作之前可能已超过的次数的数据节点配置参数:
table21.169 该 table 提供 RedoOverCommitCounter 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | numeric |
Default | 3 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
版本(或更高版本) | NDB 7.5.17 |
类型或单位 | numeric |
Default | 3 |
Range | 1 -4294967039(0xFFFFFEFF) |
Restart Type | N |
版本(或更高版本) | NDB 7.6.13 |
类型或单位 | numeric |
Default | 3 |
Range | 1 -4294967039(0xFFFFFEFF) |
Restart Type | N |
尝试多次将给定重做日志写入磁盘时,如果超过RedoOverCommitLimit,则所有未提交的事务都将中止,并且源自这些事务的 API 节点将根据这些事务处理构成这些事务的操作。到DefaultOperationRedoProblemAction的值(通过排队要重试的操作或中止它们)。
table21.170 该 table 提供 RedoOverCommitLimit 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | seconds |
Default | 20 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
版本(或更高版本) | NDB 7.5.17 |
类型或单位 | seconds |
Default | 20 |
Range | 1 -4294967039(0xFFFFFEFF) |
Restart Type | N |
版本(或更高版本) | NDB 7.6.13 |
类型或单位 | seconds |
Default | 20 |
Range | 1 -4294967039(0xFFFFFEFF) |
Restart Type | N |
此参数设置超时上限(以秒为单位),以尝试在超时之前将给定的重做日志写入磁盘。数据节点尝试刷新此重做日志但花费的时间比RedoOverCommitLimit
更长的次数被保留,并与RedoOverCommitCounter进行比较,并且当刷新花费的时间比该参数的值时间长时,任何未提交为事务的事务刷新超时的结果被中止。发生这种情况时,发起这些事务的任何 API 节点都会根据其DefaultOperationRedoProblemAction设置来处理组成这些事务的操作(它会将要重试的操作排入队列,或者中止它们)。
控制重新启动尝试. 当数据节点无法使用MaxStartFailRetries和StartFailRetryDelay数据节点配置参数启动时,可以对它们的重新启动尝试进行精细的控制。
MaxStartFailRetries限制放弃放弃启动数据节点之前进行的重试总数,而StartFailRetryDelay设置重试尝试之间的秒数。这些参数在这里列出:
table21.171 该 table 提供了 StartFailRetryDelay 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 0 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
使用此参数可以设置启动失败时数据节点尝试重新启动之间的秒数。默认值为 0(无延迟)。
除非StopOnError等于 0,否则忽略此参数和MaxStartFailRetries。
table21.172 该 table 提供了 MaxStartFailRetries 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | unsigned |
Default | 3 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | N |
使用此参数可以限制数据节点启动失败时尝试重新启动的次数。默认为 3 次尝试。
除非StopOnError等于 0,否则忽略此参数和StartFailRetryDelay。
NDB 索引统计信息参数. 下 table 中的参数与 NDB 索引统计信息生成有关。
table21.173 下 table 提供了 IndexStatAutoCreate 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0, 1 |
Restart Type | S |
创建索引时启用(设置为 1)或禁用(设置为 0)自动统计信息收集。默认禁用。
table21.174 此 table 提供了 IndexStatAutoUpdate 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | integer |
Default | 0 |
Range | 0, 1 |
Restart Type | S |
启用(设置为 1)或禁用(设置为 0)监视索引的更改并触发自动统计信息更新,这些将被检测到。触发更新所需的更改量和程度由IndexStatTriggerPct和IndexStatTriggerScale选项的设置确定。
table21.175 该 table 提供了 IndexStatSaveSize 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | bytes |
Default | 32768 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | IN |
NDB系统 table 和mysqld内存高速缓存中任何给定索引的已保存统计信息所允许的最大字节空间。在 NDB 7.5 和更早版本中,这消耗IndexMemory。
无论大小限制如何,始终至少生产一个 samples。此大小按IndexStatSaveScale缩放。
对于大索引,由IndexStatSaveSize指定的大小按IndexStatTriggerPct
的值缩放 0.01 倍。进一步乘以对数到索引大小的底数 2.将IndexStatTriggerPct
设置为 0 将禁用缩放效果。
table21.176 该 table 提供了 IndexStatSaveScale 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | percentage |
Default | 100 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | IN |
对于大索引,由IndexStatSaveSize指定的大小按IndexStatTriggerPct
的值缩放 0.01 倍。进一步乘以对数到索引大小的底数 2.将IndexStatTriggerPct
设置为 0 将禁用缩放效果。
table21.177 该 table 提供了 IndexStatTriggerPct 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | percentage |
Default | 100 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | IN |
触发索引统计信息更新的更新百分比变化。该值按IndexStatTriggerScale缩放。您可以通过将IndexStatTriggerPct
设置为 0 来完全禁用此触发器。
table21.178 该 table 提供了 IndexStatTriggerScale 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | percentage |
Default | 100 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | IN |
对于较大的索引,将IndexStatTriggerPct缩放此数量乘以 0.01. 值为 0 将禁用缩放。
table21.179 该 table 提供了 IndexStatUpdateDelay 数据节点配置参数的类型和值信息
Property | Value |
---|---|
版本(或更高版本) | NDB 7.5.0 |
类型或单位 | seconds |
Default | 60 |
Range | 0 -4294967039(0xFFFFFEFF) |
Restart Type | IN |
给定索引的自动索引统计信息更新之间的最小延迟(以秒为单位)。将此变量设置为 0 将禁用任何延迟。默认值为 60 秒。
重新启动类型. 下 table 显示了本节中的参数描述所使用的重新启动类型的信息:
table21.180 NDB 群集重新启动类型
Symbol | Restart Type | Description |
---|---|---|
N | Node | 可以使用滚动重启来更新参数(请参见第 21.5.5 节“执行 NDB 群集的滚动重启”) |
S | System | 必须完全关闭所有群集节点,然后重新启动,以更改此参数 |
I | Initial | 必须使用--initial选项重新启动数据节点 |