MySQL8 中文参考(八十七)

2024-06-26 19:20:27 浏览数 (1)

原文:docs.oracle.com/javase/tutorial/reallybigindex.html

25.4 NDB Cluster 的配置

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-configuration.html

25.4.1 NDB Cluster 的快速测试设置

25.4.2 NDB Cluster 配置参数、选项和变量概述

25.4.3 NDB Cluster 配置文件

25.4.4 使用高速互连与 NDB Cluster

作为 NDB Cluster 的一部分的 MySQL 服务器在一个主要方面与普通(非集群)MySQL 服务器不同,即它使用NDB存储引擎。这个引擎有时也被称为NDBCLUSTER,尽管更倾向于使用NDB

为了避免不必要的资源分配,默认情况下配置服务器时会禁用NDB存储引擎。要启用NDB,必须修改服务器的my.cnf配置文件,或使用--ndbcluster选项启动服务器。

这个 MySQL 服务器是集群的一部分,因此它还必须知道如何访问管理节点以获取集群配置数据。默认行为是在localhost上查找管理节点。但是,如果您需要指定其位置在其他地方,可以在my.cnf中或使用mysql客户端来完成。在使用NDB存储引擎之前,至少必须有一个管理节点运行,以及任何所需的数据节点。

有关--ndbcluster和其他特定于 NDB Cluster 的mysqld选项的更多信息,请参见 Section 25.4.3.9.1,“NDB Cluster 的 MySQL 服务器选项”。

有关安装 NDB Cluster 的一般信息,请参见 Section 25.3,“NDB Cluster 安装”。

25.4.1 NDB Cluster 的快速测试设置

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-quick.html

为了让您熟悉基础知识,我们描述了一个功能性 NDB Cluster 的最简配置。之后,您应该能够根据本章其他相关部分提供的信息设计您所需的设置。

首先,您需要创建一个配置目录,比如/var/lib/mysql-cluster,通过以系统root用户身份执行以下命令:

代码语言:javascript复制
$> mkdir /var/lib/mysql-cluster

在这个目录中,创建一个名为config.ini的文件,其中包含以下信息。根据您的系统需要,替换HostNameDataDir的适当值。

代码语言:javascript复制
# file "config.ini" - showing minimal setup consisting of 1 data node,
# 1 management server, and 3 MySQL servers.
# The empty default sections are not required, and are shown only for
# the sake of completeness.
# Data nodes must provide a hostname but MySQL Servers are not required
# to do so.
# If you don't know the hostname for your machine, use localhost.
# The DataDir parameter also has a default value, but it is recommended to
# set it explicitly.
# Note: [db], [api], and [mgm] are aliases for [ndbd], [mysqld], and [ndb_mgmd],
# respectively. [db] is deprecated and should not be used in new installations.

[ndbd default]
NoOfReplicas= 1

[mysqld  default]
[ndb_mgmd default]
[tcp default]

[ndb_mgmd]
HostName= myhost.example.com

[ndbd]
HostName= myhost.example.com
DataDir= /var/lib/mysql-cluster

[mysqld]
[mysqld]
[mysqld]

您现在可以启动ndb_mgmd管理服务器了。默认情况下,它会尝试读取当前工作目录中的config.ini文件,因此请切换到文件所在的目录,然后调用ndb_mgmd

代码语言:javascript复制
$> cd /var/lib/mysql-cluster
$> ndb_mgmd

然后通过运行ndbd来启动单个数据节点:

代码语言:javascript复制
$> ndbd

默认情况下,ndbd 在端口 1186 上查找管理服务器的localhost

注意

如果您从二进制 tarball 安装了 MySQL,则必须明确指定ndb_mgmdndbd服务器的路径。(通常可以在/usr/local/mysql/bin中找到。)

最后,切换到 MySQL 数据目录(通常为/var/lib/mysql/usr/local/mysql/data),确保my.cnf文件包含启用 NDB 存储引擎所需的选项:

代码语言:javascript复制
[mysqld]
ndbcluster

您现在可以像往常一样启动 MySQL 服务器了:

代码语言:javascript复制
$> mysqld_safe --user=mysql &

等待片刻以确保 MySQL 服务器正常���行。如果看到通知mysql ended,请检查服务器的.err文件以查找问题所在。

如果到目前为止一切顺利,您现在可以开始使用集群了。连接到服务器并验证NDBCLUSTER存储引擎是否已启用:

代码语言:javascript复制
$> mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1 to server version: 8.0.36

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> SHOW ENGINESG
...
*************************** 12. row ***************************
Engine: NDBCLUSTER
Support: YES
Comment: Clustered, fault-tolerant, memory-based tables
*************************** 13. row ***************************
Engine: NDB
Support: YES
Comment: Alias for NDBCLUSTER
...

在上面示例输出中显示的行号可能与您的系统上显示的行号不同,这取决于您的服务器配置方式。

尝试创建一个NDBCLUSTER表:

代码语言:javascript复制
$> mysql
mysql> USE test;
Database changed

mysql> CREATE TABLE ctest (i INT) ENGINE=NDBCLUSTER;
Query OK, 0 rows affected (0.09 sec)

mysql> SHOW CREATE TABLE ctest G
*************************** 1. row ***************************
       Table: ctest
Create Table: CREATE TABLE `ctest` (
  `i` int(11) default NULL
) ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 1 row in set (0.00 sec)

要检查节点是否正确设置,请启动管理客户端:

代码语言:javascript复制
$> ndb_mgm

使用管理客户端内的SHOW命令获取有关集群状态的报告:

代码语言:javascript复制
ndb_mgm> SHOW
Cluster Configuration
---------------------
[ndbd(NDB)]     1 node(s)
id=2    @127.0.0.1  (Version: 8.0.35-ndb-8.0.35, Nodegroup: 0, *)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @127.0.0.1  (Version: 8.0.35-ndb-8.0.35)

[mysqld(API)]   3 node(s)
id=3    @127.0.0.1  (Version: 8.0.35-ndb-8.0.35)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)

此时,您已成功设置了一个可工作的 NDB 集群。现在,您可以使用任何使用ENGINE=NDBCLUSTER或其别名ENGINE=NDB创建的表在集群中存储数据。

25.4.2 NDB 集群配置参数、选项和变量概述

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-configuration-overview.html

25.4.2.1 NDB 集群数据节点配置参数

25.4.2.2 NDB 集群管理节点配置参数

25.4.2.3 NDB 集群 SQL 节点和 API 节点配置参数

25.4.2.4 其他 NDB 集群配置参数

25.4.2.5 NDB 集群 mysqld 选项和变量参考

接下来的几个部分提供了用于管理节点行为各个方面的config.ini文件中使用的 NDB 集群节点配置参数的摘要表,以及由mysqldmy.cnf文件或从命令行读取的选项和变量的摘要表,当作为 NDB 集群进程运行时。每个节点参数表列出了给定类型(ndbdndb_mgmdmysqldcomputertcpshm)的参数、选项或变量,以及适用的默认值、最小值和最大值。

重新启动节点时的考虑。 对于节点参数,这些表还指示所需的重新启动类型(节点重新启动或系统重新启动)以及是否必须使用--initial来更改给定配置参数的值。在执行节点重新启动或初始节点重新启动时,必须依次重新启动所有集群的数据节点(也称为滚动重启)。可以在线更新标记为node的集群配置参数,即在不关闭集群的情况下以这种方式进行。初始节点重新启动需要使用--initial选项重新启动每个ndbd 进程。

系统重新启动需要完全关闭并重新启动整个集群。初始系统重新启动需要备份集群,在关闭后擦除集群文件系统,然后在重新启动后从备份中恢复。

在任何集群重新启动中,所有集群的管理服务器都必须重新启动,以便它们读取更新后的配置参数值。

重要提示

数值集群参数的值通常可以增加而不会出现任何问题,尽管建议逐步进行,以相对较小的增量进行此类调整。许多这些参数可以在线增加,使用滚动重启。

然而,减少这些参数的值——无论是通过节点重启、节点初始重启,甚至是整个集群系统的重启——都不应轻率进行;建议您在经过仔细规划和测试后才这样做。特别是涉及内存使用和磁盘空间的那些参数,如MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes。此外,通常情况下,与内存和磁盘使用相关的配置参数可以通过简单的节点重启来提高,但需要通过初始节点重启来降低。

因为其中一些参数可用于配置多种类型的集群节点,所以它们可能会出现在多个表中。

注意

4294967039经常出现在这些表中作为最大值。这个值在NDBCLUSTER源代码中被定义为MAX_INT_RNIL,等于0xFFFFFEFF,或者2³² − 2⁸ − 1

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-params-ndbd.html

25.4.2.1 NDB Cluster Data Node Configuration Parameters

本节中的列表提供有关在config.ini文件的[ndbd][ndbd default]部分中用于配置 NDB Cluster 数据��点的参数的信息。有关每个参数的详细描述和其他附加信息,请参见 Section 25.4.3.6, “Defining NDB Cluster Data Nodes”。

这些参数也适用于ndbmtd"),即ndbd的多线程版本。接下来是针对ndbmtd")的特定参数列表。

  • Arbitration: 在节点故障事件中避免脑裂问题时应如何执行仲裁。
  • ArbitrationTimeout: 数据库分区等待仲裁信号的最长时间(毫秒)。
  • BackupDataBufferSize: 备份数据缓冲区的默认大小(以字节为单位)。
  • BackupDataDir: 存储备份的路径。请注意,该设置始终附加字符串’/BACKUP’,因此有效默认值为 FileSystemPath/BACKUP。
  • BackupDiskWriteSpeedPct: 设置数据节点分配的最大写入速度(MaxDiskWriteSpeed)的百分比,用于在启动备份时为 LCPs 保留。
  • BackupLogBufferSize: 备份日志缓冲区的默认大小(以字节为单位)。
  • BackupMaxWriteSize: 备份所做的文件系统写入的最大大小(以字节为单位)。
  • BackupMemory: 每个节点为备份分配的总内存(以字节为单位)。
  • BackupReportFrequency: 备份期间备份状态报告的频率(以秒为单位)。
  • BackupWriteSize: 备份所做的文件系统写入的默认大小(以字节为单位)。
  • BatchSizePerLocalScan: 用于计算保持锁扫描的锁记录数。
  • BuildIndexThreads: 在系统或节点重新启动期间用于构建有序索引的线程数。在运行 ndb_restore --rebuild-indexes 时也适用。将此参数设置为 0 会禁用多线程构建有序索引。
  • CompressedBackup: 在写入时使用 zlib 压缩备份。
  • CompressedLCP: 使用 zlib 编写压缩的 LCP。
  • ConnectCheckIntervalDelay: 数据节点连接性检查阶段之间的时间间隔。如果在 1 个间隔后没有响应,则数据节点被视为可疑,在 2 个间隔后被视为死亡。
  • CrashOnCorruptedTuple: 启用后,每当检测到损坏的元组时,强制节点关闭。
  • DataDir: 此节点的数据目录。
  • DataMemory: 每个数据节点为存储数据分配的字节数;取决于可用系统 RAM 和 IndexMemory 的大小。
  • DefaultHashMapSize: 设置用于表哈希映射的大小(桶数)。支持三个值:0、240 和 3840。
  • DictTrace: 启用 DBDICT 调试;用于 NDB 开发。
  • DiskDataUsingSameDisk: 如果磁盘数据表空间位于不同物理磁盘上,则设置为 false。
  • DiskIOThreadPool: 用于文件访问的未绑定线程数��仅适用于磁盘数据。
  • Diskless: 在不使用磁盘的情况下运行。
  • DiskPageBufferEntries: 在 DiskPageBufferMemory 中分配的内存;非常大的磁盘事务可能需要增加此值。
  • DiskPageBufferMemory: 每个数据节点为磁盘页缓冲区缓存分配的字节数。
  • DiskSyncSize: 在强制同步之前写入文件的数据量。
  • EnablePartialLcp: 启用部分 LCP(true);如果禁用(false),则所有 LCP 都写入完整检查点。
  • EnableRedoControl: 启用用于控制重做日志使用情况的自适应检查点速度。
  • EncryptedFileSystem: 加密本地检查点和表空间文件。实验性功能;不支持生产环境。
  • EventLogBufferSize: 数据节点内用于 NDB 日志事件的循环缓冲区大小。
  • ExecuteOnComputer: 引用先前定义的计算机的字符串。
  • ExtraSendBufferMemory: 用于发送缓冲区的内存,额外分配给 TotalSendBufferMemory 或 SendBufferMemory。默认值(0)允许最多 16MB。
  • FileSystemPath: 数据节点存储数据的目录路径(目录必须存在)。
  • FileSystemPathDataFiles: 数据节点存储其磁盘数据文件的目录路径。默认���为 FilesystemPathDD(如果已设置);否则,如果已设置 FilesystemPath,则使用该值;否则,使用 DataDir 的值。
  • FileSystemPathDD: 数据节点存储其磁盘数据和撤销文件的目录路径。默认值为 FileSystemPath(如果已设置);否则,使用 DataDir 的值。
  • FileSystemPathUndoFiles: 数据节点为磁盘数据存储撤销文件的目录路径。默认值为 FilesystemPathDD(如果已设置);否则,如果已设置 FilesystemPath,则使用该值;否则,使用 DataDir 的值。
  • FragmentLogFileSize: 每个重做日志文件的大小。
  • HeartbeatIntervalDbApi: API 节点与数据节点之间心跳的时间间隔。(连续错过 3 次心跳后,API 连接关闭)。
  • HeartbeatIntervalDbDb: 数据节点之间心跳的时间间隔;如果连续错过 3 次心跳,则数据节点被视为已死亡。
  • HeartbeatOrder: 设置数据节点检查彼此心跳的顺序,以确定给定节点是否仍处于活动状态并连接到集群。必须对所有数据节点为零,或对所有数据节点为不同的非零值;有关更多指导,请参阅文档。
  • HostName: 此数据节点的主机名或 IP 地址。
  • IndexMemory: 每个数据节点用于存储索引的字节数;取决于可用系统 RAM 和 DataMemory 的大小。
  • IndexStatAutoCreate: 在创建索引时启用/禁用自动统计信息收集。
  • IndexStatAutoUpdate: 监视索引的更改并触发自动统计信息更新。
  • IndexStatSaveScale: 用于确定存储的索引统计信息大小的缩放因子。
  • IndexStatSaveSize: 每个索引保存的统计信息的最大字节数。
  • IndexStatTriggerPct: DML 操作的索引统计信息更新的阈值百分比变化。该值由 IndexStatTriggerScale 缩小。
  • IndexStatTriggerScale: 将 IndexStatTriggerPct 按照此数量缩小,乘以索引大小的以 2 为底的对数,用于大型索引。设置为 0 以禁用缩放。
  • IndexStatUpdateDelay: 给定索引的自动索引统计信息更新之间的最小延迟。0 表示没��延迟。
  • InitFragmentLogFiles: 使用稀疏或完整格式初始化片段日志文件。
  • InitialLogFileGroup: 描述在初始启动期间创建的日志文件组。查看文档以获取格式。
  • InitialNoOfOpenFiles: 每个数据节点初始打开文件数。(每个文件创建一个线程)。
  • InitialTablespace: 描述在初始启动期间创建的表空间。查看文档以获取格式。
  • InsertRecoveryWork: 用于插入行的 RecoveryWork 百分比;除非使用部分本地检查点,否则不起作用。
  • KeepAliveSendInterval: 数据节点之间链接发送保持活动信号的时间间隔,以毫秒为单位。设置为 0 以禁用。
  • LateAlloc: 在与管理服务器建立连接后分配内存。
  • LcpScanProgressTimeout: 本地检查点片段扫描在节点关闭之前可以停滞的最长时间,以确保系统范围内的 LCP 进度。使用 0 来禁用。
  • LocationDomainId: 将此数据节点分配给特定的可用域或区域。0(默认)表示未设置。
  • LockExecuteThreadToCPU: 逗号分隔的 CPU ID 列表。
  • LockMaintThreadsToCPU: 指示哪个 CPU 运行维护线程的 CPU ID。
  • LockPagesInMainMemory: 0=禁用锁定,1=内存分配后锁定,2=内存分配前锁定。
  • LogLevelCheckpoint: 本地和全局检查点信息的日志级别打印到标准输出。
  • LogLevelCongestion: 拥塞信息打印到标准输出的级别。
  • LogLevelConnection: 节点连接/断开信息打印到标准输出的级别。
  • LogLevelError: 传输器、心跳错误打印到标准输出。
  • LogLevelInfo: 心跳和日志信息打印到标准输出。
  • LogLevelNodeRestart: 节点重新启动和节点故障信息打印到标准输出的级别。
  • LogLevelShutdown: 节点关闭信息打印到标准输出的级别。
  • LogLevelStartup: 节点启动信息打印到标准输出的级别。
  • LogLevelStatistic: 事务、操作和传输器信息打印到标准输出的级别。
  • LongMessageBuffer: 每个数据节点为内部长消息分配的字节数。
  • MaxAllocate: 不再使用;没有效果。
  • MaxBufferedEpochs: 订阅节点可以滞后的允许的时代编号(未处理时代)数量。超过会导致滞后的订阅者被断开连接。
  • MaxBufferedEpochBytes: 为缓冲时代分配的总字节数。
  • MaxDiskDataLatency: 在开始中止事务之前,允许的磁盘访问平均延迟(毫秒)的最大值。
  • MaxDiskWriteSpeed: 当没有重新启动时,LCP 和备份每秒可写入的最大字节数。
  • MaxDiskWriteSpeedOtherNodeRestart: 当另一个节点重新启动时,LCP 和备份每秒可以写入的最大字节数。
  • MaxDiskWriteSpeedOwnRestart: 当此节点重新启动时,LCP 和备份每秒可以写入的最大字节数。
  • MaxFKBuildBatchSize: 用于构建外键的最大扫描批处理大小。增加此值可能加快外键构建速度,但也会影响正在进行的流量。
  • MaxDMLOperationsPerTransaction: 事务的限制大小;如果需要的 DML 操作超过此数量,则中止事务。
  • MaxLCPStartDelay: LCP 在检查检查点互斥锁(以允许其他数据节点完成元数据同步)之前轮询的时间(以便将自身放入锁队列,以便并行恢复表数据)的秒数。
  • MaxNoOfAttributes: 建议存储在数据库中���属性总数(所有表的总和)。
  • MaxNoOfConcurrentIndexOperations: 在一个数据节点上可以同时执行的索引操作的总数。
  • MaxNoOfConcurrentOperations: 事务协调器中操作记录的最大数量。
  • MaxNoOfConcurrentScans: 数据节点上同时执行的最大扫描数。
  • MaxNoOfConcurrentSubOperations: 并发订阅者操作的最大数量。
  • MaxNoOfConcurrentTransactions: 在此数据节点上同时执行的最大事务数,可以同时执行的事务总数为此值乘以集群中数据节点的数量。
  • MaxNoOfFiredTriggers: 在一个数据节点上可以同时触发的触发器总数。
  • MaxNoOfLocalOperations: 在此数据节点上定义的操作记录的最大数量。
  • MaxNoOfLocalScans: 在此数据节点上并行进行的片段扫描的最大数量。
  • MaxNoOfOpenFiles: 每个数据节点打开的文件的最大数量。(每个文件创建一个线程)。
  • MaxNoOfOrderedIndexes: 系统中可定义的有序索引总数。
  • MaxNoOfSavedMessages: 写入错误日志的最大错误消息数和保留的最大跟踪文件数。
  • MaxNoOfSubscribers: 订阅者的最大数量。
  • MaxNoOfSubscriptions: 订阅的最大数量(默认为 0 = MaxNoOfTables)。
  • MaxNoOfTables: 建议存储在数据库中的 NDB 表的总数。
  • MaxNoOfTriggers: 系统中可定义的触发器总数。
  • MaxNoOfUniqueHashIndexes: 系统中可定义的唯一哈希索引总数。
  • MaxParallelCopyInstances: 节点重启期间的并行复制数。默认值为 0,使用两个节点上的 LDM 数,最多为 16。
  • MaxParallelScansPerFragment: 每个片段的最大并行扫描数。一旦达到此限制,扫描将被串行化。
  • MaxReorgBuildBatchSize: 重新组织表分区时使用的最大扫描批量大小。增加此值可能加快表分区重新组织的速度,但也会影响正在进行的流量。
  • MaxStartFailRetries: 数据节点启动失败时的最大重试次数,要求 StopOnError = 0。将其设置为 0 会导致启动尝试无���继续。
  • MaxUIBuildBatchSize: 用于构建唯一键的最大扫描批量大小。增加此值可能加快唯一键的构建速度,但也会影响正在进行的流量。
  • MemReportFrequency: 内存报告的频率(以秒为单位);0 = 仅在超过百分比限制时报告。
  • MinDiskWriteSpeed: LCP 和备份每秒可写入的最小字节数。
  • MinFreePct: 保留用于重启的内存资源百分比。
  • NodeGroup: 数据节点所属的节点组;仅在集群的初始启动期间使用。
  • NodeGroupTransporters: 在同一节点组中节点之间使用的传输器数量。
  • NodeId: 在集群中唯一标识数据节点的编号。
  • NoOfFragmentLogFiles: 每个数据节点所属的 4 个文件集中每个 16 MB 重做日志文件的数量。
  • NoOfReplicas: 数据库中所有数据的副本数量。
  • Numa: (仅限 Linux;需要 libnuma)控制 NUMA 支持。将其设置为 0 允许系统确定数据节点进程的交错使用;设置为 1 表示由数据节点确定。
  • ODirect: 尽可能使用 O_DIRECT 文件读取和写入。
  • ODirectSyncFlag: O_DIRECT 写入被视为同步写入;当 ODirect 未启用、InitFragmentLogFiles 设置为 SPARSE 或两者都设置时将被忽略。
  • RealtimeScheduler: 当为 true 时,数据节点线程被调度为实时线程。默认值为 false。
  • RecoveryWork: LCP 文件的存储开销百分比:较大的值意味着在正常操作中工作较少,在恢复期间工作较多。
  • RedoBuffer: 每个数据节点用于写入重做日志的字节数。
  • RedoOverCommitCounter: 当超过 RedoOverCommitLimit 这么多次时,事务将被中止,并且操作将按照 DefaultOperationRedoProblemAction 指定的方式处理。
  • RedoOverCommitLimit: 每次刷新当前重做缓冲区所需时间超过这么多秒时,将比较已发生的次数与 RedoOverCommitCounter。
  • RequireEncryptedBackup: 备份是否必须加密(1 = 需要加密,否则为 0)。
  • ReservedConcurrentIndexOperations: 在一个数据节点上具有专用资源的同时索引操作的数量。
  • ReservedConcurrentOperations: 在一个数据节点上具有专用资源的事务协调器中同时操作的数量。
  • 保留并发扫描数: 在一个数据节点上具有专用资源的同时扫描数。
  • 保留并发事务数: 在一个数据节点上具有专用资源的同时事务数。
  • 保留触发器数: 在一个数据节点上具有专用资源的触发器数。
  • 保留本地扫描数: 在一个数据节点上具有专用资源的同时片段扫描数。
  • 保留事务缓冲区内存: 分配给每个数据节点的键和属性数据的动态缓冲区空间(以字节为单位)。
  • 插入错误重启控制: 插入错误导致的重启控制类型(当启用 StopOnError 时)。
  • 重启订阅者连接超时: 数据节点等待订阅 API 节点连接的时间。设置为 0 以禁用超时,总是解析为最接近的整秒。
  • 调度执行计时器: 在发送之前执行调度器的微秒数。
  • 调度器响应性: 设置 NDB 调度器响应优化 0-10;较高的值提供更好的响应时间但降低吞吐量。
  • 调度器自旋计时器: 在休眠之前执行调度器的微秒数。
  • 服务器端口: 用于为来自 API 节点的传入连接设置传输器的端口。
  • 共享全局内存: 为任何用途在每个数据节点上分配的总字节数。
  • 自旋方法: 数据节点使用的自旋方法;详细信息请参阅文档。
  • 启动失败重试延迟: 启动失败后重试之前的延迟时间(需要 StopOnError = 0)。
  • 启动失败超时: 在终止之前等待的毫秒数(0=永远等待)。
  • 无节点组超时启动: 在尝试启动之前等待无节点组的时间(0=永远)。
  • StartPartialTimeout: 尝试在所���节点都不完整的情况下启动之前等待的毫秒数。(0=永远等待)。
  • StartPartitionedTimeout: 尝试启动分区之前等待的毫秒数。(0=永远等待)。
  • StartupStatusReportFrequency: 启动过程中状态报告的频率。
  • StopOnError: 当设置为 0 时,数据节点会在节点故障后自动重新启动和恢复。
  • StringMemory: 字符串内存的默认大小(0 到 100 = 最大值的百分比,101 = 实际字节数)。
  • TcpBind_INADDR_ANY: 绑定 IP_ADDR_ANY,以便可以从任何地方进行连接(用于自动生成的连接)。
  • TimeBetweenEpochs: 各个时期之间的时间间隔(用于复制同步)。
  • TimeBetweenEpochsTimeout: 时期之间的超时时间。超时会导致节点关闭。
  • TimeBetweenGlobalCheckpoints: 将事务组提交到磁盘之间的时间间隔。
  • TimeBetweenGlobalCheckpointsTimeout: 事务组提交到磁盘的最小超时时间。
  • TimeBetweenInactiveTransactionAbortCheck: 检查非活动事务之间的时间间隔。
  • TimeBetweenLocalCheckpoints: 对数据库进行快照的时间间隔(以字节的基数-2 对数表示)。
  • TimeBetweenWatchDogCheck: 数据节点内部执行检查之间的时间间隔。
  • TimeBetweenWatchDogCheckInitial: 数据节点内部执行检查之间的时间间隔(在分配内存时的早期阶段)。
  • TotalSendBufferMemory: 用于所有传输器发送缓冲区的总内存。
  • TransactionBufferMemory: 为每个数据节点分配的用于键和属性数据的动态缓冲空间(以字节为单位)。
  • TransactionDeadlockDetectionTimeout: 事务在数据节点内执行的时间。这是事务协调器等待每个参与事务的数据节点执行请求的时间。如果数据节点花费的时间超过这个时间,事务将被中止。
  • TransactionInactiveTimeout: 应用程序在执行事务的另一部分之前等待的毫秒数。这是事务协调器等待应用程序执行或发送事务的另一部分(查询、语句)的时间。如果应用程序花费太长时间,则事务将被���止。超时 = 0 表示应用程序永远不会超时。
  • TransactionMemory: 每个数据节点上为事务分配的内存。
  • TwoPassInitialNodeRestartCopy: 在初始节点重新启动期间进行 2 次数据复制,从而实现有序索引的多线程构建。
  • UndoDataBuffer: 未使用;没有效果。
  • UndoIndexBuffer: 未使用;没有效果。
  • UseShm: 在此数据节点和在同一主机上运行的 API 节点之间使用共享内存连接。
  • WatchDogImmediateKill: 当为真时,线程在发生看门狗问题时立即被终止;用于测试和调试。

以下参数特定于ndbmtd"):

  • AutomaticThreadConfig: 使用自动线程配置;覆盖任何 ThreadConfig 和 MaxNoOfExecutionThreads 的设置,并禁用 ClassicFragmentation。
  • ClassicFragmentation: 当为真时,使用传统表碎片化;设置为假以在 LDM 之间灵活分配碎片。由 AutomaticThreadConfig 禁用。
  • EnableMultithreadedBackup: 启用多线程备份。
  • MaxNoOfExecutionThreads: 仅对 ndbmtd,指定最大执行线程数。
  • MaxSendDelay: ndbmtd 发送的最大延迟微秒数。
  • NoOfFragmentLogParts: 属于此数据节点的重做日志文件组数。
  • NumCPUs: 指定与 AutomaticThreadConfig 一起使用的 CPU 数量。
  • PartitionsPerNode: 确定在每个数据节点上创建的表分区数;如果启用了 ClassicFragmentation,则不使用。
  • ThreadConfig: 用于配置多线程数据节点(ndbmtd)。默认为空字符串;请参阅文档以获取语法和其他信息。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-params-mgmd.html

25.4.2.2 NDB 集群管理节点配置参数

本节中的列表提供了有关在config.ini文件中配置 NDB 集群管理节点的[ndb_mgmd][mgm]部分中使用的参数的信息。有关每个参数的详细描述和其他附加信息,请参阅第 25.4.3.5 节,“定义 NDB 集群管理服务器”。

  • ArbitrationDelay: 在被要求进行仲裁时,仲裁者在投票之前等待的时间(毫秒)。
  • ArbitrationRank: 如果为 0,则管理节点不是仲裁者。内核按顺序选择仲裁者为 1、2。
  • DataDir: 此节点的数据目录。
  • ExecuteOnComputer: 引用先前定义的计算机的字符串。
  • ExtraSendBufferMemory: 用于发送缓冲区的内存,除了由 TotalSendBufferMemory 或 SendBufferMemory 分配的内存。默认值(0)允许最多使用 16MB。
  • HeartbeatIntervalMgmdMgmd: 管理节点之间心跳之间的时间;在 3 次错过心跳后,认为管理节点之间的连接已丢失。
  • HeartbeatThreadPriority: 设置管理节点的心跳线程策略和优先级;请参阅手册以获取允许的数值。
  • HostName: 此管理节点的主机名或 IP 地址。
  • Id: 标识管理节点的编号。现已弃用;请使用 NodeId 代替。
  • LocationDomainId: 将此管理节点分配给特定的可用域或区域。0(默认)表示未设置。
  • LogDestination: 日志消息发送到的位置:控制台、系统日志或指定的日志文件。
  • NodeId: 在集群中唯一标识管理节点的编号。
  • PortNumber: 发送命令和从管理服务器获取配置的端口号。
  • PortNumberStats: 用于从管理服务器获取统计信息的端口号。
  • TotalSendBufferMemory: 用于所有传输器发送缓冲区的总内存。
  • wan: 将 WAN TCP 设置用作默认设置。

注意

在管理节点的配置中进行更改后,需要对集群执行滚动重启,以使新配置生效。查看 Section 25.4.3.5, “定义 NDB 集群管理服务器”,获取更多信息。

要向正在运行的 NDB 集群添加新的管理服务器,还需要在修改任何现有的config.ini文件后对所有集群节点执行滚动重启。有关在使用多个管理节点时出现的问题的更多信息,请参阅 Section 25.2.7.10, “与多个 NDB 集群节点相关的限制”。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-params-api.html

25.4.2.3 NDB 集群 SQL 节点和 API 节点配置参数

本节中的列表提供了有关在 config.ini 文件中配置 NDB 集群 SQL 节点和 API 节点的 [mysqld][api] 部分中使用的参数的信息。有关每个参数的详细描述和其他附加信息,请参见 第 25.4.3.7 节,“在 NDB 集群中定义 SQL 和其他 API 节点”。

  • ApiVerbose: 启用 NDB API 调试;用于 NDB 开发。
  • 仲裁延迟: 在被要求仲裁时,仲裁者在投票前等待的毫秒数。
  • 仲裁级别: 如果为 0,则 API 节点不是仲裁者。内核按顺序选择仲裁者 1、2。
  • 自动重新连接: 指定当 API 节点与集群断开连接时是否应完全重新连接。
  • 批处理字节大小: 字节的默认批处理大小。
  • 批处理大小: 记录数量的默认批处理大小。
  • 连接退避最大时间: 指定此 API 节点允许在尝试连接到任何给定数据节点之间的最长时间(~100ms 分辨率)。不包括连接尝试正在进行时经过的时间,最坏情况下可能需要几秒钟。通过将其设置为 0 来禁用。如果当前没有数据节点连接到此 API 节点,则将使用 StartConnectBackoffMaxTime。
  • 连接映射: 指定要连接的数据节点。
  • 默认哈希映射大小: 设置用于表哈希映射的大小(桶数)。支持三个值:0、240 和 3840。
  • 默认操作重做问题操作: 当 RedoOverCommitCounter 超过时如何处理操作。
  • 在计算机上执行: 引用先前定义的计算机的字符串。
  • 额外发送缓冲区内存: 用于发送缓冲区的内存,除了 TotalSendBufferMemory 或 SendBufferMemory 分配的内存之外。默认值(0)允许最多 16MB。
  • HeartbeatThreadPriority: 设置 API 节点的心跳线程策略和优先级;请参阅手册以获取允许的值。
  • HostName: 此 SQL 或 API 节点的主机名或 IP 地址。
  • Id: 标识 MySQL 服务器或 API 节点(Id)的编号。现已弃用;请改用 NodeId。
  • LocationDomainId: 将此 API 节点分配给特定的可用域或区域。0(默认)表示未设置。
  • MaxScanBatchSize: 一次扫描的最大集合批量大小。
  • NodeId: 在集群中唯一标识 SQL 节点或 API 节点的编号。
  • StartConnectBackoffMaxTime: 与 ConnectBackoffMaxTime 相同,只是如果没有数据节点连接到此 API 节点,则使用此参数。
  • TotalSendBufferMemory: 用于所有传输器发送缓冲区的总内存。
  • wan: 使用 WAN TCP 设置作为默认设置。

关于 NDB Cluster 的 MySQL 服务器选项的讨论,请参见 Section 25.4.3.9.1, “MySQL Server Options for NDB Cluster”。关于与 NDB Cluster 相关的 MySQL 服务器系统变量的信息,请参见 Section 25.4.3.9.2, “NDB Cluster System Variables”。

注意

要将新的 SQL 或 API 节点添加到运行中的 NDB Cluster 配置中,必须在向 config.ini 文件(或文件,如果您使用多个管理服务器)添加新的 [mysqld][api] 部分后,对所有集群节点执行滚动重启。在新的 SQL 或 API 节点可以连接到集群之前,必须执行此操作。

如果新的 SQL 或 API 节点可以利用集群配置中以前未使用的 API 插槽连接到集群,则无需执行任何集群重启。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-params-other.html

25.4.2.4 其他 NDB Cluster 配置参��

本节中的列表提供了有关在config.ini文件中配置 NDB Cluster 的[computer][tcp][shm]部分中使用的参数的信息。有关各个参数的详细描述和其他信息,请参见第 25.4.3.10 节,“NDB Cluster TCP/IP 连接”或第 25.4.3.12 节,“NDB Cluster 共享内存连接”。

以下参数适用于config.ini文件中的[computer]部分:

  • 主机名: 此计算机的主机名或 IP 地址。
  • ID: 此计算机的唯一标识符。

以下参数适用于config.ini文件中的[tcp]部分:

  • 允许未解析的主机名: 当为 false(默认)时,管理节点无法解析主机名会导致致命错误;当为 true 时,未解析的主机名仅作为警告报告。
  • 校验和: 如果启用了校验和,节点之间的所有信号都会被检查错误。
  • : 用于组接近性;较小的值被解释为更接近。
  • 主机名 1: 两台计算机通过 TCP 连接加入的第一台计算机的名称或 IP 地址。
  • 主机名 2: 两台通过 TCP 连接加入的计算机中的第二台的名称或 IP 地址。
  • 节点 ID1: 连接一侧的节点(数据节点、API 节点或管理节点)的 ID。
  • 节点 ID2: 连接一侧的节点(数据节点、API 节点或管理节点)的 ID。
  • 节点服务器 ID: 设置 TCP 连接的服务器端。
  • 过载限制: 当发送缓冲区中有超过这么多未发送字节时,连接被视为过载。
  • 首选 IP 版本: 指示 DNS 解析器对 IP 版本 4 或 6 的偏好。
  • 预发送校验和: 如果启用了此参数和校验和,则执行预发送校验和检查,并检查节点之间的所有 TCP 信号是否有错误。
  • 代理: …
  • ReceiveBufferMemory: 此节点接收的信号的缓冲区字节数。
  • SendBufferMemory: 从此节点发送的信号的 TCP 缓冲区字节数。
  • SendSignalId: 在每个信号中发送 ID。在跟踪文件中使用。在调试版本中默认为 true。
  • TcpSpinTime: 在接收时进入睡眠之前旋转的时间。
  • TCP_MAXSEG_SIZE: 用于 TCP_MAXSEG 的值。
  • TCP_RCV_BUF_SIZE: 用于 SO_RCVBUF 的值。
  • TCP_SND_BUF_SIZE: 用于 SO_SNDBUF 的值。
  • TcpBind_INADDR_ANY: 为连接的服务器部分绑定 InAddrAny 而不是主机名。

以下参数适用于config.ini文件的[shm]部分:

  • Checksum: 如果启用了校验和,则检查节点之间的所有信号是否存在错误。
  • Group: 用于组接近性;较小的值被解释为更接近。
  • HostName1: 由 SHM 连接连接的两台计算机中的第一台的名称或 IP 地址。
  • HostName2: 由 SHM 连接连接的两台计算机中的第二台的名称或 IP 地址。
  • NodeId1: 连接一侧的节点(数据节点、API 节点或管理节点)的 ID。
  • NodeId2: 连接一侧的节点(数据节点、API 节点或管理节点)的 ID。
  • NodeIdServer: 设置 SHM 连接的服务器端。
  • OverloadLimit: 当发送缓冲区中有超过此数量的未发送字节时,连接被视为过载。
  • PreSendChecksum: 如果启用了此参数和 Checksum,则执行预发送校验和检查,并检查节点之间的所有 SHM 信号是否存在错误。
  • SendBufferMemory: 从此节点发送的信号在共享内存缓冲区中的字节数。
  • SendSignalId: 在每个信号中发送 ID。在跟踪文件中使用。
  • ShmKey: 共享内存键;当设置为 1 时,由 NDB 计算。
  • ShmSpinTime: 在接收时,睡眠前旋转的微秒数。
  • ShmSize: 共享内存段的大小。
  • Signum: 用于信号传递的信号编号。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-option-tables.html

25.4.2.5 NDB Cluster mysqld 选项和变量参考

以下列表包括在 NDB Cluster 中作为 SQL 节点运行时mysqld中适用的命令行选项、系统变量和状态变量。有关所有mysqld相关的命令行选项、系统变量和状态变量的参考,请参阅第 7.1.4 节,“服务器选项、系统变量和状态变量参考”。

  • Com_show_ndb_status: SHOW NDB STATUS 语句的计数。
  • Handler_discover: 表被发现的次数。
  • ndb-applier-allow-skip-epoch: 允许复制应用程序跳过时代。
  • ndb-batch-size: 用于 NDB 事务批处理的大小(以字节为单位)。
  • ndb-blob-read-batch-bytes: 指定大型 BLOB 读取应该分批处理的字节数。0 = 无限制。
  • ndb-blob-write-batch-bytes: 指定大型 BLOB 写入应该分批处理的字节数。0 = 无限制。
  • ndb-cluster-connection-pool: MySQL 使用的集群连接数。
  • ndb-cluster-connection-pool-nodeids: 用于 MySQL 连接到集群的节点 ID 的逗号分隔列表;列表中的节点数必须与–ndb-cluster-connection-pool 设置的值匹配。
  • ndb-connectstring: 分发此集群的配置信息的 NDB 管理服务器的地址。
  • ndb-default-column-format: 在创建或添加表列时,默认使用此值(FIXED 或 DYNAMIC)作为 COLUMN_FORMAT 和 ROW_FORMAT 选项。
  • ndb-deferred-constraints: 指定应该推迟对唯一索引的约束检查(支持的情况下)直到提交时间。通常不需要或使用;仅用于测试目的��
  • ndb-distribution: 新表在 NDBCLUSTER 中的默认分布(KEYHASH 或 LINHASH,默认为 KEYHASH)。
  • ndb-log-apply-status: 导致作为副本的 MySQL 服务器在其自己的二进制日志中记录从其直接来源接收到的 mysql.ndb_apply_status 更新,使用自己的服务器 ID。仅在使用–ndbcluster 选项启动服务器时有效。
  • ndb-log-empty-epochs: 启用时,即使启用了–log-slave-updates,也会导致未发生更改的时代被写入 ndb_apply_status 和 ndb_binlog_index 表。
  • ndb-log-empty-update: 启用时,即使启用了–log-slave-updates,也会导致产生没有更改的更新被写入 ndb_apply_status 和 ndb_binlog_index 表。
  • ndb-log-exclusive-reads: 使用独占锁记录主键读取;允许基于读取冲突进行冲突解决。
  • ndb-log-fail-terminate: 如果无法完全记录所有找到的行事件,则终止 mysqld 进程。
  • ndb-log-orig: 在 mysql.ndb_binlog_index 表中记录原始服务器 ID 和时代。
  • ndb-log-transaction-dependency: 使二进制日志线程为每个写入二进制日志的事务计算事务依赖关系。
  • ndb-log-transaction-id: 将 NDB 事务 ID 写入二进制日志。需要–log-bin-v1-events=OFF。
  • ndb-log-update-minimal: 以最小格式记录更新。
  • ndb-log-updated-only: 仅记录更新(ON)或完整行(OFF)。
  • ndb-log-update-as-write: 在源上切换更新的日志记录方式,可以是更新(OFF)或写入(ON)。
  • ndb-mgmd-host: 设置连接到管理服务器的主机(和端口,如果需要)。
  • ndb-nodeid: 此 MySQL 服务器的 NDB 集群节点 ID。
  • ndb-optimized-node-selection: 启用用于事务节点选择的优化。默认启用;使用–skip-ndb-optimized-node-selection 来禁用。
  • ndb-transid-mysql-connection-map: 启用或禁用 ndb_transid_mysql_connection_map 插件;即启用或禁用具有该名称的 INFORMATION_SCHEMA 表。
  • ndb-wait-connected: MySQL 服务器在接受 MySQL 客户端连接之前等待连接到集群管理和数据节点的时间(以秒为单位)。
  • ndb-wait-setup: MySQL 服务器等待 NDB 引擎设置完成的时间(以秒为单位)。
  • ndb-allow-copying-alter-table: 将其设置为 OFF,以防止 ALTER TABLE 在 NDB 表上使用复制操作。
  • Ndb_api_adaptive_send_deferred_count: 由此 MySQL 服务器(SQL 节点)未实际发送的自适应发送调用次数。
  • Ndb_api_adaptive_send_deferred_count_session: 此客户端会话中未实际发送的自适应发送调用次数。
  • Ndb_api_adaptive_send_deferred_count_replica: 此副本未实际发送的自适应发送调用次数。
  • Ndb_api_adaptive_send_deferred_count_slave: 此副本未实际发送的自适应发送调用次数。
  • Ndb_api_adaptive_send_forced_count: 由此 MySQL 服务器(SQL 节点)发送的带有强制发送设置的自适应发送次数。
  • Ndb_api_adaptive_send_forced_count_session: 此客户端会话中带有强制发送设置的自适应发送次数。
  • Ndb_api_adaptive_send_forced_count_replica: 此副本发送的带有强制发送设置的自适应发送次数。
  • Ndb_api_adaptive_send_forced_count_slave: 此副本发送的带有强制发送设置的自适应发送次数。
  • Ndb_api_adaptive_send_unforced_count: 由此 MySQL 服务器(SQL 节点)发送的无强制发送的自适应发送次数。
  • Ndb_api_adaptive_send_unforced_count_session: 此客户端会话中未带有强制发送的自适应发送次数。
  • Ndb_api_adaptive_send_unforced_count_replica: 该副本发送的无强制发送的自适应发送数量。
  • Ndb_api_adaptive_send_unforced_count_slave: 该副本发送的无强制发送的自适应发送数量。
  • Ndb_api_bytes_received_count: 从数据节点接收的数据量(以字节为单位)由此 MySQL 服务器(SQL 节点)。
  • Ndb_api_bytes_received_count_session: 从数据节点接收的数据量(以字节为单位)在此客户端会话中。
  • Ndb_api_bytes_received_count_replica: 从数据节点接收的数据量(以字节为单位)由此副本。
  • Ndb_api_bytes_received_count_slave: 从数据节点接收��数据量(以字节为单位)由此副本。
  • Ndb_api_bytes_sent_count: 发送到数据节点的数据量(以字节为单位)由此 MySQL 服务器(SQL 节点)。
  • Ndb_api_bytes_sent_count_session: 发送到数据节点的数据量(以字节为单位)在此客户端会话中。
  • Ndb_api_bytes_sent_count_replica: 该副本发送到数据节点的数据量(以字节为单位)。
  • Ndb_api_bytes_sent_count_slave: 该副本发送到数据节点的数据量(以字节为单位)。
  • Ndb_api_event_bytes_count: MySQL 服务器(SQL 节点)接收的事件字节数。
  • Ndb_api_event_bytes_count_injector: NDB 二进制日志注入器线程接收的事件数据字节数。
  • Ndb_api_event_data_count: MySQL 服务器(SQL 节点)接收的行更改事件数量。
  • Ndb_api_event_data_count_injector: NDB 二进制日志注入器线程接收的行更改事件数量。
  • Ndb_api_event_nondata_count: MySQL 服务器(SQL 节点)接收的除行更改事件之外的事件数量。
  • Ndb_api_event_nondata_count_injector: NDB 二进制日志注入线程接收的事件数量,除了行更改事件之外。
  • Ndb_api_pk_op_count: 由此 MySQL 服务器(SQL 节点)基于或使用主键的操作数量。
  • Ndb_api_pk_op_count_session: 在此客户端会话中基于或使用主键的操作数量。
  • Ndb_api_pk_op_count_replica: 由此副本基于或使用主键的操作数量。
  • Ndb_api_pk_op_count_slave: 由此副本基于或使用主键的操作数量。
  • Ndb_api_pruned_scan_count: 由此 MySQL 服务器(SQL 节点)修剪为一个分区的扫描次数。
  • Ndb_api_pruned_scan_count_session: 在此客户端会话中修剪为一个分区的扫描次数。
  • Ndb_api_pruned_scan_count_replica: 由此副本修剪为一个分区的扫描次数。
  • Ndb_api_pruned_scan_count_slave: 由此副本修剪为一个分区的扫描次数。
  • Ndb_api_range_scan_count: 由此 MySQL 服务器(SQL 节点)启动的范围扫描次数。
  • Ndb_api_range_scan_count_session: 在此客户端会话中启动的范围扫描次数。
  • Ndb_api_range_scan_count_replica: 由此副本启动的范围扫描次数。
  • Ndb_api_range_scan_count_slave: 由此副本启动的范围扫描次数。
  • Ndb_api_read_row_count: 由此 MySQL 服务器(SQL 节点)读取的总行数。
  • Ndb_api_read_row_count_session: 在此客户端会话中读取的总行数。
  • Ndb_api_read_row_count_replica: 由此副本读取的总行数。
  • Ndb_api_read_row_count_slave: 该副本已读取的总行数。
  • Ndb_api_scan_batch_count: 由此 MySQL 服务器(SQL 节点)接收的行批次数量。
  • Ndb_api_scan_batch_count_session: 在此客户端会话中接收的行批次数量。
  • Ndb_api_scan_batch_count_replica: 该副本接收的行批次数量。
  • Ndb_api_scan_batch_count_slave: 该副本接收的行批次数量。
  • Ndb_api_table_scan_count: 由此 MySQL 服务器(SQL 节点)启动的表扫描次数,包括内部表的扫描。
  • Ndb_api_table_scan_count_session: 在此客户端会话中启动的表扫描次数,包括内部表的扫描。
  • Ndb_api_table_scan_count_replica: 该副本启动的表扫描次数,包括内部表的扫描。
  • Ndb_api_table_scan_count_slave: 该副本启动的表扫描次数,包括内部表的扫描。
  • Ndb_api_trans_abort_count: 由此 MySQL 服务器(SQL 节点)中止的事务数量。
  • Ndb_api_trans_abort_count_session: 在此客户端会话中中止的事务数量。
  • Ndb_api_trans_abort_count_replica: 该副本中被中止的事务数量。
  • Ndb_api_trans_abort_count_slave: 该副本中被中止的事务数量。
  • Ndb_api_trans_close_count: 由此 MySQL 服务器(SQL 节点)中止的事务数量(可能大于 TransCommitCount 和 TransAbortCount 的总和)。
  • Ndb_api_trans_close_count_session: 在此客户端会话中中止的事务数量(可能大于 TransCommitCount 和 TransAbortCount 的总和)。
  • Ndb_api_trans_close_count_replica: 此副本中中止的事务数(可能大于 TransCommitCount 和 TransAbortCount 之和)。
  • Ndb_api_trans_close_count_slave: 此副本中中止的事务数(可能大于 TransCommitCount 和 TransAbortCount 之和)。
  • Ndb_api_trans_commit_count: 此 MySQL 服务器(SQL 节点)提交的事务数。
  • Ndb_api_trans_commit_count_session: 在此客户端会话中提交的事务数。
  • Ndb_api_trans_commit_count_replica: 此副本提交的事务数。
  • Ndb_api_trans_commit_count_slave: 此副本提交的事务数。
  • Ndb_api_trans_local_read_row_count: 此 MySQL 服务器(SQL 节点)已读取的总行数。
  • Ndb_api_trans_local_read_row_count_session: 在此客户端会话中已读取的总行数。
  • Ndb_api_trans_local_read_row_count_replica: 此副本已读取的总行数。
  • Ndb_api_trans_local_read_row_count_slave: 此副本已读取的总行数。
  • Ndb_api_trans_start_count: 此 MySQL 服务器(SQL 节点)启动的事务数。
  • Ndb_api_trans_start_count_session: 在此客户端会话中启动的事务数。
  • Ndb_api_trans_start_count_replica: 此副本启动的事务数。
  • Ndb_api_trans_start_count_slave: 此副本启动的事务数。
  • Ndb_api_uk_op_count: 此 MySQL 服务器(SQL 节点)基于或使用唯一键的操作数。
  • Ndb_api_uk_op_count_session: 在此客户端会话中基于或使用唯一键的操作数。
  • Ndb_api_uk_op_count_replica: 此副本基于或使用唯一键的操作次数。
  • Ndb_api_uk_op_count_slave: 此副本基于或使用唯一键的操作次数。
  • Ndb_api_wait_exec_complete_count: 线程在等待此 MySQL 服务器(SQL 节点)完成操作执行时被阻塞的次数。
  • Ndb_api_wait_exec_complete_count_session: 客户端会话中线程在等待操作执行完成时被阻塞的次数。
  • Ndb_api_wait_exec_complete_count_replica: 线程在等待此副本完成操作执行时被阻塞的次数。
  • Ndb_api_wait_exec_complete_count_slave: 线程在等待此副本完成操作执行时被阻塞的次数。
  • Ndb_api_wait_meta_request_count: 线程等待此 MySQL 服务器(SQL 节点)基于元数据的信号时被阻塞的次数。
  • Ndb_api_wait_meta_request_count_session: 客户端会话中线程等待基于元数据的信号时被阻塞的次数。
  • Ndb_api_wait_meta_request_count_replica: 线程等待此副本基于元数据的信号时被阻塞的次数。
  • Ndb_api_wait_meta_request_count_slave: 线程等待此副本基于元数据的信号时被阻塞的次数。
  • Ndb_api_wait_nanos_count: 此 MySQL 服务器(SQL 节点)等待来自数据节点某种类型信号的总时间(以纳秒为单位)。
  • Ndb_api_wait_nanos_count_session: 客户端会话中等待来自数据节点某种类型信号的总时间(以纳秒为单位)。
  • Ndb_api_wait_nanos_count_replica: 此副本等待来自数据节点某种类型信号的总时间(以纳秒为单位)。
  • Ndb_api_wait_nanos_count_slave: 此副本等待来自数据节点的某种类型信号的总时间(以纳秒为单位)。
  • Ndb_api_wait_scan_result_count: 等待此 MySQL 服务器(SQL 节点)通过扫描信号而被阻塞的线程次数。
  • Ndb_api_wait_scan_result_count_session: 在此客户端会话中等待扫描信号而被阻塞的线程次数。
  • Ndb_api_wait_scan_result_count_replica: 等待此副本通过扫描信号而被阻塞的线程次数。
  • Ndb_api_wait_scan_result_count_slave: 等待此副本通过扫描信号而被阻塞的线程次数。
  • ndb_autoincrement_prefetch_sz: NDB 自增预取大小。
  • ndb_clear_apply_status: 导致 RESET SLAVE/RESET REPLICA 清除 ndb_apply_status 表中的所有行;默认为 ON。
  • Ndb_cluster_node_id: 当作为 NDB 集群 SQL 节点时,此服务器的节点 ID。
  • Ndb_config_from_host: NDB 集群管理服务器主机名或 IP 地址。
  • Ndb_config_from_port: 用于连接 NDB 集群管理服务器的端口。
  • Ndb_config_generation: 集群当前配置的生成编号。
  • Ndb_conflict_fn_epoch: 通过 NDB$EPOCH() NDB 复制冲突检测函数发现的行数。
  • Ndb_conflict_fn_epoch2: 通过 NDB 复制 NDB$EPOCH2()冲突检测函数发现的行数。
  • Ndb_conflict_fn_epoch2_trans: 通过 NDB 复制 NDB$EPOCH2_TRANS()冲突检测函数发现的行数。
  • Ndb_conflict_fn_epoch_trans: 通过 NDB$EPOCH_TRANS()冲突检测函数发现的行数。
  • Ndb_conflict_fn_max: 基于“较大时间戳获胜”的 NDB 复制冲突解决已应用于更新和删除操作的次数。
  • Ndb_conflict_fn_max_del_win: 基于 NDB$MAX_DELETE_WIN()结果的 NDB 复制冲突解决已应用于更新和删除操作的次数。
  • Ndb_conflict_fn_max_ins: 基于“较大时间戳获胜”的 NDB 复制冲突解决已应用于插入操作的次数。
  • Ndb_conflict_fn_max_del_win_ins: 基于 NDB$MAX_DEL_WIN_INS()结果的 NDB 复制冲突解决已应用于插入操作的次数。
  • Ndb_conflict_fn_old: 在 NDB 复制中应用“相同时间戳获胜”冲突解决的次数。
  • Ndb_conflict_last_conflict_epoch: 在此副本上检测到冲突的最近 NDB 时代。
  • Ndb_conflict_last_stable_epoch: 通过事务冲突函数发现存在冲突的行数。
  • Ndb_conflict_reflected_op_discard_count: 由于执行期间出现错误而未应用的反射操作数量。
  • Ndb_conflict_reflected_op_prepare_count: 已准备好执行的接收到的反射操作数量。
  • Ndb_conflict_refresh_op_count: 已准备好的刷新操作数量。
  • ndb_conflict_role: 副本在冲突检测和解决中扮演的角色。值为 PRIMARY、SECONDARY、PASS 或 NONE(默认)。只能在停止复制 SQL 线程时更改。详细信息请参阅文档。
  • Ndb_conflict_trans_conflict_commit_count: 需要事务冲突处理后提交的时代事务数量。
  • Ndb_conflict_trans_detect_iter_count: 提交时代事务所需的内部迭代次数。应略大于或等于 Ndb_conflict_trans_conflict_commit_count。
  • Ndb_conflict_trans_reject_count: 事务冲突函数发现后被拒绝的事务数。
  • Ndb_conflict_trans_row_conflict_count: 事务冲突函数发现的冲突行数。包括任何包含在或依赖于冲突事务中的行。
  • Ndb_conflict_trans_row_reject_count: 事务冲突函数发现后重新调整的总行数。包括 Ndb_conflict_trans_row_conflict_count 和任何包含在或依赖于冲突事务中的行。
  • ndb_data_node_neighbour: 指定集群数据节点“最接近”此 MySQL 服务器,用于事务提示和完全复制表。
  • ndb_default_column_format: 设置用于新 NDB 表的默认行格式和列格式(FIXED 或 DYNAMIC)。
  • ndb_deferred_constraints: 指定应推迟约束检查(如果支持)。通常不需要或不使用;仅用于测试目的。
  • ndb_dbg_check_shares: 检查任何残留的共享(仅限调试版本)。
  • ndb-schema-dist-timeout: 在检测模式分发超时之前等待的时间。
  • ndb_distribution: NDBCLUSTER 中新表的默认分布(KEYHASH 或 LINHASH��默认为 KEYHASH)。
  • Ndb_epoch_delete_delete_count: 检测到的删除-删除冲突数(应用删除操作,但行不存在)。
  • ndb_eventbuffer_free_percent: 达到 ndb_eventbuffer_max_alloc 设置的限制后,在事件缓冲区中恢复缓冲之前应该可用的空闲内存百分比。
  • ndb_eventbuffer_max_alloc: NDB API 可用于缓冲事件的最大内存分配。默认为 0(无限制)。
  • Ndb_execute_count: 操作向 NDB 内核进行的往返次数。
  • ndb_extra_logging: 控制在 MySQL 错误日志中记录 NDB 集群模式、连接和数据分发事件。
  • ndb_force_send: 强制立即将缓冲区发送到 NDB,而不等待其他线程。
  • ndb_fully_replicated: 新 NDB 表是否完全复制。
  • ndb_index_stat_enable: 在查询优化中使用 NDB 索引统计。
  • ndb_index_stat_option: 用于 NDB 索引统计的逗号分隔的可调整选项列表;列表不应包含空格。
  • ndb_join_pushdown: 启用将连接下推到数据节点。
  • Ndb_last_commit_epoch_server: NDB 最近提交的时期。
  • Ndb_last_commit_epoch_session: 此 NDB 客户端最近提交的时期。
  • ndb_log_apply_status: MySQL 服务器是否作为副本记录 mysql.ndb_apply_status 更新,从其直接来源接收到的更新,使用自己的二进制日志,使用自己的服务器 ID。
  • ndb_log_bin: 将更新写入 NDB 表的二进制日志。仅在启用二进制日志记录时有效,使用–log-bin 选项。
  • ndb_log_binlog_index: 将时期和二进制日志位置之间的映射插入 ndb_binlog_index 表。默认为 ON。仅在启用二进制日志记录时有效。
  • ndb_log_empty_epochs: 启用时,将没有更改的时期写入 ndb_apply_status 和 ndb_binlog_index 表,即使启用了 log_replica_updates 或 log_slave_updates。
  • ndb_log_empty_update: 启用时,产生没有更改的更新将写入 ndb_apply_status 和 ndb_binlog_index 表,即使启用了 log_replica_updates 或 log_slave_updates。
  • ndb_log_exclusive_reads: 使用独占锁记录主键读取;允许基于读取冲突进行冲突解决。
  • ndb_log_orig: 是否在 mysql.ndb_binlog_index 表中记录原始服务器的 ID 和时期。在启动 mysqld 时使用–ndb-log-orig 选项设置。
  • ndb_log_transaction_id: 是否将 NDB 事务 ID 写入二进制日志(只读)。
  • ndb_log_transaction_compression: 是否压缩 NDB 二进制日志;也可以通过启用–binlog-transaction-compression 选项在启动时启用。
  • ndb_log_transaction_compression_level_zstd: 写入 NDB 二进制日志时使用的 ZSTD 压缩级别。
  • ndb_metadata_check: 启用自动检测 NDB 元数据相对于 MySQL 数据字典的更改;默认启用。
  • Ndb_metadata_blacklist_size: NDB 二进制日志线程未能同步的 NDB 元数据对象数量;在 NDB 8.0.22 中更名为 Ndb_metadata_excluded_count。
  • ndb_metadata_check_interval: 每隔几秒执行一次相对于 MySQL 数据字典的 NDB 元数据更改检查。
  • Ndb_metadata_detected_count: NDB 元数据更改监视线程检测到更改的次数。
  • Ndb_metadata_excluded_count: NDB 二进制日志线程未能同步的 NDB 元数据对象数量。
  • ndb_metadata_sync: 触发 NDB 字典和 MySQL 数据字典之间所有更改的立即同步;同步完成后重置为 false,ndb_metadata_check 和 ndb_metadata_check_interval 值将被忽略。
  • Ndb_metadata_synced_count: 已同步的 NDB 元数据对象数量。
  • Ndb_number_of_data_nodes: 此 NDB 集群中的数据节点数;仅在服务器参与集群时设置。
  • ndb-optimization-delay: 在 NDB 表上通过 OPTIMIZE TABLE 处理一组行之间等待的毫秒数。
  • ndb_optimized_node_selection: SQL 节点选择用作事务协调器的集群数据节点的方式。
  • Ndb_pruned_scan_count: 自上次启动集群以来由 NDB 执行的扫描次数,其中可以使用分区修剪。
  • Ndb_pushed_queries_defined: API 节点尝试下推到数据节点的连接数。
  • Ndb_pushed_queries_dropped: API 节点尝试推送但失败的连接数。
  • Ndb_pushed_queries_executed: 成功推送并在数据节点上执行的连接数。
  • Ndb_pushed_reads: 通过推送连接在数据节点上执行的读取次数。
  • ndb_read_backup: 为所有 NDB 表启用从任何副本读取;使用 CREATE TABLE 或 ALTER TABLE 中的 NDB_TABLE=READ_BACKUP={0|1}为单个 NDB 表启用或禁用。
  • ndb_recv_thread_activation_threshold: 当接收线程接管集群连接的轮询时的激活阈值(以同时活动线程计量)。
  • ndb_recv_thread_cpu_mask: 将接收线程锁定到特定 CPU 的 CPU 掩码;以十六进制形式指定。详细信息请参阅文档。
  • Ndb_replica_max_replicated_epoch: 此副本上最近提交的 NDB 时期。当此值大于或等于 Ndb_conflict_last_conflict_epoch 时,尚未检测到冲突。
  • ndb_replica_batch_size: 副本应用程序的批处理大小(以字节为单位)。
  • ndb_report_thresh_binlog_epoch_slip: NDB 7.5 及更高版本:完全缓冲但尚未被二进制日志注入器线程消耗的时期数量的阈值,超过该阈值会生成 BUFFERED_EPOCHS_OVER_THRESHOLD 事件缓冲区状态消息;在 NDB 7.5 之前:在报告二进制日志状态之前滞后的时期数量的阈值。
  • ndb_report_thresh_binlog_mem_usage: 在报告二进制日志状态之前剩余内存百分比的阈值。
  • ndb_row_checksum: 启用时设置行校验和;默认启用。
  • Ndb_scan_count: 自上次启动集群以来 NDB 执行的扫描总数。
  • ndb_schema_dist_lock_wait_timeout: 在模式分发期间等待锁定的时间,超时则返回错误。
  • ndb_schema_dist_timeout: 在模式分发期间检测超时之前等待的时间。
  • ndb_schema_dist_upgrade_allowed: 允许连接到 NDB 时进行模式分发表升级。
  • ndb_show_foreign_key_mock_tables: 显示用于支持 foreign_key_checks=0 的模拟表。
  • ndb_slave_conflict_role: 副本在冲突检测和解决中扮演的角色。值为 PRIMARY、SECONDARY、PASS 或 NONE(默认)。只能在停止复制 SQL 线程时更改。有关更多信息,请参阅文档。
  • Ndb_slave_max_replicated_epoch: 最近在此副本上提交的 NDB 时代。当此值大于或等于 Ndb_conflict_last_conflict_epoch 时,尚未检测到冲突。
  • Ndb_system_name: 配置的集群系统名称;如果服务器未连接到 NDB,则为空。
  • ndb_table_no_logging: 启用此设置时创建的 NDB 表不会被检查点到磁盘(尽管会创建表模式文件)。在使用 NDBCLUSTER 创建表或更改为使用 NDBCLUSTER 时设置会持续整个表的生命周期。
  • ndb_table_temporary: NDB 表在磁盘上不是持久的:不会创建模式文件,表也不会被记录。
  • Ndb_trans_hint_count_session: 在此会话中启动的使用提示的事务数量。
  • ndb_use_copying_alter_table: 在 NDB Cluster 中使用复制 ALTER TABLE 操作。
  • ndb_use_exact_count: 强制 NDB 在 SELECT COUNT(*)查询规划期间使用记录计数以加快此类查询的速度。
  • ndb_use_transactions: 设置为 OFF,以禁用 NDB 的事务支持。除了某些特殊情况外不建议使用;有关详细信息,请参阅文档。
  • ndb_version: 显示构建和 NDB 引擎版本为整数。
  • ndb_version_string: 显示构建信息,包括 NDB 引擎版本,格式为 ndb-x.y.z。
  • ndbcluster: 启用 NDB Cluster(如果此版本的 MySQL 支持)。通过--skip-ndbcluster禁用。
  • ndbinfo: 启用 ndbinfo 插件(如果支持)。
  • ndbinfo_database: 用于 NDB 信息数据库的名称;只读。
  • ndbinfo_max_bytes: 仅用于调试。
  • ndbinfo_max_rows: 仅用于调试。
  • ndbinfo_offline: 将 ndbinfo 数据库置于离线模式,在该模式下,表或视图不返回任何行。
  • ndbinfo_show_hidden: 是否在 mysql 客户端中显示 ndbinfo 内部基本表;默认为关闭。
  • ndbinfo_table_prefix: 用于命名 ndbinfo 内部基本表的前缀;只读。
  • ndbinfo_version: ndbinfo 引擎版本;只读。
  • replica_allow_batching: 打开或关闭副本的更新批处理。
  • server_id_bits: 用于标识服务器的 server_id 中实际使用的最低有效位数,允许 NDB API 应用程序将应用程序数据存储在最高有效位中。server_id 必须小于 2 的这个值的幂。
  • skip-ndbcluster: 禁用 NDB Cluster 存储引擎。
  • slave_allow_batching: 打开或关闭副本的更新批处理。
  • transaction_allow_batching: 允许在一个事务中批处理语句。禁用 AUTOCOMMIT 以使用。

25.4.3 NDB 集群配置文件

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-config-file.html

25.4.3.1 NDB 集群配置:基本示例

25.4.3.2 NDB 集群推荐的起始配置

25.4.3.3 NDB 集群连接字符串

25.4.3.4 在 NDB 集群中定义计算机

25.4.3.5 定义 NDB 集群管理服务器

25.4.3.6 定义 NDB 集群数据节点

25.4.3.7 在 NDB 集群中定义 SQL 和其他 API 节点

25.4.3.8 定义系统

25.4.3.9 NDB 集群的 MySQL 服务器选项和变量

25.4.3.10 NDB 集群 TCP/IP 连接

25.4.3.11 使用直接连接的 NDB 集群 TCP/IP 连接

25.4.3.12 NDB 集群共享内存连接

25.4.3.13 数据节点内存管理

25.4.3.14 配置 NDB 集群发送缓冲区参数

配置 NDB 集群需要处理两个文件:

  • my.cnf:指定所有 NDB 集群可执行文件的选项。这个文件,你应该在之前使用 MySQL 时熟悉,必须被集群中运行的每个可执行文件访问。
  • config.ini:这个文件,有时被称为全局配置文件,只被 NDB 集群管理服务器读取,然后将其中包含的信息分发给参与集群的所有进程。config.ini 包含了集群中涉及的每个节点的描述。这包括数据节点的配置参数和集群中所有节点之间连接的配置参数。要快速查看此文件中可能出现的部分以及每个部分中可能放置的配置参数类型,请参阅 config.ini 文件的部分。

配置数据的缓存。 NDB 使用有状态的配置。管理服务器在重新启动时不会每次读取全局配置文件,而是在第一次启动时缓存配置,之后,只有在以下条件之一为真时才会读取全局配置文件:

  • 管理服务器是使用–initial 选项启动的。 当使用--initial时,全局配置文件将被重新读取,任何现有的缓存文件将被删除,并且管理服务器将创建一个新的配置缓存。
  • 管理服务器是使用–reload 选项启动的。 --reload选项会导致管理服务器将其缓存与全局配置文件进行比较。如果它们不同,管理服务器将创建一个新的配置缓存;任何现有的配置缓存将被保留,但不被使用。如果管理服务器的缓存和全局配置文件包含相同的配置数据,则使用现有的缓存,并且不会创建新的缓存。
  • 管理服务器是使用–config-cache=FALSE 启动的。 这会禁用--config-cache(默认启用),并可用于强制管理服务器完全绕过配置缓存。在这种情况下,管理服务器会忽略可能存在的任何配置文件,始终从config.ini文件中读取其配置数据。
  • 未找到配置缓存。 在这种情况下,管理服务器会读取全局配置文件并创建一个包含与文件中相同配置数据的缓存。

配置缓存文件。 默认情况下,管理服务器会在 MySQL 安装目录中名为mysql-cluster的目录中创建配置缓存文件。(如果在 Unix 系统上从源代码构建 NDB Cluster,则默认位置为/usr/local/mysql-cluster。)可以通过使用--configdir选项在运行时覆盖此设置。配置缓存文件是以ndb_*node_id*_config.bin.*seq_id*的模式命名的二进制文件,其中*node_id是集群中管理服务器的节点 ID,seq_id是缓存标识符。缓存文件按顺序使用seq_id进行编号,按创建顺序排列。管理服务器使用由seq_id*确定的最新缓存文件。

注意

通过删除后续配置缓存文件或重命名较早的缓存文件以使其具有更高的*seq_id*,可以回滚到先前的配置。然而,由于配置缓存文件以二进制格式编写,不应尝试手动编辑其内容。

有关 NDB Cluster 管理服务器的--configdir--config-cache--initial--reload选项的更多信息,请参见第 25.5.4 节“ndb_mgmd — NDB Cluster 管理服务器守护程序”。

我们不断改进 NDB Cluster 配置,并试图简化这个过程。虽然我们努力保持向后兼容性,但有时可能会引入不兼容的更改。在这种情况下,如果更改不向后兼容,我们会尽量提前通知 NDB Cluster 用户。如果您发现这样的更改并且我们没有记录,请按照第 1.5 节“如何报告错误或问题”中给出的说明在 MySQL 错误数据库中报告。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-config-example.html

25.4.3.1 NDB Cluster 配置:基本示例

要支持 NDB Cluster,您应该按照以下示例更新my.cnf。您也可以在调用可执行文件时在命令行上指定这些参数。

注意

此处显示的选项不应与在config.ini全局配置文件中使用的选项混淆。全局配置选项将在本节后面讨论。

代码语言:javascript复制
# my.cnf
# example additions to my.cnf for NDB Cluster
# (valid in MySQL 8.0)

# enable ndbcluster storage engine, and provide connection string for
# management server host (default port is 1186)
[mysqld]
ndbcluster
ndb-connectstring=ndb_mgmd.mysql.com

# provide connection string for management server host (default port: 1186)
[ndbd]
connect-string=ndb_mgmd.mysql.com

# provide connection string for management server host (default port: 1186)
[ndb_mgm]
connect-string=ndb_mgmd.mysql.com

# provide location of cluster configuration file
# IMPORTANT: When starting the management server with this option in the
# configuration file, the use of --initial or --reload on the command line when
# invoking ndb_mgmd is also required.
[ndb_mgmd]
config-file=/etc/config.ini

(有关连接字符串的更多信息,请参见第 25.4.3.3 节,“NDB Cluster 连接字符串”。)

代码语言:javascript复制
# my.cnf
# example additions to my.cnf for NDB Cluster
# (works on all versions)

# enable ndbcluster storage engine, and provide connection string for management
# server host to the default port 1186
[mysqld]
ndbcluster
ndb-connectstring=ndb_mgmd.mysql.com:1186

重要

一旦您在my.cnf文件中以前面显示的方式使用NDBCLUSTERndb-connectstring参数启动了一个mysqld进程,您就不能执行任何CREATE TABLEALTER TABLE语句,除非您实际启动了集群。否则,这些语句将因错误而失败。这是设计如此

您还可以在集群my.cnf文件中使用单独的[mysql_cluster]部分来设置所有可执行文件读取和使用的设置:

代码语言:javascript复制
# cluster-specific settings
[mysql_cluster]
ndb-connectstring=ndb_mgmd.mysql.com:1186

对于可以在my.cnf文件中设置的其他NDB变量,请参见第 25.4.3.9.2 节,“NDB Cluster 系统变量”。

NDB Cluster 全局配置文件按照惯例命名为config.ini(但这不是必需的)。如果需要,它会在启动时被ndb_mgmd读取,并且可以放置在任何可以被其读取的位置。配置的位置和名称使用--config-file=*path_name*在命令行上与ndb_mgmd指定。此选项没有默认值,并且如果ndb_mgmd使用配置缓存,则会被忽略。

NDB Cluster 的全局配置文件使用 INI 格式,由方括号括起的部分标题(前面有部分标题),后跟适当的参数名称和值组成。与标准 INI 格式的一个偏差是,参数名称和值可以用冒号(:)分隔,也可以用等号(=)分隔;但是,等号更受青睐。另一个偏差是,部分不是通过部分名称唯一标识的。相反,唯一部分(例如相同类型的两个不同节点)通过在部分内指定的唯一 ID 来标识。

大多数参数都定义了默认值,并且也可以在config.ini中指定。要创建默认值部分,只需在部分名称中添加单词default。例如,[ndbd]部分包含适用于特定数据节点的参数,而[ndbd default]部分包含适用于所有数据节点的参数。假设所有数据节点应使用相同的数据内存大小。要配置它们所有,创建一个包含DataMemory行以指定数据内存大小的[ndbd default]部分。

如果使用,[ndbd default]部分必须在配置文件中的任何[ndbd]部分之前。对于任何其他类型的default部分也是如此。

注意

在一些较旧的 NDB Cluster 版本中,没有NoOfReplicas的默认值,它总是必须在[ndbd default]部分中明确指定。尽管此参数现在具有默认值 2,这是大多数常见用法场景中推荐的设置,但仍建议显式设置此参数。

全局配置文件必须定义集群中涉及的计算机和节点,以及这些节点位于哪些计算机上。这里显示了一个由一个管理服务器、两个数据节点和两个 MySQL 服务器组成的集群的简单配置文件示例:

代码语言:javascript复制
# file "config.ini" - 2 data nodes and 2 SQL nodes
# This file is placed in the startup directory of ndb_mgmd (the
# management server)
# The first MySQL Server can be started from any host. The second
# can be started only on the host mysqld_5.mysql.com

[ndbd default]
NoOfReplicas= 2
DataDir= /var/lib/mysql-cluster

[ndb_mgmd]
Hostname= ndb_mgmd.mysql.com
DataDir= /var/lib/mysql-cluster

[ndbd]
HostName= ndbd_2.mysql.com

[ndbd]
HostName= ndbd_3.mysql.com

[mysqld]
[mysqld]
HostName= mysqld_5.mysql.com

注意

前面的示例旨在作为熟悉 NDB Cluster 的最小起始配置,并且几乎肯定不足以用于生产设置。请参阅第 25.4.3.2 节,“NDB Cluster 的推荐起始配置”,其中提供了一个更完整的起始配置示例。

每个节点在config.ini文件中都有自己的部分。例如,此集群有两个数据节点,因此前面的配置文件包含定义这些节点的两个[ndbd]部分。

注意

不要在config.ini文件中的部分标题相同行上放置注释;这会导致管理服务器无法启动,因为在这种情况下无法解析配置文件。

config.ini 文件的部分

config.ini配置文件中有六个不同的部分可供使用,如下列表所述:

  • [computer]: 定义了集群主机。配置可行的 NDB Cluster 不需要此部分,但在设置大型集群时可能会作为一种便利。有关更多信息,请参见第 25.4.3.4 节,“在 NDB Cluster 中定义计算机”。
  • [ndbd]: 定义了集群数据节点(ndbd进程)。有关详细信息,请参见第 25.4.3.6 节,“定义 NDB Cluster 数据节点”。
  • [mysqld]: 定义了集群的 MySQL 服务器节点(也称为 SQL 或 API 节点)。有关 SQL 节点配置的讨论,请参见第 25.4.3.7 节,“在 NDB Cluster 中定义 SQL 和其他 API 节点”。
  • [mgm][ndb_mgmd]: 定义了集群管理服务器(MGM)节点。有关管理节点配置的信息,请参见第 25.4.3.5 节,“定义 NDB Cluster 管理服务器”。
  • [tcp]: 定义了集群节点之间的 TCP/IP 连接,TCP/IP 是默认的传输协议。通常情况下,设置 NDB Cluster 不需要[tcp][tcp default]部分,因为集群会自动处理;但在某些情况下可能需要覆盖集群提供的默认值。有关可用 TCP/IP 配置参数及其使用方法,请参见第 25.4.3.10 节,“NDB Cluster TCP/IP Connections”。在某些情况下,您可能还会发现第 25.4.3.11 节,“NDB Cluster TCP/IP Connections Using Direct Connections”也很有用。
  • [shm]: 定义了节点之间的共享内存连接。在 MySQL 8.0 中,默认启用,但仍应被视为实验性。有关 SHM 互连的讨论,请参见第 25.4.3.12 节,“NDB Cluster Shared-Memory Connections”。
  • [sci]: 定义了集群数据节点之间的可扩展一致性接口连接。在 NDB 8.0 中不受支持。

您可以为每个部分定义default值。如果使用,default部分应该出现在该类型的任何其他部分之前。例如,[ndbd default]部分应该在任何[ndbd]部分之前出现在配置文件中。

NDB Cluster 参数名称不区分大小写,除非在 MySQL Server 的my.cnfmy.ini文件中指定。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-config-starting.html

25.4.3.2 NDB Cluster 推荐的起始配置

要实现 NDB Cluster 的最佳性能取决于许多因素,包括以下内容:

  • NDB Cluster 软件版本
  • 数据节点和 SQL 节点的数量
  • 硬件
  • 操作系统
  • 要存储的数据量
  • 集群要运行的负载大小和类型

因此,获得最佳配置可能是一个迭代过程,其结果可能因每个 NDB Cluster 部署的具体情况而有很大不同。当在运行集群的平台上进行更改或使用 NDB Cluster 数据的应用程序进行更改时,也可能需要更改配置。因此,不可能为所有使用场景提供一个理想的单一配置。但是,在本节中,我们提供了一个推荐的基本配置。

起始 config.ini 文件。 以下config.ini文件是配置运行 NDB Cluster 8.0 集群的推荐起点:

代码语言:javascript复制
# TCP PARAMETERS

[tcp default]
SendBufferMemory=2M
ReceiveBufferMemory=2M

# Increasing the sizes of these 2 buffers beyond the default values
# helps prevent bottlenecks due to slow disk I/O.

# MANAGEMENT NODE PARAMETERS

[ndb_mgmd default]
DataDir=*path/to/management/server/data/directory*

# It is possible to use a different data directory for each management
# server, but for ease of administration it is preferable to be
# consistent.

[ndb_mgmd]
HostName=*management-server-A-hostname*
# NodeId=*management-server-A-nodeid*

[ndb_mgmd]
HostName=*management-server-B-hostname*
# NodeId=*management-server-B-nodeid*

# Using 2 management servers helps guarantee that there is always an
# arbitrator in the event of network partitioning, and so is
# recommended for high availability. Each management server must be
# identified by a HostName. You may for the sake of convenience specify
# a NodeId for any management server, although one is allocated
# for it automatically; if you do so, it must be in the range 1-255
# inclusive and must be unique among all IDs specified for cluster
# nodes.

# DATA NODE PARAMETERS

[ndbd default]
NoOfReplicas=2

# Using two fragment replicas is recommended to guarantee availability of data;
# using only one fragment replica does not provide any redundancy, which means
# that the failure of a single data node causes the entire cluster to shut down. 
# It is also possible (but not required) in NDB 8.0 to use more than two
# fragment replicas, although two fragment replicas are sufficient to provide
# high availability. 

LockPagesInMainMemory=1

# On Linux and Solaris systems, setting this parameter locks data node
# processes into memory. Doing so prevents them from swapping to disk,
# which can severely degrade cluster performance.

DataMemory=3456M

# The value provided for DataMemory assumes 4 GB RAM
# per data node. However, for best results, you should first calculate
# the memory that would be used based on the data you actually plan to
# store (you may find the ndb_size.pl utility helpful in estimating
# this), then allow an extra 20% over the calculated values. Naturally,
# you should ensure that each data node host has at least as much
# physical memory as the sum of these two values.

# ODirect=1

# Enabling this parameter causes NDBCLUSTER to try using O_DIRECT
# writes for local checkpoints and redo logs; this can reduce load on
# CPUs. We recommend doing so when using NDB Cluster on systems running
# Linux kernel 2.6 or later.

NoOfFragmentLogFiles=300
DataDir=*path/to/data/node/data/directory*
MaxNoOfConcurrentOperations=100000

SchedulerSpinTimer=400
SchedulerExecutionTimer=100
RealTimeScheduler=1
# Setting these parameters allows you to take advantage of real-time scheduling
# of NDB threads to achieve increased throughput when using ndbd. They
# are not needed when using ndbmtd; in particular, you should not set
# RealTimeScheduler for ndbmtd data nodes.

TimeBetweenGlobalCheckpoints=1000
TimeBetweenEpochs=200
RedoBuffer=32M

# CompressedLCP=1
# CompressedBackup=1
# Enabling CompressedLCP and CompressedBackup causes, respectively, local
checkpoint files and backup files to be compressed, which can result in a space
savings of up to 50% over noncompressed LCPs and backups.

# MaxNoOfLocalScans=64
MaxNoOfTables=1024
MaxNoOfOrderedIndexes=256

[ndbd]
HostName=*data-node-A-hostname*
# NodeId=*data-node-A-nodeid*

LockExecuteThreadToCPU=1
LockMaintThreadsToCPU=0
# On systems with multiple CPUs, these parameters can be used to lock NDBCLUSTER
# threads to specific CPUs

[ndbd]
HostName=*data-node-B-hostname*
# NodeId=*data-node-B-nodeid*

LockExecuteThreadToCPU=1
LockMaintThreadsToCPU=0

# You must have an [ndbd] section for every data node in the cluster;
# each of these sections must include a HostName. Each section may
# optionally include a NodeId for convenience, but in most cases, it is
# sufficient to allow the cluster to allocate node IDs dynamically. If
# you do specify the node ID for a data node, it must be in the range 1
# to 144 inclusive and must be unique among all IDs specified for
# cluster nodes.

# SQL NODE / API NODE PARAMETERS

[mysqld]
# HostName=*sql-node-A-hostname*
# NodeId=*sql-node-A-nodeid*

[mysqld]

[mysqld]

# Each API or SQL node that connects to the cluster requires a [mysqld]
# or [api] section of its own. Each such section defines a connection
# “slot”; you should have at least as many of these sections in the
# config.ini file as the total number of API nodes and SQL nodes that
# you wish to have connected to the cluster at any given time. There is
# no performance or other penalty for having extra slots available in
# case you find later that you want or need more API or SQL nodes to
# connect to the cluster at the same time.
# If no HostName is specified for a given [mysqld] or [api] section,
# then *any* API or SQL node may use that slot to connect to the
# cluster. You may wish to use an explicit HostName for one connection slot
# to guarantee that an API or SQL node from that host can always
# connect to the cluster. If you wish to prevent API or SQL nodes from
# connecting from other than a desired host or hosts, then use a
# HostName for every [mysqld] or [api] section in the config.ini file.
# You can if you wish define a node ID (NodeId parameter) for any API or
# SQL node, but this is not necessary; if you do so, it must be in the
# range 1 to 255 inclusive and must be unique among all IDs specified
# for cluster nodes.

SQL 节点所需的 my.cnf 选项。 作为 NDB Cluster SQL 节点的 MySQL 服务器必须始终使用--ndbcluster--ndb-connectstring选项启动,可以在命令行或my.cnf中指定。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-connection-strings.html

25.4.3.3 NDB Cluster 连接字符串

除了 NDB Cluster 管理服务器(ndb_mgmd)之外,作为 NDB Cluster 的一部分的每个节点都需要一个指向管理服务器位置的连接字符串。此连接字符串用于建立与管理服务器的连接以及根据节点在集群中的角色执行其他任务。连接字符串的语法如下:

代码语言:javascript复制
[nodeid=*node_id*, ]*host-definition*[, *host-definition*[, ...]]

*host-definition*:
    *host_name*[:*port_number*]

node_id 是一个大于或等于 1 的整数,用于标识 config.ini 中的一个节点。host_name 是一个表示有效的互联网主机名或 IP 地址的字符串。port_number 是一个指向 TCP/IP 端口号的整数。

代码语言:javascript复制
example 1 (long):    "nodeid=2,myhost1:1100,myhost2:1100,198.51.100.3:1200"
example 2 (short):   "myhost1"

如果连接字符串中未提供任何值,则localhost:1186将用作默认连接字符串值。如果连接字符串中省略了*port_num*,则默认端口为 1186。该端口应始终在网络上可用,因为它已被 IANA 分配给此目的(有关详细信息,请参见www.iana.org/assignments/port-numbers)。

通过列出多个主机定义,可以指定几个冗余的管理服务器。NDB Cluster 数据或 API 节点尝试按照指定顺序在每个主机上联系连续的管理服务器,直到建立成功的连接。

还可以在连接字符串中指定一个或多个绑定地址,以供具有多个网络接口的节点用于连接到管理服务器。绑定地址由主机名或网络地址和可选端口号组成。连接字符串的增强语法如下所示:

代码语言:javascript复制
[nodeid=*node_id*, ]
    [bind-address=*host-definition*, ]
    *host-definition*[; bind-address=*host-definition*]
    *host-definition*[; bind-address=*host-definition*]
    [, ...]]

*host-definition*:
    *host_name*[:*port_number*]

如果在指定任何管理主机之前在连接字符串中使用单个绑定地址,则此地址将用作连接到任何管理主机的默认地址(除非针对给定管理服务器进行了覆盖;请参见本节后面的示例)。例如,以下连接字符串使节点使用 198.51.100.242,无论连接到哪个管理服务器:

代码语言:javascript复制
bind-address=198.51.100.242, poseidon:1186, perch:1186

如果在管理主机定义之后指定了绑定地址,则仅用于连接到该管理节点。考虑以下连接字符串:

代码语言:javascript复制
poseidon:1186;bind-address=localhost, perch:1186;bind-address=198.51.100.242

在这种情况下,节点使用 localhost 连接到运行在名为 poseidon 的主机上的管理服务器,使用 198.51.100.242 连接到运行在名为 perch 的主机上的管理服务器。

您可以指定默认绑定地址,然后为一个或多个特定的管理主机覆盖此默认值。在以下示例中,localhost用于连接运行在主机poseidon上的管理服务器;由于198.51.100.242被首先指定(在任何管理服务器定义之前),它是默认绑定地址,因此用于连接到主机perchorca上的管理服务器:

代码语言:javascript复制
bind-address=198.51.100.242,poseidon:1186;bind-address=localhost,perch:1186,orca:2200

有多种不同的方法来指定连接字符串:

  • 每个可执行文件都有自己的命令行选项,可以在启动时指定管理服务器。(请参阅各个可执行文件的文档。)
  • 也可以通过将其放置在管理服务器的my.cnf文件中的[mysql_cluster]部分中,一次性为集群中的所有节点设置连接字符串。
  • 为了向后兼容,还有另外两个选项可用,使用相同的语法:
    1. 设置NDB_CONNECTSTRING环境变量以包含连接字符串。
    2. 将每个可执行文件的连接字符串写入名为Ndb.cfg的文本文件中,并将此文件放置在可执行文件的启动目录中。

    然而,这些现在已经被弃用,不应该用于新的安装。

指定连接字符串的推荐方法是在每个可执行文件的命令行或my.cnf文件中设置它。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-computer-definition.html

25.4.3.4 在 NDB 集群中定义计算机

[computer] 部分除了作为避免为系统中的每个节点定义主机名的一种方式外,没有实际意义。这里提到的所有参数都是必需的。

  • Id 版本(或更高)NDB 8.0.13类型或单位字符串默认[…]范围…重启类型初始系统重启: 需要完全关闭集群,从备份中擦除和恢复集群文件系统,然后重新启动集群。(NDB 8.0.13)这是一个唯一标识符,用于在配置文件的其他地方引用主机计算机。 重要 计算机 ID 与用于管理、API 或数据节点的节点 ID 相同。与节点 ID 不同,您不能在 config.ini 文件的 [computer] 部分中使用 NodeId 替代 Id
  • HostName 版本(或更高)NDB 8.0.13类型或单位名称或 IP 地址默认[…]范围…重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)这是计算机的主机名或 IP 地址。

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

表 25.8 NDB 集群重启类型

符号

重启类型

描述

N

节点

可以使用滚动重启来更新该参数(参见第 25.6.5 节,“执行 NDB 集群的滚动重启”)

S

系统

所有集群节点必须完全关闭,然后重新启动,以影响此参数的更改

I

初始

数据节点必须使用 --initial 选项重新启动

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-mgm-definition.html

25.4.3.5 定义 NDB 集群管理服务器

[ndb_mgmd] 部分用于配置管理服务器的行为。如果使用多个管理服务器,您可以在 [ndb_mgmd default] 部分中指定所有服务器共同的参数。[mgm][mgm default] 是这些的旧别名,为了向后兼容而支持。

以下列表中的所有参数都是可选的,如果省略,则假定其默认值。

注意

如果既没有 ExecuteOnComputer 参数也没有 HostName 参数,则默认值为 localhost

Id

版本(或更高版本)

NDB 8.0.13

类型或单位

无符号

默认值

[…]

范围

1 - 255

重启类型

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

集群中的每个节点都有一个唯一的标识。对于管理节点,这由范围在 1 到 255 的整数值表示。此 ID 被所有内部集群消息用于寻址节点,因此对于每个 NDB 集群节点,无论节点类型如何,此 ID 必须是唯一的。

注意

数据节点 ID 必须小于 145。如果计划部署大量数据节点,最好将管理节点(和 API 节点)的节点 ID 限制在大于 144 的值。

用于标识管理节点的 Id 参数的使用已被弃用,推荐使用 NodeId。尽管 Id 仍然为向后兼容而支持,但现在会生成警告,并且可能在将来的 NDB Cluster 版本中被移除。

NodeId

版本(或更高版本)

NDB 8.0.13

类型或单位

无符号

默认值

[…]

范围

1 - 255

重启类型

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

集群中的每个节点都有一个唯一的标识。对于管理节点,这由范围在 1 到 255 的整数值表示。此 ID 被所有内部集群消息用于寻址节点,因此对于每个 NDB 集群节点,无论节点类型如何,此 ID 必须是唯一的。

注意

数据节点 ID 必须小于 145。如果计划部署大量数据节点,最好将管理节点(和 API 节点)的节点 ID 限制在大于 144 的值。

NodeId 是标识管理节点时首选的参数名称。尽管旧的 Id 仍然受支持以实现向后兼容性,但现已弃用,并在使用时生成警告;它也可能在未来的 NDB Cluster 版本中被移除。

ExecuteOnComputer

版本(或更高)

NDB 8.0.13

类型或单位

名称

默认值

[…]

范围

已弃用

是(在 NDB 7.5 中)

重启类型

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

这指的是在 config.ini 文件的 [computer] 部分中定义的计算机之一设置的 Id

重要

此参数已弃用,并可能在未来的版本中被移除。请改用 HostName 参数。

PortNumber

版本(或更高)

NDB 8.0.13

类型或单位

无符号

默认值

1186

范围

0 - 64K

重启类型

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

这是管理服务器监听配置请求和管理命令的端口号。

仅当显式请求时才能提供此节点的节点 ID。请求“任何”节点 ID 的管理服务器无法使用此节点。当在同一主机上运行多个管理服务器时,且 HostName 不足以区分进程时,可以使用此参数。用于测试目的。

HostName

版本(或更高)

NDB 8.0.13

类型或单位

名称或 IP 地址

默认值

[…]

范围

重启类型

**节点重启:**需要进行集群的滚动重启。(NDB 8.0.13)

指定此参数定义管理节点所在计算机的主机名。使用 HostName 来指定除 localhost 外的主机名。

LocationDomainId

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认值

0

范围

0 - 16

重启类型

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

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

  • 如果请求的数据在同一节点上找不到,则读取可以指向同一可用域中的另一个节点。
  • 不同可用性域中节点之间的通信保证使用 NDB 传输器的广域网支持,无需进一步手动干预。
  • 传输器的组号可以基于使用的可用性域,以便 SQL 和其他 API 节点尽可能与同一可用性域中的本地数据节点通信。
  • 仲裁者可以从不存在数据节点的可用性域中选择,或者如果找不到这样的可用性域,则可以从第三个可用性域中选择。

LocationDomainId 接受一个介于 0 和 16 之间的整数值,其中 0 是默认值;使用 0 与未设置参数相同。

LogDestination

版本(或更高版本)

NDB 8.0.13

类型或单位

{CONSOLE|SYSLOG|FILE}

默认值

FILE: 文件名=ndb_nodeid_cluster.log, 最大大小=1000000, 最大文件数=6

范围

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

此参数指定集群日志信息发送位置。在这方面有三个选项——CONSOLESYSLOGFILE——其中 FILE 是默认值:

CONSOLE 将日志输出到 stdout

代码语言:javascript复制
CONSOLE

SYSLOG 将日志发送到 syslog 设施,可能的值为 authauthprivcrondaemonftpkernlprmailnewssysloguseruucplocal0local1local2local3local4local5local6local7

注意

并非每个设施一定被每个操作系统支持。

代码语言:javascript复制
SYSLOG:facility=syslog

FILE 将集群日志输出到同一台机器上的常规文件。可以指定以下值:

  • 文件名:日志文件的名称。 在这种情况下使用的默认日志文件名是 ndb_*nodeid*_cluster.log
  • maxsize:文件在日志滚动到新文件之前可以增长到的最大大小(以字节为单位)。发生这种情况时,旧日志文件的名称将通过在文件名后附加 .N 来重命名,其中 N 是尚未使用的下一个数字。
  • maxfiles:日志文件的最大数量。
代码语言:javascript复制
FILE:filename=cluster.log,maxsize=1000000,maxfiles=6

FILE 参数的默认值是 FILE:文件名=ndb_*node_id*_cluster.log,最大大小=1000000,最大文件数=6,其中 node_id 是节点的 ID。

可以按照以下示例指定多个日志目的地,用分号分隔:

代码语言:javascript复制
CONSOLE;SYSLOG:facility=local0;FILE:filename=/var/log/mgmd

ArbitrationRank

版本(或更高版本)

NDB 8.0.13

类型或单位

0-2

默认值

1

范围

0 - 2

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

此参数用于定义哪些节点可以充当仲裁者。只有管理节点和 SQL 节点可以充当仲裁者。ArbitrationRank 可以取以下值之一:

  • 0:节点永远不会被用作仲裁者。
  • 1: 节点具有高优先级;也就是说,它优先作为仲裁者而不是低优先级节点。
  • 2: 表示低优先级节点,仅在没有更高优先级节点可用时用作仲裁者。

通常,管理服务器应通过将其ArbitrationRank设置为 1(管理节点的默认值)以及将所有 SQL 节点的设置为 0(SQL 节点的默认值)来配置为仲裁者。

您可以通过在所有管理和 SQL 节点上将ArbitrationRank设置为 0,或者在config.ini全局配置文件的[ndbd default]部分设置Arbitration参数来完全禁用仲裁。设置Arbitration会忽略ArbitrationRank的任何设置。

ArbitrationDelay

版本(或更高)

NDB 8.0.13

类型或单位

毫秒

默认值

0

范围

0 - 4294967039 (0xFFFFFEFF)

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

一个整数值,导致管理服务器对仲裁请求的响应延迟该毫秒数。默认值为 0;通常不需要更改。

DataDir

版本(或更高)

NDB 8.0.13

类型或单位

路径

默认值

.

范围

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

指定管理服务器输出文件的目录。这些文件包括集群日志文件、进程输出文件和守护进程的进程 ID(PID)文件。(对于日志文件,此位置可以通过为LogDestination设置FILE参数来覆盖,如本节前面讨论的。)

默认值为ndb_mgmd所在目录的参数。

PortNumberStats

版本(或更高)

NDB 8.0.13

类型或单位

无符号

默认值

[…]

范围

0 - 64K

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

此参数指定用于从 NDB 集群管理服务器获取统计信息的端口号。它没有默认值。

Wan

版本(或更高)

NDB 8.0.13

类型或单位

布尔值

默认值

false

范围

true, false

重启类型

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

使用 WAN TCP 设置为默认。

HeartbeatThreadPriority

版本(或更高)

NDB 8.0.13

类型或单位

字符串

默认值

[…]

范围

重启类型

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

设置管理和 API 节点的心跳线程的调度策略和优先级。

设置此参数的语法如下:

代码语言:javascript复制
HeartbeatThreadPriority = *policy*[, *priority*]

*policy*:
  {FIFO | RR}

在设置此参数时,必须指定一个策略。这是FIFO(先进先出)或RR(轮询)之一。策略值后面可以选择性地跟着优先级(一个整数)。

ExtraSendBufferMemory

版本(或更高)

NDB 8.0.13

类型或单位

字节

默认值

0

范围

0 - 32G

重启类型

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

此参数指定要分配的传输器发送缓冲区内存的总量,除了使用TotalSendBufferMemorySendBufferMemory或两者设置的内存外。

TotalSendBufferMemory

版本(或更高)

NDB 8.0.13

类型或单位

字节

默认值

0

范围

256K - 4294967039 (0xFFFFFEFF)

重启类型

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

此参数用于确定在此节点上为所有配置的传输器之间共享的发送缓冲区内存分配的总量。

如果设置了此参数,其最小允许值为 256KB;0 表示未设置该参数。有关更详细信息,请参见第 25.4.3.14 节,“配置 NDB 集群发送缓冲区参数”。

HeartbeatIntervalMgmdMgmd

版本(或更高)

NDB 8.0.13

类型或单位

毫秒

默认值

1500

范围

100 - 4294967039 (0xFFFFFEFF)

重启类型

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

指定心跳消息之间的间隔,用于确定另一个管理节点是否与此节点联系。管理节点在这些间隔之后等待 3 次才宣布连接中断;因此,默认设置为 1500 毫秒导致管理节点在超时前等待大约 1600 毫秒。

注意

在管理节点配置更改后,需要对集群执行滚动重启,以使新配置生效。

在运行中向 NDB 集群添加新的管理服务器后,还需要在修改任何现有的config.ini文件后对所有集群节点执行滚动重启。有关使用多个管理节点时出现的问题的更多信息,请参见第 25.2.7.10 节,“与多个 NDB 集群节点相关的限制”。

重新启动类型。 此部分参数描述中使用的重新启动类型信息如下表所示:

表 25.9 NDB 集群重新启动类型

符号

重新启动类型

描述

N

节点

可以使用滚动重启更新参数(请参见第 25.6.5 节,“执行 NDB 集群的滚动重启”)

S

系统

所有集群节点必须完全关闭,然后重新启动,以实现对该参数的更改

I

初始

数据节点必须使用--initial选项重新启动

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndbd-definition.html

25.4.3.6 定义 NDB 集群数据节点

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

无论您使用ndbd还是ndbmtd二进制文件来运行数据节点进程,[ndbd][ndbd default]始终用作部分名称。

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

参数NoOfReplicas应该在[ndbd default]部分中定义,因为它适用于所有集群数据节点。严格来说,设置NoOfReplicas并不是必需的,但明确设置它是一个好习惯。

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

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

参数名称和值不区分大小写,除非在 MySQL Server 的my.cnfmy.ini文件中使用,此时它们是区分大小写的。

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

所有这些参数也适用于ndbmtdndbd的多线程版本)。另外三个数据节点配置参数—MaxNoOfExecutionThreadsThreadConfigNoOfFragmentLogParts—仅适用于ndbmtd");当与ndbd一起使用时,这些参数没有效果。有关更多信息,请参阅多线程配置参数(ndbmtd)。另请参阅第 25.5.3 节,“ndbmtd — NDB Cluster 数据节点守护程序(多线程)”。

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

  • NodeId 版本(或更高版本)NDB 8.0.13类型或单位无符号默认[…]范围1 - 48版本(或更高版本)NDB 8.0.18类型或单位无符号默认[…]范围1 - 144重启类型初始系统重启: 需要完全关闭集群,从备份中擦除和恢复集群文件系统,然后重新启动集群。(NDB 8.0.13)一个唯一的节点 ID 被用作所有集群内部消息的节点地址。对于数据节点,这是一个范围在 1 到 144 之间的整数。集群中的每个节点必须具有唯一标识符。 NodeId 是唯一支持的参数名称,用于标识数据节点。
  • ExecuteOnComputer 版本(或更高版本)NDB 8.0.13类型或单位名称默认[…]范围…已弃用是(在 NDB 7.5 中)重启类型系统重启: 需要完全关闭和重新启动集群。(NDB 8.0.13)这指的是在[computer]部分中定义的一个计算机的Id设置。 重要 此参数已弃用,并可能在将来的版本中被移除。请改用HostName参数。
  • 仅当显式请求时才能提供此节点的节点 ID。请求“任何”节点 ID 的管理服务器不能使用此节点 ID。当在同一主机上运行多个管理服务器时,且HostName不足以区分进程时,可以使用此参数。用于测试目的。
  • HostName 版本(或更高版本)NDB 8.0.13类型或单位名称或 IP 地址默认localhost范围…重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)指定此参数定义数据节点所在计算机的主机名。使用HostName指定一个不同于localhost的主机名。
  • ServerPort 版本(或更高版本)NDB 8.0.13类型或单位无符号默认[…]范围1 - 64K重启类型系统重启: 需要完全关闭并重新启动集群。 (NDB 8.0.13)集群中的每个节点都使用一个端口连接到其他节点。默认情况下,这个端口是动态分配的,以确保同一台主机上的两个节点不会收到相同的端口号,因此通常不需要为此参数指定一个值。 但是,如果您需要在防火墙中打开特定端口以允许数据节点和 API 节点(包括 SQL 节点)之间的通信,您可以在config.ini文件的[ndbd]部分或(如果需要为多个数据节点执行此操作)[ndbd default]部分中设置此参数为所需端口的编号,然后打开具有该编号的端口以允许来自 SQL 节点、API 节点或两者的传入连接。 注意 数据节点到管理节点的连接是使用ndb_mgmd管理端口(管理服务器的PortNumber)进行的,因此应始终允许来自任何数据节点的对该端口的出站连接。
  • TcpBind_INADDR_ANY 将此参数设置为TRUE1会绑定IP_ADDR_ANY,以便可以从任何地方进行连接(用于自动生成的连接)。默认值为FALSE0)。
  • NodeGroup 版本(或更高版本)NDB 8.0.13类型或单位无符号默认[…]范围0 - 65536重启类型初始系统重启: 需要完全关闭集群,从备份中擦除和恢复集群文件系统,然后重新启动集群。(NDB 8.0.13)此参数可用于将数据节点分配给特定节点组。当集群首次启动时,它是只读的,并且不能用于在线重新分配数据节点到不同的节点组。通常不建议在config.ini文件的[ndbd default]部分中使用此参数,并且必须小心不要将节点分配给节点组,以使任何节点组分配了无效数量的节点。 NodeGroup参数主要用于在运行中的 NDB 集群中添加一个新的节点组,而无需执行滚动重启。为此,您应将其设置为 65536(最大值)。您不需要为所有集群数据节点设置NodeGroup值,只需为那些稍后要启动并添加到集群中作为新节点组的节点设置值。有关更多信息,请参见第 25.6.7.3 节,“在线添加 NDB 集群数据节点:详细示例”。
  • LocationDomainId 版本(或更高版本)NDB 8.0.13类型或单位整数默认值0范围0 - 16重启类型系统重启: 需要完全关闭和重启集群。(NDB 8.0.13)将数据节点分配给云中的特定可用域(也称为可用区)。通过告知NDB哪些节点位于哪些可用域中,可以在云环境中以以下方式改善性能:
    • 如果请求的数据在同一节点上找不到,则读取可以指向同一可用域中的另一个节点。
    • 不同可用域中节点之间的通信将保证使用NDB传输器的广域网支持,无需进一步手动干预。
    • 传输器的组号可以基于使用的可用域,以便 SQL 和其他 API 节点在可能的情况下与同一可用域中的本地数据节点通信。
    • 仲裁者可以从没有数据节点的可用域中选择,或者,如果找不到这样的可用域,则可以从第三个可用域中选择。

    LocationDomainId接受一个介于 0 和 16 之间的整数值,其中 0 是默认值;使用 0 与未设置参数相同。

  • NoOfReplicas 版本(或更高版本)NDB 8.0.13类型或单位整数默认值2范围1 - 2版本(或更高版本)NDB 8.0.19类型或单位整数默认值2范围1 - 4重启类型初始系统重启: 需要完全关闭集群,从备份中擦除和恢复集群文件系统,然后重新启动集群。(NDB 8.0.13)此全局参数只能在[ndbd default]部分中设置,定义了集群中每个表的片段副本数。此参数还指定了节点组的大小。节点组是存储相同信息的一组节点。 节点组是隐式形成的。第一个节点组由具有最低节点 ID 的数据节点集合形成,下一个节点组由具有下一个最低节点标识的节点集合形成,依此类推。举例来说,假设我们有 4 个数据节点,并且NoOfReplicas设置为 2。这四个数据节点的节点 ID 分别为 2、3、4 和 5。那么第一个节点组由节点 2 和 3 形成,第二个节点组由节点 4 和 5 形成。重要的是要以这样的方式配置集群,即不要将同一节点组中的节点放置在同一台计算机上,因为单个硬件故障会导致整个集群失败。 如果未提供节点 ID,则数据节点的顺序决定节点组。无论是否进行了显式分配,都可以在管理客户端的SHOW命令的输出中查看它们。 NoOfReplicas的默认值为 2。这是大多数生产环境的推荐值。在 NDB 8.0 中,将此参数的值设置为 3 或 4 在生产环境中经过充分测试和支持。 警告 将NoOfReplicas设置为 1 意味着所有集群数据只有一个副本;在这种情况下,单个数据节点的丢失会导致集群失败,因为该节点没有存储数据的额外副本。 集群中的数据节点数量必须能够被此参数的值整除。例如,如果有两个数据节点,则NoOfReplicas必须等于 1 或 2,因为 2/3 和 2/4 都会产生分数值;如果有四个数据节点,则NoOfReplicas必须等于 1、2 或 4。
  • DataDir 版本(或更高版本)NDB 8.0.13类型或单位路径默认值.范围…重启类型初始节点重启: 需要对集群进行滚动重启;每个数据节点都必须使用--initial重新启动。(NDB 8.0.13)此参数指定了跟踪文件、日志文件、pid 文件和错误日志的目录。 默认值为数据节点进程的工作目录。
  • FileSystemPath 版本(或更高版本)NDB 8.0.13类型或单位路径默认值DataDir范围…重启类型初始节点重启: 需要对集群进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)此参数指定了用于存放元数据、REDO 日志、UNDO 日志(用于磁盘数据表)和数据文件的目录。默认目录为由DataDir指定的目录。 注意 在启动ndbd进程之前,此目录必须存在。 NDB Cluster 的推荐目录层次结构包括/var/lib/mysql-cluster,在此目录下创建一个用于节点文件系统的目录。此子目录的名称包含节点 ID。例如,如果节点 ID 为 2,则此子目录命名为ndb_2_fs
  • BackupDataDir 版本(或更高版本)NDB 8.0.13类型或单位路径默认值FileSystemPath范围…重启类型初始节点重启: 需要对集群进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)此参数指定了备份存放的目录。 重要 字符串’/BACKUP’始终附加到此值。例如,如果将BackupDataDir的值设置为/var/lib/cluster-data,则所有备份都存储在/var/lib/cluster-data/BACKUP下。这也意味着有效默认备份位置是由FileSystemPath参数指定的位置下名为BACKUP的目录。
数据内存、索引内存和字符串内存

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

注意

IndexMemory已被弃用,并可能在将来的 NDB Cluster 版本中被移除。有关更多信息,请参阅后续描述。

DataMemory

版本(或更高版本)

NDB 8.0.13

类型或单位

字节

默认值

98M

范围

1M - 1T

版本(或更高版本)

NDB 8.0.19

类型或单位

字节

默认值

98M

范围

1M - 16T

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

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

在 NDB 8.0 中,最大记录大小为 30000 字节。

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

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

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

DataMemory 内存空间还包含 UNDO 信息:对于每次更新,未更改的记录的副本都会在 DataMemory 中分配。在有序表索引中,每个副本也有一个引用。唯一哈希索引仅在唯一索引列更新时更新,此时会在索引表中插入新条目,并在提交时删除旧条目。因此,还需要分配足够的内存来处理使用集群的应用程序执行的最大事务。无论如何,执行几个大型事务与使用许多较小事务相比没有任何优势,原因如下:

  • 大型事务并不比较小事务更快
  • 大型事务增加了在事务失败时丢失并必须重复的操作数量
  • 大型事务使用更多内存

NDB 8.0 中 DataMemory 的默认值为 98MB。最小值为 1MB。没有最大值,但实际上最大值必须适应,以免在达到限制时进程开始交换。此限制由机器上可用的物理 RAM 量和操作系统可能为任何一个进程分配的内存量确定。32 位操作系统通常限制每个进程为 2−4GB;64 位操作系统可以使用更多。对于大型数据库,出于这个原因,使用 64 位操作系统可能更可取。

IndexMemory

版本(或更高版本)

NDB 8.0.13

类型或单位

字节

默认值

0

范围

1M - 1T

已废弃

是(在 NDB 7.6 中)

重启类型

节点重启: 需要进行滚动重启(NDB 8.0.13)。

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

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

代码语言:javascript复制
 size  = ( (*fragments* * 32K)   (*rows* * 18) )
          * *fragment_replicas*

fragments 是片段的数量,fragment_replicas 是片段副本的数量(通常为 2),rows 是行数。如果一张表有一百万行,八个片段,和两个片段副本,那么预期的索引内存使用量如下所示:

代码语言:javascript复制
 ((8 * 32K)   (1000000 * 18)) * 2 = ((8 * 32768)   (1000000 * 18)) * 2
  = (262144   18000000) * 2
  = 18262144 * 2 = 36524288 bytes = ~35MB

有序索引的索引统计信息(在启用时)存储在mysql.ndb_index_stat_sample表中。由于此表具有哈希索引,这会增加索引内存使用量。可以计算给定有序索引的行数的上限如下:

代码语言:javascript复制
 sample_size= key_size   ((key_attributes   1) * 4)

  sample_rows = IndexStatSaveSize
                * ((0.01 * IndexStatSaveScale * log2(rows * sample_size))   1)
                / sample_size

在上述公式中,*key_size是有序索引键的大小(以字节为单位),key_attributes是有序索引键中的属性数,rows*是基本表中的行数。

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

代码语言:javascript复制
 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 8.0 中,此参数的最小和默认值为 0(零)。

StringMemory

版本(或更高版本)

NDB 8.0.13

类型或单位

% 或 字节

默认值

25

范围

0 - 4294967039 (0xFFFFFEFF)

重启类型

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

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

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

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

在大多数情况下,默认值应该足够,但当您有很多NDB表(1000 个或更多)时,可能会出现错误 773“字符串内存不足,请修改 StringMemory 配置参数:永久错误:模式错误”,在这种情况下,您应该增加此值。25(25%)不算过多,并且应该可以防止此错误在除了最极端情况之外的所有情况下再次发生。

以下示例说明了如何为表使用内存。考虑以下表定义:

代码语言:javascript复制
CREATE TABLE example (
  a INT NOT NULL,
  b INT NOT NULL,
  c INT NOT NULL,
  PRIMARY KEY(a),
  UNIQUE(b)
) ENGINE=NDBCLUSTER;

对于每条记录,有 12 字节的数据加上 12 字节的开销。没有可空列可以节省 4 字节的开销。此外,我们在列ab上有两个有序索引,每条记录大约消耗 10 字节。基表上有一个主键哈希索引,每条记录大约使用 29 字节。唯一约束由一个单独的表实现,其中b作为主键,a作为列。这个其他表在example表中每条记录额外消耗 29 字节的索引内存,以及 8 字节的记录数据加上 12 字节的开销。

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

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

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

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

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

DataMemory可以更改,但减少它可能存在风险;这样做很容易导致一个节点甚至整个 NDB 集群由于内存空间不足而无法重新启动。增加这些值应该是可以接受的,但建议像软件升级一样进行这样的升级,首先更新配置文件,然后重新启动管理服务器,然后依次重新启动每个数据节点。

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

版本(或更高版本)

NDB 8.0.13

类型或单位

无符号

默认值

5

范围

0 - 100

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

更新不会增加索引内存使用量。插入操作会立即生效;然而,直到事务提交之前,行并不会被实际删除。

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

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

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

MaxNoOfConcurrentTransactions

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

4096

范围

32 - 4294967039 (0xFFFFFEFF)

已弃用

NDB 8.0.19

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

代码语言:javascript复制
TotalNoOfConcurrentTransactions =
    (maximum number of tables accessed in any single transaction   1)
    * number of SQL nodes

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

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

所有集群数据节点必须设置此参数的相同值。这是因为当数据节点失败时,最老的存活节点会重新创建失败节点中正在进行的所有事务的事务状态。

可以使用滚动重启来更改此值,但在此过程中发生的事务数量不能超过旧值和新值中较低的那个。

默认值为 4096。

MaxNoOfConcurrentOperations

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

32K

范围

32 - 4294967039 (0xFFFFFEFF)

重启类型

节点重启: 需要进行滚动重启(NDB 8.0.13)

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

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

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

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

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

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

默认值为 32768。

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

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

对于操作记录的内存需求也是很重要的。每个记录大约消耗 1KB。

MaxNoOfLocalOperations

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

未定义

范围

32 - 4294967039 (0xFFFFFEFF)

已弃用

NDB 8.0.19

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

MaxDMLOperationsPerTransaction

版本(或更高版本)

NDB 8.0.13

类型或单位

操作(DML)

默认值

4294967295

范围

32 - 4294967295

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

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

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

  • MaxNoOfConcurrentIndexOperations 版本(或更高版本)NDB 8.0.13类型或单位整数默认值8K范围0 - 4294967039 (0xFFFFFEFF)已弃用NDB 8.0.19重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)对于使用唯一哈希索引的查询,在查询执行阶段会使用另一个临时操作记录集。此参数设置了该记录池的大小。因此,此记录仅在执行查询的一部分时分配。一旦执行完这部分,记录就会被释放。处理中止和提交所需的状态由正常操作记录处理,其中池大小由参数MaxNoOfConcurrentOperations设置。 此参数的默认值为 8192。只有在极端高并行性的罕见情况下,使用唯一哈希索引可能需要增加此值。如果数据库管理员确定集群不需要高并行性,则可以使用较小的值,从而节省内存。 此参数在 NDB 8.0 中已被弃用,并将在未来的 NDB Cluster 发布中被移除。此外,此参数与TransactionMemory参数不兼容;如果您尝试在集群配置文件(config.ini)中为两个参数设置值,则管理服务器将拒绝启动。
  • MaxNoOfFiredTriggers 版本(或更高)NDB 8.0.13类型或单位整数默认值4000范围0 - 4294967039 (0xFFFFFEFF)已弃用NDB 8.0.19重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)MaxNoOfFiredTriggers的默认值为 4000,在大多数情况下足够使用。在某些情况下,如果数据库管理员确定集群中不需要高并行性,则甚至可以减少此值。 当执行影响唯一哈希索引的操作时,将创建一条记录。在具有唯一哈希索引的表中插入或删除记录,或更新作为唯一哈希索引一部分的列,会在索引表中触发插入或删除。生成的记录用于表示等待原始操作完成的索引表操作。此操作生命周期短暂,但在包含一组唯一哈希索引的基表上有许多并行写操作的情况下,仍可能需要大量记录。 此参数在 NDB 8.0 中已被弃用,并将在未来的 NDB Cluster 发布中被移除。此外,此参数与TransactionMemory参数不兼容;如果您尝试在集群配置文件(config.ini)中为两个参数设置值,则管理服务器将拒绝启动。
  • TransactionBufferMemory 版本(或更高版本)NDB 8.0.13类型或单位字节默认值1M范围1K - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)此参数影响的内存用于跟踪更新索引表和读取唯一索引时触发的操作。此内存用于存储这些操作的键和列信息。很少情况下需要修改此参数的默认值。 TransactionBufferMemory的默认值为 1MB。 正常的读写操作使用类似的缓冲区,其使用时间更短暂。编译时参数ZATTRBUF_FILESIZE(位于ndb/src/kernel/blocks/Dbtc/Dbtc.hpp中)设置为 4000 × 128 字节(500KB)。用于键信息的类似缓冲区,ZDATABUF_FILESIZE(也在Dbtc.hpp中)包含 4000 × 16 = 62.5KB 的缓冲区空间。Dbtc是处理事务协调的模块。

事务资源分配参数。 以下列表中的参数用于在事务协调器(DBTC)中分配事务资源。将其中任何一个设置为默认值(0)将为相应资源的预估总数据节点使用量的 25%分配事务内存。这些参数的实际最大可能值通常受到数据节点可用内存量的限制;设置它们不会影响分配给数据节点的总内存量。此外,您应该记住,它们控制数据节点的保留内部记录数量,独立于MaxDMLOperationsPerTransactionMaxNoOfConcurrentIndexOperationsMaxNoOfConcurrentOperationsMaxNoOfConcurrentScansMaxNoOfConcurrentTransactionsMaxNoOfFiredTriggersMaxNoOfLocalScansTransactionBufferMemory的任何设置(参见事务参数和事务临时存储)。

  • ReservedConcurrentIndexOperations 版本(或更高版本)NDB 8.0.16类型或单位数值默认值0范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.16重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)在一个数据节点上具有专用资源的同时索引操作数。
  • ReservedConcurrentOperations 版本(或更高版本)NDB 8.0.16类型或单位数值默认值0范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.16重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)在一个数据节点上具有专用资源的事务协调器上的同时操作数。
  • ReservedConcurrentScans 版本(或更高)NDB 8.0.16类型或单位数字默认0范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.16重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)单个数据节点上具有专用资源的同时扫描数。
  • ReservedConcurrentTransactions 版本(或更高)NDB 8.0.16类型或单位数字默认0范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.16重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)单个数据节点上具有专用资源的同时事务数。
  • ReservedFiredTriggers 版本(或更高)NDB 8.0.16类型或单位数字默认0范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.16重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)单个 ndbd(DB)节点上具有专用资源的触发器数。
  • ReservedLocalScans 版本(或更高)NDB 8.0.16类型或单位数字默认0范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.16重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)单个数据节点上具有专用资源的同时片段扫描数。
  • ReservedTransactionBufferMemory 版本(或更高)NDB 8.0.16类型或单位数字默认0范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.16废弃NDB 8.0.19重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)为每个数据节点分配的键和属性数据的动态缓冲空间(以字节为单位)。
  • TransactionMemory 版本(或更高)NDB 8.0.19类型或单位字节默认0范围0 - 16384G添加NDB 8.0.19重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)重要 许多配置参数与TransactionMemory不兼容;不可能同时设置这些参数中的任何一个与TransactionMemory,如果尝试这样做,管理服务器将无法启动(参见与 TransactionMemory 不兼容的参数)。 此参数确定每个数据节点上为事务分配的内存(以字节为单位)。事务内存的设置如下处理:
    • 如果设置了TransactionMemory,则此值用于确定事务内存。
    • 否则,事务内存的计算与 NDB 8.0 之前的计算方式相同。

    与 TransactionMemory 不兼容的参数。 以下参数不能与TransactionMemory同时使用,并在 NDB 8.0 中已弃用:

    • MaxNoOfConcurrentIndexOperations
    • MaxNoOfFiredTriggers
    • MaxNoOfLocalOperations
    • MaxNoOfLocalScans

    当在集群配置文件(config.ini)中设置了TransactionMemory时,显式设置上述任何参数会阻止管理节点启动。 有关 NDB 集群数据节点中资源分配的更多信息,请参见第 25.4.3.13 节,“数据节点内存管理”。

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

BatchSizePerLocalScan

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认

256

范围

1 - 992

已弃用

NDB 8.0.19

重启类型

节点重启: 需要进行滚动重启(NDB 8.0.13)

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

BatchSizePerLocalScan与 SQL 节点中定义的BatchSize有很强的关联。

在 NDB 8.0 中已弃用。

LongMessageBuffer

版本(或更高版本)

NDB 8.0.13

类型或单位

字节

默认值

64M

范围

512K - 4294967039 (0xFFFFFEFF)

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

MaxFKBuildBatchSize

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

64

范围

16 - 512

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

MaxNoOfConcurrentScans

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

256

范围

2 - 500

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

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

MaxNoOfLocalScans

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

4 * MaxNoOfConcurrentScans * [# of data nodes] 2

范围

32 - 4294967039 (0xFFFFFEFF)

已弃用

NDB 8.0.19

重启类型

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

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

代码语言:javascript复制
4 * MaxNoOfConcurrentScans * [# data nodes]   2

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

MaxParallelCopyInstances

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认值

0

范围

0 - 64

重启类型

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

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

MaxParallelScansPerFragment

版本(或更高)

NDB 8.0.13

类型或单位

字节

默认值

256

范围

1 - 4294967039 (0xFFFFFEFF)

重启类型

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

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

MaxReorgBuildBatchSize

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认值

64

范围

16 - 512

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

MaxUIBuildBatchSize

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认

64

范围

16 - 512

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

内存分配

MaxAllocate

版本(或更高版本)

NDB 8.0.13

类型或单位

无符号

默认

32M

范围

1M - 1G

已弃用

NDB 8.0.27

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

此参数在旧版本的 NDB 集群中使用,但在 NDB 8.0 中没有效果。自 NDB 8.0.27 起已弃用,并可能在将来的版本中删除。

多个传输器

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

NodeGroupTransporters

版本(或更高版本)

NDB 8.0.20

类型或单位

整数

默认

0

范围

0 - 32

添加

NDB 8.0.20

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

NodeGroupTransporters设置为大于 LDM 线程数或 TC 线程数中较高者的数字会导致NDB使用这两个数字中较大的线程数。这意味着大于此值的值实际上会被忽略。

哈希映射大小

DefaultHashMapSize

版本(或更高版本)

NDB 8.0.13

类型或单位

LDM 线程

默认值

240

范围

0 - 3840

重启类型

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

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

在任何表使用DefaultHashMapSize等于 3840 创建或修改后在线减少此参数目前不受支持。

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

FragmentLogFileSize

版本(或更高)

NDB 8.0.13

类型或单位

字节

默认值

16M

范围

4M - 1G

重启类型

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

设置此参数使您能够直接控制重做日志文件的大小。在 NDB Cluster 在高负载下运行且在尝试打开新的片段日志文件之前无法快速关闭片段日志文件的情况下,增加片段日志文件的大小可以给集群更多时间在尝试打开每个新的片段日志文件之前。此参数的默认值为 16M。

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

InitialNoOfOpenFiles

版本(或更高)

NDB 8.0.13

类型或单位

文件

默认值

27

范围

20 - 4294967039 (0xFFFFFEFF)

重启类型

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

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

默认值为 27。

InitFragmentLogFiles

版本(或更高)

NDB 8.0.13

类型或单位

[查看值]

默认值

SPARSE

范围

SPARSE, FULL

重启类型

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

默认情况下,在数据节点进行初始启动时,片段日志文件会稀疏创建,也就是说,根据所使用的操作系统和文件系统,不一定所有字节都会写入磁盘。但是,可以通过这个参数来覆盖此行为,并强制写入所有字节,无论使用的平台和文件系统类型如何。InitFragmentLogFiles接受两个值:

  • SPARSE。片段日志文件会稀疏创建。这是默认值。
  • FULL。强制将片段日志文件的所有字节写入磁盘。

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

EnablePartialLcp

版本(或更高)

NDB 8.0.13

类型或单位

布尔值

默认

true

范围

重启类型

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

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

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

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

将此参数设置为false还会禁用自适应 LCP 控制机制使用的磁盘写入速度的计算。

LcpScanProgressTimeout

版本(或更高)

NDB 8.0.13

类型或单位

默认

60

范围

0 - 4294967039 (0xFFFFFEFF)

版本(或更高)

NDB 8.0.19

类型或单位

默认

180

范围

0 - 4294967039 (0xFFFFFEFF)

重启类型

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

本地检查点片段扫描看门狗定期检查每个本地检查点中执行的片段扫描是否没有进展,并在经过一定时间后没有进展时关闭节点。可以使用LcpScanProgressTimeout数据节点配置参数设置此间隔,该参数设置了本地检查点在 LCP 片段扫描看门狗关闭节点之前可以停滞的最长时间。

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

MaxNoOfOpenFiles

版本(或更高版本)

NDB 8.0.13

类型或单位

无符号

默认值

0

范围

20 - 4294967039 (0xFFFFFEFF)

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

MaxNoOfSavedMessages

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

25

范围

0 - 4294967039 (0xFFFFFEFF)

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

MaxLCPStartDelay

版本(或更高版本)

NDB 8.0.13

类型或单位

默认值

0

范围

0 - 600

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

NoOfFragmentLogFiles

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

16

范围

3 - 4294967039 (0xFFFFFEFF)

重启类型

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

此参数设置节点的 REDO 日志文件数量,从而分配给 REDO 日志记录的空间量。由于 REDO 日志文件是以环形方式组织的,因此非常重要的是集合中的第一个和最后一个日志文件(有时分别称为“头”和“尾”日志文件)不要相遇。当这些文件彼此靠近时,由于没有足够的空间来存储新的日志记录,节点开始中止所有涵盖更新的事务。

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

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

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

重要提示

无法“即时”更改此参数;您必须使用--initial重新启动节点。如果您希望为运行中的集群中的所有数据节点更改此值,可以使用滚动节点重新启动(在启动每个数据节点时使用--initial)。

RecoveryWork

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认值

60

范围

25 - 100

重新启动类型

节点重新启动: 需要进行滚动重新启动(NDB 8.0.13)

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

  • 每个 LCP 写入更少记录,LCP 使用更多空间
  • 重新启动期间需要更多工作

RecoveryWork的较低值意味着:

  • 每个 LCP 写入更多记录,但 LCP 在磁盘上占用的空间更少。
  • 重新启动期间的工作量减少,因此重新启动更快,但在正常操作期间需要更多工作

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

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

NDB 源代码分发包含用于模拟 LCP 的测试程序。lcp_simulator.cc可以在storage/ndb/src/kernel/blocks/backup/中找到。要在 Unix 平台上编译和运行它,请执行以下命令:

代码语言:javascript复制
$> gcc lcp_simulator.cc
$> ./a.out

此程序除了stdio.h之外没有任何依赖项,并且不需要连接到 NDB 集群或 MySQL 服务器。默认情况下,它模拟 300 个 LCP(三组 100 个 LCP,每个 LCP 由插入、更新和删除组成,依次报告每个 LCP 的大小)。您可以通过更改源代码中的recovery_workinsert_workdelete_work的值并重新编译来更改模拟。有关更多信息,请参阅程序的源代码。

InsertRecoveryWork

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认值

40

范围

0 - 70

重启类型

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

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

EnableRedoControl

版本(或更高版本)

NDB 8.0.13

类型或单位

布尔值

默认值

false

范围

版本(或更高版本)

NDB 8.0.1

类型或单位

布尔值

默认值

true

范围

重启类型

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

启用自适应检查点速度以控制重做日志使用情况。

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

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

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

注意

这些仅仅是对集群的“建议”,任何未指定的值都会恢复到显示的默认值。

  • MaxNoOfAttributes 版本(或更高)NDB 8.0.13类型或单位整数默认值1000范围32 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)此参数设置了集群中可以定义的建议最大属性数量;与MaxNoOfTables一样,它并不打算作为一个硬性上限。 (在旧版 NDB 集群中,这个参数有时被视为某些操作的硬性限制。这在 NDB 集群复制时会导致问题,当可以创建的表多于可以复制的表时,有时会导致混乱,有时会导致[或不会导致,取决于情况]可以创建超过MaxNoOfAttributes属性。) 默认值为 1000,最小可能值为 32。最大值为 4294967039。每个属性消耗大约 200 字节的存储空间,因为所有元数据都完全复制在服务器上。 在设置MaxNoOfAttributes时,重要的是提前准备好你可能想要在未来执行的任何ALTER TABLE语句。这是因为,在对 Cluster 表执行ALTER TABLE时,使用的属性数量是原始表中属性数量的 3 倍,一个良好的做法是允许这个数量的两倍。例如,如果具有最多属性数量的 NDB 集群表(greatest_number_of_attributes)有 100 个属性,那么MaxNoOfAttributes的一个良好起点将是6 * *greatest_number_of_attributes* = 600。 你还应该估算每个表的平均属性数量,并将其乘以MaxNoOfTables。如果这个值大于前一段中获得的值,则应该使用较大的值。 假设您可以无问题地创建所有所需的表,还应通过在配置参数后尝试实际的ALTER TABLE来验证此数字是否足够。如果不成功,请再次增加MaxNoOfAttributes的倍数,并再次测试。
  • MaxNoOfTables 版本(或更高)NDB 8.0.13类型或单位整数默认值128范围8 - 20320重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)为每个表和集群中每个唯一的哈希索引分配一个表对象。此参数设置了集群作为整体的建议最大表对象数;与MaxNoOfAttributes一样,它并不打算作为一个硬性上限。 (在旧版 NDB Cluster 中,此参数有时被视为某些操作的硬性限制。这导致 NDB Cluster 复制出现问题,当可以创建的表多于可复制的表时,有时会导致混乱,有时会导致[根据情况]无法创建超过MaxNoOfTables表。) 对于每个具有BLOB数据类型的属性,额外使用一个表来存储大部分BLOB数据。在定义总表数时,这些表也必须考虑在内。 此参数的默认值为 128。最小值为 8,最大值为 20320。每个表对象在每个节点上大约消耗 20KB。 注意 MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes的总和不得超过2³² − 2(4294967294)。
  • MaxNoOfOrderedIndexes 版本(或更高)NDB 8.0.13类型或单位整数默认值128范围0 - 4294967039(0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)对于集群中的每个有序索引,都会分配一个描述正在索引的内容及其存储段的对象。默认情况下,每个这样定义的索引也定义了一个有序索引。每个唯一索引和主键都有一个有序索引和一个哈希索引。MaxNoOfOrderedIndexes设置了系统中可以同时使用的有序索���的总数。 此参数的默认值为 128。每个索引对象每个节点大约消耗 10KB 的数据。 注意 MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes的总和不能超过2³² − 2(4294967294)。
  • MaxNoOfUniqueHashIndexes 版本(或更高版本)NDB 8.0.13类型或单位整数默认值64范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。(NDB 8.0.13)对于每个不是主键的唯一索引,都会分配一个特殊表,将唯一键映射到索引表的主键。默认情况下,每个唯一索引也定义了一个有序索引。要防止这种情况,必须在定义唯一索引时指定USING HASH选项。 默认值为 64。每个索引大约消耗 15KB 每个节点。 注意 MaxNoOfTablesMaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes的总和不能超过2³² − 2(4294967294)。
  • MaxNoOfTriggers 版本(或更高版本)NDB 8.0.13类型或单位整数默认值768范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。(NDB 8.0.13)每个唯一哈希索引都分配了内部更新、插入和删除触发器。(这意味着每个唯一哈希索引都创建了三个触发器。)然而,有序索引只需要一个触发器对象。备份还为集群中的每个普通表使用三个触发器对象。 集群之间的复制也使用内部触发器。 此参数设置了集群中触发器对象的最大数量。 默认值为 768。
  • MaxNoOfSubscriptions 版本(或更高版本)NDB 8.0.13类型或单位无符号默认值0范围0 - 4294967039 (0xFFFFFEFF)重启类型**节点重启:**需要进行滚动重启。 (NDB 8.0.13)NDB 集群中的每个 NDB 表都需要在 NDB 内核中进行订阅。对于一些 NDB API 应用程序,可能需要或希望更改此参数。但是,对于正常使用 MySQL 服务器作为 SQL 节点的情况,没有必要这样做。 MaxNoOfSubscriptions 的默认值为 0,被视为等于 MaxNoOfTables。每个订阅者消耗 108 字节。
  • MaxNoOfSubscribers 版本(或更高版本)NDB 8.0.13类型或单位无符号默认值0范围0 - 4294967039 (0xFFFFFEFF)重启类型**节点重启:**需要进行滚动重启。 (NDB 8.0.13)当使用 NDB 集群复制时,此参数才有意义。默认值为 0。在 NDB 8.0.26 之前,此值被视为 2 * MaxNoOfTables;从 NDB 8.0.26 开始,它被视为 2 * MaxNoOfTables 2 * [API 节点数]。每个 MySQL 服务器(一个作为复制源,另一个作为副本)的每个 NDB 表都有一个订阅者,每个订阅者使用 16 字节的内存。 在使用循环复制、多源复制和涉及超过 2 个 MySQL 服务器的其他复制设置时,应将此参数增加到包含在复制中的 mysqld 进程的数量(通常与集群数量相同,但并非总是如此)。例如,如果您有一个使用三个 NDB 集群的循环复制设置,每个集群附加一个 mysqld,并且每个 mysqld 进程既是源又是副本,则应将 MaxNoOfSubscribers 设置为 3 * MaxNoOfTables。 欲了解更多信息,请参阅第 25.7 节“NDB 集群复制”。
  • MaxNoOfConcurrentSubOperations 版本(或更高版本)NDB 8.0.13类型或单位无符号默认值256范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)此参数设置了集群中所有 API 节点可以同时执行的操作数量上限。默认值(256)对于正常操作已经足够,只有在有很多 API 节点同时执行大量操作的情况下才需要调整。

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

  • CompressedLCP 版本(或更高版本)NDB 8.0.13类型或单位布尔值默认值false范围true, false重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)将此参数设置为 1 会导致本地检查点文件被压缩。所使用的压缩方式等同于 gzip --fast,可以节省数据节点上存储未压缩检查点文件所需空间的 50% 或更多。可以为单个数据节点启用压缩的 LCP,也可以为所有数据节点启用(通过在 config.ini 文件的 [ndbd default] 部分设置此参数)。 重要 不能将压缩的本地检查点还原到不支持此功能的 MySQL 版本的集群中运行。 默认值为 0(禁用)。 在 NDB 8.0.29 之前,此参数在 Windows 平台上没有效果(BUG#106075,BUG#33727690)。
  • CrashOnCorruptedTuple 版本(或更高版本)NDB 8.0.13类型或单位布尔值默认值true范围true, false重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)当启用此参数(默认情况下),当数据节点遇到损坏的元组时,它会强制关闭。
  • Diskless 版本(或更高版本)NDB 8.0.13类型或单位true|false (1|0)默认值false范围true, false重启类型初始系统重启: 需要完全关闭集群,从备份中擦除和恢复集群文件系统,然后重新启动集群。(NDB 8.0.13)可以将 NDB 集群表指定为无磁盘,这意味着表不会被检查点到磁盘,也不会发生日志记录。这些表仅存在于主内存中。使用无磁盘表的一个后果是,表和表中的记录在崩溃时都不会存活。但是,在无磁盘模式下,可以在无磁盘计算机上运行ndbd。 重要 此功能导致整个集群以无磁盘模式运行。 启用此功能后,NDB 集群在线备份将被禁用。此外,无法进行集群的部分启动。 默认情况下,无磁盘 是禁用的。
  • 加密文件系统 版本(或更高版本)NDB 8.0.13类型或单位无符号默认值0范围0 - 1添加NDB 8.0.29重启类型初始节点重启: 需要对集群进行滚动重启;每个数据节点必须使用 --initial 重新启动。(NDB 8.0.13)加密 LCP 和表空间文件,包括撤销日志和重做日志。默认情况下禁用(0);设置为 1 以启用。 重要 当启用文件系统加密时,您必须在启动每个数据节点时提供密码,可以使用 --filesystem-password--filesystem-password-from-stdin 选项之一。否则,数据节点无法启动。 更多信息,请参阅第 25.6.14 节,“NDB 集群的文件系统加密”。
  • 延迟分配 版本(或更高版本)NDB 8.0.13类型或单位数值默认值1范围0 - 1重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)在与管理服务器建立连接后为此数据节点分配内存。默认情况下启用。
  • 锁定主内存中的页面 版本(或更高版本)NDB 8.0.13类型或单位数值默认值0范围0 - 2重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)对于许多操作系统,包括 Solaris 和 Linux,可以将进程锁定到内存中,从而避免任何交换到磁盘。这可以用来帮助保证集群的实时特性。 此参数接受整数值012,其作用如下所示:
    • 0: 禁用锁定。这是默认值。
    • 1: 在为进程分配内存后执行锁定。
    • 2: 在为进程分配内存之前执行锁定。

    如果操作系统未配置为允许非特权用户锁定页面,则使用此参数的数据节点进程可能必须以系统根用户身份运行。(LockPagesInMainMemory使用mlockall函数。从 Linux 内核 2.6.9 开始,非特权用户可以锁定内存,受max locked memory限制。有关更多信息,请参见ulimit -llinux.die.net/man/2/mlock。) 注意 在旧版 NDB Cluster 中,此参数是一个布尔值。0false是默认设置,禁用锁定。1true启用在为进程分配内存后锁定进程。NDB Cluster 8.0 将此参数的值视为错误。 重要 从glibc 2.10 开始,glibc使用每个线程的竞技场来减少共享池上的锁争用,这会消耗实际内存。一般来说,数据节点进程在启动后不需要每个线程的竞技场,因为它在启动后不执行任何内存分配。(这种分配器的差异似乎不会显著影响性能。) glibc的行为应通过MALLOC_ARENA_MAX环境变量进行配置,但在glibc 2.16 之前的机制中存在一个错误,这意味着无法将此变量设置为小于 8,因此无法回收浪费的内存。(Bug #15907219;另请参阅sourceware.org/bugzilla/show_bug.cgi?id=13137以获取有关此问题的更多信息。) 一个可能的解决方法是使用LD_PRELOAD环境变量预加载jemalloc内存分配库,以取代glibc提供的库。

  • ODirect 版本(或更高)NDB 8.0.13类型或单位布尔值默认false范围true, false重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)启用此参数会导致NDB尝试使用O_DIRECT写入进行 LCP、备份和重做日志,通常降低kswapd和 CPU 使用率。在 Linux 上使用 NDB Cluster 时,如果使用的是 2.6 或更高版本的内核,请启���ODirectODirect 默认情况下被禁用。
  • ODirectSyncFlag 版本(或更高版本)NDB 8.0.13类型或单位布尔值默认值false范围true, false重启类型节点重启: 集群需要进行滚动重启。(NDB 8.0.13)当启用此参数时,重做日志写入是这样执行的,即每个完成的文件系统写入被处理为调用fsync。如果以下条件之一为真,则忽略此参数的设置:
    • ODirect未被启用。
    • InitFragmentLogFiles设置为SPARSE

    默认情况下被禁用。

  • RestartOnErrorInsert 版本(或更高版本)NDB 8.0.13类型或单位错误代码默认值2范围0 - 4重启类型节点重启: 集群需要进行滚动重启。(NDB 8.0.13)该功能仅在构建调试版本时可访问,可以在测试中将错误插入到代码块的执行中。 该功能默认情况下被禁用。
  • StopOnError 版本(或更高版本)NDB 8.0.13类型或单位布尔值默认值1范围0, 1重启类型节点重启: 集群需要进行滚动重启。(NDB 8.0.13)该参数指定当遇到错误条件时,数据节点进程应退出还是执行自动重启。 此参数的默认值为 1;这意味着,默认情况下,错误会导致数据节点进程停止。 当遇到错误并且StopOnError为 0 时,数据节点进程将被重启。 MySQL Cluster Manager 的用户应注意,当StopOnError等于 1 时,这会阻止 MySQL Cluster Manager 代理在执行自身的重启和恢复后重新启动任何数据节点。有关更多信息,请参阅在 Linux 上启动和停止代理。
  • UseShm 版本(或更高版本)NDB 8.0.13类型或单位布尔值默认值false范围true, false重启类型节点重启: 集群需要进行滚动重启。(NDB 8.0.13)在此数据节点和在同一主机上运行的 API 节点之间启用共享内存连接。设置为 1 以启用。
控制超时、间隔和磁盘分页

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

  • TimeBetweenWatchDogCheck 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值6000范围70 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 集群需要进行滚动重启。(NDB 8.0.13)为了防止主线程在某个时刻陷入无限循环,一个“看门狗”线程会监视主线程。该参数指定了每次检查之间的毫秒数。如果进程在三次检查后仍处于相同状态,则看门狗线程将终止它。 这个参数可以很容易地进行更改以进行实验或适应本地条件。虽然可以按节点指定,但似乎没有太多理由这样做。 默认超时时间为 6000 毫秒(6 秒)。
  • TimeBetweenWatchDogCheckInitial 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值6000范围70 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 集群需要进行滚动重启。(NDB 8.0.13)这与 TimeBetweenWatchDogCheck 参数类似,不同之处在于 TimeBetweenWatchDogCheckInitial 控制了在存储节点的早期启动阶段内存分配时执行检查之间经过的时间。 默认超时时间为 6000 毫秒(6 秒)。
  • StartPartialTimeout 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值30000范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 集群需要进行滚动重启。(NDB 8.0.13)此参数指定集群在调用集群初始化程序之前等待所有数据节点启动的时间。此超时用于尽可能避免部分集群启动。 在执行集群的初始启动或初始重启时,此参数将被覆盖。 默认值为 30000 毫秒(30 秒)。0 禁用超时,此时只有在所有节点可用时集群才能启动。
  • StartPartitionedTimeout 版本(或更高)NDB 8.0.13类型或单位毫秒默认值0范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)如果集群在等待StartPartialTimeout毫秒后准备启动,但仍可能处于分区状态,则集群会等待直到此超时也过去。如果StartPartitionedTimeout设置为 0,则集群会无限期等待(2³²−1 毫秒,约为 49.71 天)。 在执行集群的初始启动或初始重启时,此参数将被覆盖。
  • StartFailureTimeout 版本(或更高)NDB 8.0.13类型或单位毫秒默认值0范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)如果数据节点在此参数指定的时间内未完成启动序列,则节点启动失败。将此参数设置为 0(默认值)意味着不应用任何数据节点超时。 对于非零值,此参数以毫秒为单位。对于包含大量数据的数据节点,应增加此参数。例如,在数据节点包含数千兆字节数据的情况下,可能需要长达 10−15 分钟(即 600000 至 1000000 毫秒)的时间来执行节点重启。
  • StartNoNodeGroupTimeout 版本(或更高)NDB 8.0.13类型或单位毫秒默认值15000范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)当数据节点配置为Nodegroup = 65536时,被视为未分配到任何节点组。完成此操作后,集群等待StartNoNodegroupTimeout毫秒,然后将这些节点视为已添加到传递给--nowait-nodes选项的列表中,并启动。默认值为15000(即,管理服务器等待 15 秒)。将此参数设置为0意味着集群无限期等待。 StartNoNodegroupTimeout必须对集群中的所有数据节点相同;因此,您应始终在config.ini文件的[ndbd default]部分中设置它,而不是为单独的数据节点设置。 查看第 25.6.7 节,“在线添加 NDB 集群数据节点”,获取更多信息。
  • HeartbeatIntervalDbDb 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值5000范围10 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)发现故障节点的主要方法之一是使用心跳。此参数说明心跳信号发送的频率以及预期接收它们的频率。无法禁用心跳。 连续错过四个心跳间隔后,节点被宣布死亡。因此,通过心跳机制发现故障的最长时间是心跳间隔的五倍。 默认心跳间隔为 5000 毫秒(5 秒)。此参数不应大幅更改,并且在节点之间不应有很大差异。如果一个节点使用 5000 毫秒,而监视它的节点使用 1000 毫秒,显然该节点会很快被宣布死亡。此参数可以在在线软件升级期间进行更改,但只能小幅增加。 另请参阅网络通信和延迟以及ConnectCheckIntervalDelay配置参数的描述。
  • HeartbeatIntervalDbApi 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值1500范围100 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)每个数据节点向每个 MySQL 服务器(SQL 节点)发送心跳信号,以确保保持联系。如果某个 MySQL 服务器未能及时发送心跳,则被声明为“死亡”,在这种情况下,所有正在进行的事务将被完成,所有资源将被释放。直到前一个 MySQL 实例启动的所有活动都完成后,SQL 节点才能重新连接。用于此确定的三个心跳标准与HeartbeatIntervalDbDb中描述的相同。 默认间隔为 1500 毫秒(1.5 秒)。此间隔可能因为每个数据节点独立监视连接到其上的 MySQL 服务器而在各个数据节点之间有所不同,与其他所有数据节点无关。 更多信息,请参见网络通信和延迟。
  • HeartbeatOrder 版本(或更高版本)NDB 8.0.13类型或单位数值默认值0范围0 - 65535重启类型系统重启: 需要完全关闭并重新启动集群。(NDB 8.0.13)数据节点以循环方式向彼此发送心跳,每个数据节点监视前一个数据节点。如果某个数据节点未检测到心跳,则该节点将声明循环中的前一个数据节点“死亡”(即,集群不再能访问)。确定数据节点死亡是全局性的;换句话说,一旦某个数据节点被声明为死亡,所有集群中的节点都将这样认为。 可能存在数据节点之间的心跳速度与其他节点对之间的心跳速度过慢(例如,由于非常低的心跳间隔或临时连接问题),导致某个数据节点被声明为死亡,尽管该节点仍可作为集群的一部分运行。 在这种情况下,数据节点之间传输心跳的顺序可能会影响某个特定数据节点是否被声明为死亡。如果此声明是不必要的,这反过来可能导致节点组的不必要丢失,从而导致集群的失败。 考虑一种设置,其中有 4 个数据节点 A、B、C 和 D 分别运行在 2 台主机 host1host2 上,并且这些数据节点组成了 2 个节点组,如下表所示: 表 25.10 四个数据节点 A、B、C、D 分别运行在两台主机 host1、host2 上;每个数据节点属于两个节点组中的一个。 节点组运行在 host1 上的节点运行在 host2 上的节点节点组 0:节点 A节点 B节点组 1:节点 C节点 D假设心跳以顺序 A->B->C->D->A 传输。在这种情况下,主机之间心跳丢失导致节点 B 宣布节点 A 死亡,节点 C 宣布节点 B 死亡。这导致节点组 0 的丢失,因此集群失败。另一方面,如果传输顺序为 A->B->D->C->A(并且所有其他条件保持不变),心跳丢失导致节点 A 和 D 被宣布死亡;在这种情况下,每个节点组都有一个存活节点,集群可以继续运行。 HeartbeatOrder 配置参数使心跳传输顺序可由用户配置。HeartbeatOrder 的默认值为零;允许在所有数据节点上使用默认值会导致心跳传输顺序由 NDB 决定。如果使用此参数,必须为集群中的每个数据节点设置为非零值(最大 65535),并且每个数据节点的值必须是唯一的;这将导致心跳传输按照它们的 HeartbeatOrder 值从最低到最高的顺序进行(然后直接从具有最高 HeartbeatOrder 值的数据节点到具有最低值的数据节点,以完成循环)。这些值不需要连续。例如,在前面概述的情况下强制心跳传输顺序为 A->B->D->C->A,您可以设置如下的 HeartbeatOrder 值: 表 25.11 HeartbeatOrder 值,用于强制心跳传输顺序为 A->B->D->C->A。 节点HeartbeatOrder 值A10B20C30D25要在运行中的 NDB 集群中使用此参数来更改心跳传输顺序,您必须首先在全局配置(config.ini)文件(或文件)中为集群中的每个数据节点设置HeartbeatOrder。要使更改生效,您必须执行以下操作之一:
    • 整个集群的完全关闭和重启。
    • 连续 2 次滚动重启集群。所有节点必须按相同顺序在两次滚动重启中重启

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

  • ConnectCheckIntervalDelay 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值0范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)该参数在一个数据节点在未通过 5 个HeartbeatIntervalDbDb毫秒的心跳检查后启用数据节点之间的连接检查。 如果某个数据节点在ConnectCheckIntervalDelay毫秒的间隔内仍未响应,则被视为可疑,并在两个这样的间隔后被视为死亡。这在存在已知延迟问题的设置中可能很有用。 该参数的默认值为 0(禁用)。
  • TimeBetweenLocalCheckpoints 版本(或更高)NDB 8.0.13类型或单位4 字节字数,以 2 为底的对数默认值20范围0 - 31重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)该参数是一个例外,因为它不指定在开始新的本地检查点之前等待的时间;相反,它用于确保在相对更新较少的集群中不执行本地检查点。在大多数更新速率较高的集群中,很可能在上一个本地检查点完成后立即开始新的本地检查点。 自上一个本地检查点开始执行的所有写操作的大小被累加。该参数也是一个例外,因为它被指定为 4 字节字数的以 2 为底的对数,所以默认值 20 意味着 4MB(4 × 2²⁰)的写操作,21 意味着 8MB,依此类推,最大值为 31,相当于 8GB 的写操作。 所有集群中的写操作都会被累加。将TimeBetweenLocalCheckpoints设置为 6 或更少意味着本地检查点会持续执行,而不受集群工作负载的影响。
  • TimeBetweenGlobalCheckpoints 版本(或更高)NDB 8.0.13类型或单位毫秒默认值2000范围20 - 32000重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)当事务提交时,在所有数据被镜像的节点的主内存中提交。然而,事务日志记录不会作为提交的一部分刷新到磁盘。这种行为背后的理由是,在至少两台自主主机上安全提交事务应该符合合理的耐久性标准。 重要的是要确保即使在最糟糕的情况下——集群完全崩溃时也能正确处理。为了保证这一点,所有在给定时间间隔内发生的事务都被放入一个全局检查点中,可以将其视为已刷新到磁盘的一组已提交事务。换句话说,在提交过程中,事务被放入一个全局检查点组中。稍后,该组的日志记录被刷新到磁盘,然后整个事务组被安全地提交到集群中所有计算机的磁盘上。 在使用固态硬盘(特别是采用 NVMe 的硬盘)与磁盘数据表时,我们建议在 NDB 8.0 中减少此值。在这种情况下,您还应确保MaxDiskDataLatency设置为适当的水平。 此参数定义全局检查点之间的间隔。默认值为 2000 毫秒。
  • TimeBetweenGlobalCheckpointsTimeout 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值120000范围10 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)此参数定义全局检查点之间的最小超时时间。默认值为 120000 毫秒。
  • TimeBetweenEpochs 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值100范围0 - 32000重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)此参数定义 NDB 集群复制的同步时期之间的间隔。默认值为 100 毫秒。 TimeBetweenEpochs 是“微型 GCPs”的实现的一部分,可用于改善 NDB 集群复制的性能。
  • TimeBetweenEpochsTimeout 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值0范围0 - 256000重新启动类型节点重新启动: 需要进行滚动重启。 (NDB 8.0.13)此参数为 NDB 集群复制的同步时期定义了一个超时。如果节点未能在此参数确定的时间内参与全局检查点,则关闭该节点。默认值为 0;换句话说,超时已禁用。 TimeBetweenEpochsTimeout 是“微型 GCPs”的实现的一部分,可用于改善 NDB 集群复制的性能。 每当 GCP 保存时间超过 1 分钟或 GCP 提交时间超过 10 秒时,当前此参数的值和警告都会写入集群日志。 将此参数设置为零会禁用由保存超时、提交超时或两者引起的 GCP 停止。此参数的最大可能值为 256000 毫秒。
  • MaxBufferedEpochs 版本(或更高)NDB 8.0.13类型或单位时期数默认100范围0 - 100000重新启动类型节点重新启动: 需要进行滚动重启。 (NDB 8.0.13)订阅节点可以滞后的未处理时期数。超过此数字会导致滞后的订阅者被断开连接。 默认值 100 对于大多数正常操作已经足够。如果订阅节点滞后足够导致断开连接,则通常是由于与进程或线程相关的网络或调度问题。 (在极少情况下,问题可能是由于NDB客户端中的错误引起的。)当时期较长时,可能希望将值设置为低于默认值。 断开连接可以防止客户端问题影响数据节点服务,导致内存不足以缓冲数据,最终关闭。相反,只有客户端受到断开连接的影响(例如二进制日志中的间隙事件),迫使客户端重新连接或重新启动进程。
  • MaxBufferedEpochBytes 版本(或更高)NDB 8.0.13类型或单位字节默认26214400范围26214400 (0x01900000) - 4294967039 (0xFFFFFEFF)重新启动类型节点重新启动: 需要进行滚动重启。 (NDB 8.0.13)由此节点分配用于缓冲时期的总字节数。
  • TimeBetweenInactiveTransactionAbortCheck 版本(或更高)NDB 8.0.13类型或单位毫秒默认值1000范围1000 - 4294967039(0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)超时处理通过检查每个事务的计时器来执行,每隔由此参数指定的时间间隔检查一次。因此,如果将此参数设置为 1000 毫秒,则每个事务每秒检查一次超时。 默认值为 1000 毫秒(1 秒)。
  • TransactionInactiveTimeout 版本(或更高)NDB 8.0.13类型或单位毫秒默认值4294967039(0xFFFFFEFF)范围0 - 4294967039(0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)此参数规定了在同一事务中的操作之间允许经过的最长时间。 此参数的默认值为4G(也是最大值)。对于需要确保没有事务保持锁定时间过长的实时数据库,应将此参数设置为相对较小的值。将其设置为 0 意味着应用程序永不超时。单位为毫秒。
  • TransactionDeadlockDetectionTimeout 版本(或更高)NDB 8.0.13类型或单位毫秒默认值1200范围50 - 4294967039(0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)当节点执行涉及事务的查询时,节点在继续之前等待集群中的其他节点响应。此参数设置了事务在数据节点内执行的时间,即事务协调器等待每个参与事务的数据节点执行请求的时间。 未响应可能出现的原因包括:
    • 节点已“死亡”
    • 操作已进入锁定队列
    • 请求执行操作的节点可能负载过重。

    此超时参数规定了事务协调器在中止事务之前等待另一个节点的查询执行的时间,并且对于节点故障处理和死锁检测都很重要。 默认超时值为 1200 毫秒(1.2 秒)。 这个参数的最小值为 50 毫秒。

  • DiskSyncSize 版本(或更高)NDB 8.0.13类型或单位字节默认值4M范围32K - 4294967039 (0xFFFFFEFF)重新启动类型节点重新启动: 需要滚动重启集群。(NDB 8.0.13)这是在将数据刷新到本地检查点文件之前存储的最大字节数。 这样做是为了防止写入缓冲,这可能会显著影响性能。 此参数旨在取代TimeBetweenLocalCheckpoints。 注意 当启用ODirect时,不需要设置DiskSyncSize;实际上,在这种情况下,其值会被简单地忽略。 默认值为 4M(4 兆字节)。
  • MaxDiskWriteSpeed 版本(或更高版本)NDB 8.0.13类型或单位数字默认值20M范围1M - 1024G重新启动类型系统重新启动: 需要完全关闭和重新启动集群。(NDB 8.0.13)设置本 NDB 集群中没有重新启动(由此数据节点或任何其他数据节点)正在进行时,本地检查点和备份操作写入磁盘的最大速率,单位为字节每秒。 若要设置数据节点重新启动时允许的磁盘写入速率上限,请使用MaxDiskWriteSpeedOwnRestart。 若要设置其他数据节点重新启动时允许的磁盘写入速率上限,请使用MaxDiskWriteSpeedOtherNodeRestart。 可通过设置MinDiskWriteSpeed来调整所有 LCP 和备份操作的磁盘写入的最小速度。
  • MaxDiskWriteSpeedOtherNodeRestart 版本(或更高版本)NDB 8.0.13类型或单位数字默认值50M范围1M - 1024G重新启动类型系统重新启动: 需要完全关闭和重新启动集群。(NDB 8.0.13)设置本 NDB 集群中的一个或多个数据节点重新启动时,本地检查点和备份操作写入磁盘的最大速率,单位为字节每秒。 要设置数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeedOwnRestart。要设置在集群中没有任何数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeed。可以通过设置MinDiskWriteSpeed来调整所有 LCP 和备份操作的最小磁盘写入速度。
  • MaxDiskWriteSpeedOwnRestart 版本(或更高)NDB 8.0.13类型或单位数值默认200M范围1M - 1024G重启类型系统重启: 需要完全关闭并重启集群。(NDB 8.0.13)设置数据节点重新启动时本地检查点和备份操作写入磁盘的最大速率,单位为每秒字节数。 要设置其他数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeedOtherNodeRestart。要设置在集群中没有任何数据节点重新启动时允许的最大磁盘写入速率,请使用MaxDiskWriteSpeed。可以通过设置MinDiskWriteSpeed来调整所有 LCP 和备份操作的最小磁盘写入速度。
  • MinDiskWriteSpeed 版本(或更高)NDB 8.0.13类型或单位数值默认10M范围1M - 1024G重启类型系统重启: 需要完全关闭并重启集群。(NDB 8.0.13)设置本地检查点和备份操作写入磁盘的最小速率,单位为每秒字节数。 可以使用参数MaxDiskWriteSpeedMaxDiskWriteSpeedOwnRestartMaxDiskWriteSpeedOtherNodeRestart来调整各种条件下 LCP 和备份的最大磁盘写入速率。有关更多信息,请参阅这些参数的描述。
  • ArbitrationTimeout 版本(或更高)NDB 8.0.13类型或单位毫秒默认7500范围10 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数指定数据节点等待仲裁器对仲裁消息的响应的时间。如果超过此时间,网络将被视为已分裂。 默认值为 7500 毫秒(7.5 秒)。
  • Arbitration 版本(或更高版本)NDB 8.0.13类型或单位枚举默认值默认范围默认,禁用,WaitExternal重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)Arbitration参数使得可以选择仲裁方案,对应于此参数的 3 个可能值之一:
    • 默认。 这使得仲裁可以按照管理和 API 节点的ArbitrationRank设置正常进行。这是默认值。
    • 禁用。config.ini文件的[ndbd default]部分设置Arbitration = Disabled可以完成与在所有管理和 API 节点上设置ArbitrationRank为 0 相同的任务。当以这种方式设置Arbitration时,任何ArbitrationRank设置都将被忽略。
    • WaitExternal。 Arbitration参数还可以配置仲裁,使得集群等待直到外部集群管理应用程序在ArbitrationTimeout确定的时间之后执行仲裁,而不是在内部处理仲裁。这可以通过在config.ini文件的[ndbd default]部分中设置Arbitration = WaitExternal来实现。对于WaitExternal设置,建议ArbitrationTimeout的时间间隔是外部集群管理器执行仲裁所需时间的 2 倍,以获得最佳效果。

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

  • RestartSubscriberConnectTimeout 版本(或更高版本)NDB 8.0.13类型或单位毫秒默认值12000范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数确定数据节点等待订阅 API 节点连接的时间。一旦超时,任何“丢失”的 API 节点将从集群中断开连接。要禁用此超时,请将 RestartSubscriberConnectTimeout 设置为 0。 虽然此参数以毫秒为单位,但超时本身会解析为下一个最大的整秒。
  • KeepAliveSendInterval 版本(或更高)NDB 8.0.13类型或单位整数默认60000范围0 - 4294967039 (0xFFFFFEFF)添加NDB 8.0.27重启类型节点重启: 需要进行集群的滚动重启。(NDB 8.0.13)从 NDB 8.0.27 开始,可以通过设置此参数来启用和控制数据节点之间发送的保持活动信号的间隔。KeepAliveSendInterval 的默认值为 60000 毫秒(一分钟);将其设置为 0 可禁用保持活动信号。介于 1 和 10 之间的值被视为 10。 在监视和断开空闲 TCP 连接的环境中,此参数可能会证明其有用,可能会在集群空闲时导致不必要的数据节点故障。

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

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

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

  • UndoIndexBuffer 版本(或更高)NDB 8.0.13类型或单位无符号默认2M范围1M - 4294967039 (0xFFFFFEFF)已弃用NDB 8.0.27重启类型节点重启: 需要进行集群的滚动重启。(NDB 8.0.13)此参数曾经设置撤销索引缓冲区的大小,但在当前版本的 NDB Cluster 中不起作用。 在 NDB 8.0.27 及更高版本中,将此参数用于集群配置文件会引发弃用警告;您应该期望它在未来的 NDB Cluster 版本中被移除。
  • UndoDataBuffer 版本(或更高)NDB 8.0.13类型或单位无符号默认16M范围1M - 4294967039 (0xFFFFFEFF)已弃用NDB 8.0.27重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数以前设置了撤销数据缓冲区的大小,但在当前版本的 NDB Cluster 中没有任何效果。 在 NDB 8.0.27 及更高版本中,集群配置文件中使用此参数会引发弃用警告;您应该期望它在未来的 NDB Cluster 版本中被移除。
  • RedoBuffer 版本(或更高版本)NDB 8.0.13类型或单位字节默认值32M范围1M - 4294967039(0xFFFFFEFF)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)所有更新活动也需要被记录。REDO 日志使得在系统重新启动时可以重放这些更新。NDB 恢复算法使用数据的“模糊”检查点以及 UNDO 日志,然后应用 REDO 日志以回放所有更改直到恢复点。 RedoBuffer设置了写入 REDO 日志的缓冲区的大小。默认值为 32MB;最小值为 1MB。 如果此缓冲区太小,NDB 存储引擎会发出错误代码 1221(REDO 日志缓冲区超载)。因此,如果您尝试在集群配置的在线更改中减少RedoBuffer的值,应该谨慎操作。 ndbmtd 为每个 LDM 线程分配一个单独的缓冲区(参见ThreadConfig)。例如,使用 4 个 LDM 线程,一个ndbmtd") 数据节点实际上有 4 个缓冲区,并为每个缓冲区分配RedoBuffer字节,总共为4 * RedoBuffer字节。
  • EventLogBufferSize 版本(或更高版本)NDB 8.0.13类型或单位字节默认值8192范围0 - 64K重启类型系统重启: 需要完全关闭并重新启动集群。(NDB 8.0.13)控制数据节点内用于 NDB 日志事件的循环缓冲区的大小。

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

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

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

LogLevelStartup

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认

1

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 1。

LogLevelShutdown

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

LogLevelStatistic

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

LogLevelCheckpoint

版本(或更高版本)

NDB 8.0.13

类型或单位

日志级别

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

LogLevelNodeRestart

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

LogLevelConnection

版本(或更高版本)

NDB 8.0.13

类型或单位

整数

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

LogLevelError

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

LogLevelCongestion

版本(或更高)

NDB 8.0.13

类型或单位

级别

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

LogLevelInfo

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认

0

范围

0 - 15

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

默认级别为 0。

MemReportFrequency

版本(或更高)

NDB 8.0.13

类型或单位

无符号

默认

0

范围

0 - 4294967039 (0xFFFFFEFF)

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

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

代码语言:javascript复制
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%)时才记录内存报告,如 Section 25.6.3.2, “NDB Cluster Log Events”中所述的统计事件讨论中提到的。

StartupStatusReportFrequency

版本(或更高)

NDB 8.0.13

类型或单位

默认值

0

范围

0 - 4294967039 (0xFFFFFEFF)

重启类型

节点重启: 需要进行滚动重启(NDB 8.0.13)

当使用--initial启动数据节点时,在启动阶段 4 期间初始化重做日志文件(参见 Section 25.6.4, “Summary of NDB Cluster Start Phases”)。当为NoOfFragmentLogFilesFragmentLogFileSize或两者设置非常大的值时,此初始化可能需要很长时间。您可以通过StartupStatusReportFrequency配置参数强制定期记录此过程的进度报告。在这种情况下,进度将在集群日志中报告,显示已初始化的文件数量和空间量,如下所示:

代码语言:javascript复制
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(默认值),则仅在重做日志文件初始化过程的开始和完成时将报告写入集群日志中。

数据节点调试参数

以下参数仅用于数据节点的测试或调试,不适用于生产环境。

  • DictTrace 版本(或更高)NDB 8.0.13类型或单位字节默认值未定义范围0 - 100重启类型节点重启: 需要对集群进行滚动重启(NDB 8.0.13)可以通过使用 DictTrace 导致为创建和删除表生成的事件进行跟踪记录。此参数仅在调试 NDB 内核代码时有用。DictTrace 接受一个整数值。默认值为 0,表示不执行任何记录;1 启用跟踪记录,2 启用额外的DBDICT调试输出的记录。
  • WatchdogImmediateKill 版本(或更高)NDB 8.0.13类型或单位布尔值默认false范围true, false重启类型节点重启: 需要对集群进行滚动重启(NDB 8.0.13)通过启用 WatchdogImmediateKill 数据节点配置参数,可以在发生看门狗问题时立即终止线程。此参数仅在调试或故障排除时使用,以获取报告执行停止时发生的确切情况的跟踪文件。

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

  • BackupDataBufferSize 版本(或更高)NDB 8.0.13类型或单位字节默认16M范围512K - 4294967039 (0xFFFFFEFF)废弃是(在 NDB 7.6 中)重启类型节点重启: 需要对集群进行滚动重启(NDB 8.0.13)在创建备份时,有两个用于将数据发送到磁盘的缓冲区。备份数据缓冲区用于填充通过扫描节点表记录的数据。一旦此缓冲区填满到指定的BackupWriteSize级别,页面将被发送到磁盘。在将数据刷新到磁盘时,备份过程可以继续填充此缓冲区,直到空间用尽。当发生这种情况时,备份过程会暂停扫描并等待一些磁盘写入完成,释放内存以便扫描可以继续。 此参数的默认值为 16MB。最小值为 512K。
  • BackupDiskWriteSpeedPct 版本(或更高)NDB 8.0.13类型或单位百分比默认50范围0 - 90重启类型节点重启: 需要对集群进行滚动重启(NDB 8.0.13)BackupDiskWriteSpeedPct 仅适用于单线程备份。随着 NDB 8.0.16 引入多线程备份,通常不再需要调整此参数,因为在多线程情况下没有影响。接下来的讨论特定于单线程备份。 在正常操作期间,数据节点尝试最大化用于本地检查点和备份的磁盘写入速度,同时保持在 MinDiskWriteSpeedMaxDiskWriteSpeed 设置的范围内。磁盘写入限速使每个 LDM 线程均等分享总预算。这允许并行 LCP 在不超出磁盘 I/O 预算的情况下进行。因为备份仅由一个 LDM 线程执行,这实际上导致预算削减,导致备份完成时间更长,并且 - 如果变化速率足够高 - 在备份日志缓冲区填充速率高于可实现的写入速率时无法完成备份。 可通过使用 BackupDiskWriteSpeedPct 配置参数来解决此问题,该参数的取值范围为 0-90(包括边界),解释为在将剩余预算分配给 LCP 线程之前,保留节点最大写入速率预算的百分比。运行备份的 LDM 线程接收备份的整个写入速率预算,以及本地检查点的写入速率预算的(减少的)份额。 此参数的默认值为 50(解释为 50%)。
  • BackupLogBufferSize 版本(或更高版本)NDB 8.0.13类型或单位字节默认值16M范围2M - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)备份日志缓冲区的作用类似于备份数据缓冲区,不同之处在于它用于生成在执行备份期间进行的所有表写入的日志。写入这些页面的原则与备份数据缓冲区相同,不同之处在于当备份日志缓冲区没有更多空间时,备份将失败。因此,备份日志缓冲区的大小必须足够大,以处理备份过程中写入活动造成的负载。参见 Section 25.6.8.3, “NDB 集群备份配置”。 对于大多数应用程序来说,默认值应该足够了。实际上,备份失败更可能是由于磁盘写入速度不足而不是备份日志缓冲区变满。如果磁盘子系统未配置为处理应用程序引起的写入负载,那么集群可能无法执行所需的操作。 最好配置集群节点,使处理器成为瓶颈,而不是磁盘或网络连接。 此参数的默认值为 16MB。
  • BackupMemory 版本(或更高)NDB 8.0.13类型或单位字节默认32M范围0 - 4294967039 (0xFFFFFEFF)已弃用是(在 NDB 7.4 中)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数已弃用,并可能在将来的 NDB 集群版本中删除。对其进行的任何设置都将被忽略。
  • BackupReportFrequency 版本(或更高)NDB 8.0.13类型或单位秒默认0范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数控制备份状态报告在备份期间在管理客户端中发出的频率,以及这些报告写入集群日志的频率(前提是集群事件日志记录已配置允许—参见日志记录和检查点)。BackupReportFrequency表示备份状态报告之间的时间间隔(以秒为单位)。 默认值为 0。
  • BackupWriteSize 版本(或更高)NDB 8.0.13类型或单位字节默认256K范围32K - 4294967039 (0xFFFFFEFF)已弃用是(在 NDB 7.6 中)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数指定备份日志和备份数据缓冲区写入磁盘的消息的默认大小。 此参数的默认值为 256KB。
  • BackupMaxWriteSize 版本(或更高)NDB 8.0.13类型或单位字节默认1M范围256K - 4294967039 (0xFFFFFEFF)已弃用是(在 NDB 7.6 中)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)此参数指定备份日志和备份数据缓冲区写入磁盘的消息的最大大小。 此参数的默认值为 1MB。
  • CompressedBackup 版本(或更高)NDB 8.0.13类型或单位布尔值默认值false范围true, false重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)启用此参数会导致备份文件被压缩。所使用的压缩方式等同于gzip --fast,可以节省数据节点上存储未压缩备份文件所需空间的 50%或更多。可以为单个数据节点或所有数据节点启用压缩备份(通过在config.ini文件的[ndbd default]部分设置此参数)。 重要 无法将压缩备份还原到不支持此功能的 MySQL 版本的集群中运行。 默认值为0(禁用)。
  • RequireEncryptedBackup 版本(或更高)NDB 8.0.22类型或单位整数默认值0范围0 - 1添加NDB 8.0.22重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)如果设置为 1,则备份必须加密。虽然可以为每个数据节点单独设置此参数,但建议在全局配置文件config.ini[ndbd default]部分中设置它。有关执行加密备份的更多信息,请参阅第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份”。 添加于 NDB 8.0.22。

注意

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

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

  • BackupDataBufferSize >= BackupWriteSize 188KB
  • BackupLogBufferSize >= BackupWriteSize 16KB
  • BackupMaxWriteSize >= BackupWriteSize
NDB 集群实时性能参数

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

注意

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

  • BuildIndexThreads 版本(或更高版本)NDB 8.0.13类型或单位数值默认值128范围0 - 128重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)此参数确定在系统或节点启动期间重建有序索引时要创建的线程数,以及在运行ndb_restore --rebuild-indexes时要创建的线程数。仅在每个数据节点的表有多个片段时支持此参数(例如,当使用CREATE TABLE中的COMMENT="NDB_TABLE=PARTITION_BALANCE=FOR_RA_BY_LDM_X_2"时)。 将此参数设置为 0(默认值)会禁用有序索引的多线程构建。 当使用ndbdndbmtd时支持此参数。 在数据节点初始重启期间,通过将TwoPassInitialNodeRestartCopy数据节点配置参数设置为TRUE,可以启用多线程构建。
  • LockExecuteThreadToCPU 版本(或更高版本)NDB 8.0.13类型或单位CPU ID 集合默认值0范围…重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)当与ndbd一起使用时,此参数(现在是一个字符串)指定分配给处理NDBCLUSTER执行线程的 CPU 的 ID。当与ndbmtd一起使用时,此参数的值是一个逗号分隔的 CPU ID 列表,用于处理执行线程。列表中的每个 CPU ID 应为范围在 0 到 65535(包括)的整数。 指定的 ID 数量应与由MaxNoOfExecutionThreads确定的执行线程数量相匹配。但是,使用此参数时不能保证线程按任何给定顺序分配到 CPU。您可以使用ThreadConfig更精细地控制此类型。 LockExecuteThreadToCPU没有默认值。
  • LockMaintThreadsToCPU 版本(或更高版本)NDB 8.0.13类型或单位CPU ID默认值0范围0 - 64K重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数指定分配给处理NDBCLUSTER维护线程的 CPU 的 ID。 此参数的值为 0 到 65535(包括 0 和 65535)之间的整数。没有默认值
  • Numa 版本(或更高版本)NDB 8.0.13类型或单位数值默认值1范围…重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数确定非均匀内存访问(NUMA)是由操作系统还是数据节点进程控制,数据节点是否使用ndbdndbmtd。默认情况下,NDB尝试在任何提供 NUMA 支持的数据节点上使用交错的 NUMA 内存分配策略。 设置Numa = 0意味着数据节点进程本身不会尝试设置内存分配策略,并允许操作系统确定此行为,操作系统可能进一步由单独的numactl工具指导。也就是说,Numa = 0会产生系统默认行为,可以通过numactl进行自定义。对于许多 Linux 系统,系统默认行为是在分配时将套接字本地内存分配给任何给定的进程。当使用ndbmtd时,这可能会有问题;这是因为nbdmtd在启动时分配所有内存,导致不平衡,给不同套接字提供不同的访问速度,尤其是在将页面锁定在主内存中时。 设置Numa = 1意味着数据节点进程使用libnuma请求交错内存分配。(这也可以在操作系统级别手动完成,使用numactl。)使用交错分配实际上告诉数据节点进程忽略非均匀内存访问,但不尝试利用快速本地内存的任何优势;相反,数据节点进程试图避免由于慢远程内存导致的不平衡。如果不希望使用交错分配,请将Numa设置为 0,以便在操作系统级别确定所需的行为。 Numa配置参数仅在具有libnuma.so的 Linux 系统上受支持。
  • RealtimeScheduler 版本(或更高)NDB 8.0.13类型或单位布尔值默认值false范围true, false重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)将此参数设置为 1 可实现数据节点线程的实时调度。 默认值为 0(禁用调度)。
  • SchedulerExecutionTimer 版本(或更高)NDB 8.0.13类型或单位微秒默认值50范围0 - 11000重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)此参数指定线程在调度器中执行的时间(以微秒为单位)后发送。将其设置为 0 可最小化响应时间;为了实现更高的吞吐量,可以增加值以延长响应时间。 默认值为 50 微秒,我们的测试显示在高负载情况下略微增加吞吐量而不会实质性延迟请求。
  • SchedulerResponsiveness 版本(或更高)NDB 8.0.13类型或单位整数默认值5范围0 - 10重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)设置NDB调度器在速度和吞吐量之间的平衡。此参数接受一个整数,其值在 0-10 的范围内,5 为默认值。较高的值相对于吞吐量提供更好的响应时间。较低的值提供增加吞吐量的同时延长响应时间。
  • SchedulerSpinTimer 版本(或更高)NDB 8.0.13类型或单位微秒默认值0范围0 - 500重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)该参数指定线程在调度程序中执行之前睡眠的时间(以微秒为单位)。 从 NDB 8.0.20 开始,如果设置了SpinMethod,则忽略对此参数的任何设置。
  • SpinMethod 版本(或更高版本)NDB 8.0.20类型或单位枚举默认值StaticSpinning范围CostBasedSpinning, LatencyOptimisedSpinning, DatabaseMachineSpinning, StaticSpinning添加NDB 8.0.20重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)该参数从 NDB 8.0.20 开始存在,但在 NDB 8.0.24 之前没有任何效果。它提供了一个简单的界面来控制数据节点上的自适应旋转,有四个可能的值提供了旋转参数值的预设值,如下列表所示:
    1. StaticSpinning(默认):将EnableAdaptiveSpinning设置为false,将SchedulerSpinTimer设置为 0。在这种情况下,SetAllowedSpinOverhead不相关。
    2. CostBasedSpinning:将EnableAdaptiveSpinning设置为true,将SchedulerSpinTimer设置为 100,将SetAllowedSpinOverhead设置为 200。
    3. LatencyOptimisedSpinning:将EnableAdaptiveSpinning设置为true,将SchedulerSpinTimer设置为 200,将SetAllowedSpinOverhead设置为 1000。
    4. DatabaseMachineSpinning:将EnableAdaptiveSpinning设置为true,将SchedulerSpinTimer设置为 500,将SetAllowedSpinOverhead设置为 10000。这适用于线程拥有自己的 CPU 的情况。

    SpinMethod修改的旋转参数如下所述:

    • SchedulerSpinTimer:这与具有相同名称的数据节点配置参数相同。SpinMethod对此参数的设置会覆盖config.ini文件中设置的任何值。
    • EnableAdaptiveSpinning: 启用或禁用自适应自旋。禁用它会导致自旋在不进行任何 CPU 资源检查的情况下执行。此参数不能直接在集群配置文件中设置,在大多数情况下也不需要设置,但可以通过在ndb_mgm管理客户端中使用DUMP 104004 1启用或使用DUMP 104004 0禁用。
    • SetAllowedSpinOverhead: 设置允许用于获得延迟的 CPU 时间量。此参数不能直接在config.ini文件中设置。在大多数情况下,由 SpinMethod 应用的设置应该是令人满意的,但如果有必要直接更改它,您可以使用DUMP 104002 *overhead*来进行设置,其中*overhead*是一个从 0 到 10000(包括)的值;有关详细信息,请参阅指定DUMP命令的描述。

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

  • TwoPassInitialNodeRestartCopy 版本(或更高版本)NDB 8.0.13类型或单位布尔值默认值true范围true, false重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)可以通过将此配置参数设置为true(默认值)来启用有序索引的多线程构建,从而在数据节点的初始重启时进行两遍复制数据。 你还必须将BuildIndexThreads设置为非零值。

多线程配置参数(ndbmtd)。 ndbmtd 默认情况下作为单线程进程运行,必须配置为使用多个线程,可以使用两种方法之一,两种方法都需要在 config.ini 文件中设置配置参数。第一种方法是简单地为 MaxNoOfExecutionThreads 配置参数设置适当的值。第二种方法可以通过 ThreadConfig 设置更复杂的规则,用于设置ndbmtd多线程。接下来的几段提供有关这些参数及其在多线程数据节点中的使用的信息。

注意

在数据节点上使用并行性进行备份需要在备份之前确保集群中的所有数据节点上都使用了多个 LDM。有关更多信息,请参见第 25.6.8.5 节,“使用并行数据节点进行 NDB 备份”,以及第 25.5.23.3 节,“从并行备份中恢复”。

AutomaticThreadConfig

版本(或更高版本)

NDB 8.0.23

类型或单位

布尔值

默认值

false

范围

true, false

添加

NDB 8.0.23

重启类型

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

当设置为 1 时,启用自动线程配置,利用数据节点可用的 CPU 数量,考虑到 tasksetnumactl、虚拟机、Docker 和其他控制应用程序可用 CPU 的方式的任何限制(在 Windows 平台上,自动线程配置使用所有在线的 CPU);或者,您可以将 NumCPUs 设置为所需的 CPU 数量(最多 1024,自动线程配置可以处理的最大 CPU 数量)。任何对 ThreadConfigMaxNoOfExecutionThreads 的设置都将被忽略。此外,启用此参数会自动禁用 ClassicFragmentation

ClassicFragmentation

版本(或更高)

NDB 8.0.23

类型或单位

布尔值

默认

true

范围

true, false

添加

NDB 8.0.23

重启类型

节点重启: 需要进行滚动重启。(NDB 8.0.13)

当启用(设置为true)时,NDB以 NDB 8.0.23 之前始终使用的方式在 LDM 之间分发片段;也就是说,每个节点的默认分区数等于每个数据节点的最小本地数据管理器(LDM)线程数。

对于新集群,不会降级到 NDB 8.0.22 或更早版本的情况,首次设置集群时将ClassicFragmentation设置为false是更可取的;这样做会导致每个节点的分区数等于PartitionsPerNode的值,确保所有分区均匀分布在所有 LDM 之间。

此参数和AutomaticThreadConfig是互斥的;启用AutomaticThreadConfig会自动禁用ClassicFragmentation

EnableMultithreadedBackup

版本(或更高)

NDB 8.0.13

类型或单位

无符号整数

默认

1

范围

0 - 1

添加

NDB 8.0.16

重启类型

节点重启: 需要进行滚动重启。(NDB 8.0.13)

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

通常情况下,此参数对于ndbmtd是启用的(设置为 1)。要强制进行可以使用旧版本ndb_restore轻松恢复的单线程备份,请通过将此参数设置为 0 来禁用多线程备份。必须对集群中的每个数据节点执行此操作。

有关更多信息,请参见第 25.6.8.5 节,“使用并行数据节点进行 NDB 备份”,以及第 25.5.23.3 节,“从并行备份中恢复”。

MaxNoOfExecutionThreads

版本(或更高)

NDB 8.0.13

类型或单位

整数

默认

2

范围

2 - 72

重启类型

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

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

启用AutomaticThreadConfig会导致忽略此参数的任何设置。

设置MaxNoOfExecutionThreads会根据文件storage/ndb/src/common/mt_thr_config.cpp中的矩阵确定每种类型的线程数。(在 NDB 8.0.30 之前,这是storage/ndb/src/kernel/vm/mt_thr_config.cpp。)此表显示了可能的MaxNoOfExecutionThreads值对应的这些线程数。

表 25.12 MaxNoOfExecutionThreads 值及相应的线程数(LQH、TC、发送、接收)。

MaxNoOfExecutionThreads 值

LDM 线程

TC 线程

发送线程

接收线程

0 … 3

1

0

0

1

4 … 6

2

0

0

1

7 … 8

4

0

0

1

9

4

2

0

1

10

4

2

1

1

11

4

3

1

1

12

6

2

1

1

13

6

3

1

1

14

6

3

1

2

15

6

3

2

2

16

8

3

1

2

17

8

4

1

2

18

8

4

2

2

19

8

5

2

2

20

10

4

2

2

21

10

5

2

2

22

10

5

2

3

23

10

6

2

3

24

12

5

2

3

25

12

6

2

3

26

12

6

3

3

27

12

7

3

3

28

12

7

3

4

29

12

8

3

4

30

12

8

4

4

31

12

9

4

4

32

16

8

3

3

33

16

8

3

4

34

16

8

4

4

35

16

9

4

4

36

16

10

4

4

37

16

10

4

5

38

16

11

4

5

39

16

11

5

5

40

20

10

4

4

41

20

10

4

5

42

20

11

4

5

43

20

11

5

5

44

20

12

5

5

45

20

12

5

6

46

20

13

5

6

47

20

13

6

6

48

24

12

5

5

49

24

12

5

6

50

24

13

5

6

51

24

13

6

6

52

24

14

6

6

53

24

14

6

7

54

24

15

6

7

55

24

15

7

7

56

24

16

7

7

57

24

16

7

8

58

24

17

7

8

59

24

17

8

8

60

24

18

8

8

61

24

18

8

9

62

24

19

8

9

63

24

19

9

9

64

32

16

7

7

65

32

16

7

8

66

32

17

7

8

67

32

17

8

8

68

32

18

8

8

69

32

18

8

9

70

32

19

8

9

71

32

20

8

9

72

32

20

8

10

MaxNoOfExecutionThreads值

LDM 线程

TC 线程

发送线程

接收线程

总是存在一个 SUMA(复制)线程。

NoOfFragmentLogParts应设置为ndbmtd")使用的 LDM 线程数,由此参数的设置确定。这个比率不应大于 4:1;明确禁止这种情况的配置。

LDM 线程的数量还确定了未明确分区的NDB表使用的分区数;这是 LDM 线程数乘以集群中的数据节点数。(如果在数据节点上使用ndbd而不是ndbmtd"),那么始终存在一个单独的 LDM 线程;在这种情况下,自动创建的分区数简单地等于数据节点数。有关更多信息,请参见第 25.2.2 节,“NDB Cluster 节点、节点组、片副本和分区”。

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

线程类型在本节稍后描述(参见ThreadConfig)。

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

对于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 线程数的整数倍。

在 NDB 8.0 中,不需要初始重启来改变此参数,这与一些旧版本的 NDB Cluster 不同。

MaxSendDelay

版本(或更高版本)

NDB 8.0.13

类型或单位

微秒

默认值

0

范围

0 - 11000

重启类型

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

此参数可使数据节点在发送数据给 API 节点之前稍作等待;在某些情况下,描述如下,这可以导致更有效地发送更大量的数据和更高的总吞吐量。

当有很多 API 节点达到饱和点或接近饱和点时,MaxSendDelay 可能会很有用,这可能导致性能的波动。当数据节点能够相对快速地将结果发送回 API 节点时,有许多小数据包需要处理,这可能比大数据包每字节处理时间更长,从而减慢 API 节点的速度;随后,数据节点再次开始发送较大的数据包。

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

NoOfFragmentLogParts

版本(或更高版本)

NDB 8.0.13

类型或单位

数值

默认值

4

范围

4, 6, 8, 10, 12, 16, 20, 24, 32

重启类型

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

设置属于此ndbmtd")的重做日志的日志文件组数。此参数的值应设置为由MaxNoOfExecutionThreads的设置确定的ndbmtd")使用的 LDM 线程数。不允许使用超过每个 LDM 的 4 个重做日志部分的配置。

有关更多信息,请参阅MaxNoOfExecutionThreads的描述。

NumCPUs

版本(或更高)

NDB 8.0.23

类型或单位

整数

默认

0

范围

0 - 1024

添加

NDB 8.0.23

重启类型

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

使自动线程配置仅使用这么多个 CPU。如果未启用AutomaticThreadConfig,则无效。

PartitionsPerNode

版本(或更高)

NDB 8.0.23

类型或单位

整数

默认

2

范围

1 - 32

添加

NDB 8.0.23

重启类型

节点重启: 需要进行滚动重启。(NDB 8.0.13)

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

虽然可以在不同的数据节点上将此参数设置为不同的值,并且这样做没有已知问题,但这也不太可能带来任何优势;因此,建议只需在全局config.ini文件的[ndbd default]部分中为所有数据节点设置一次。

如果启用ClassicFragmentation,则忽略此参数的任何设置。(请记住,启用AutomaticThreadConfig会禁用ClassicFragmentation。)

ThreadConfig

版本(或更高)

NDB 8.0.13

类型或单位

字符串

默认

‘’

范围

重启类型

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

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

代码语言:javascript复制
ThreadConfig := *entry*[,*entry*[,...]]

*entry* := *type*={*param*[,*param*[,...]]}

*type* (*NDB 8.0.22 and earlier*) := ldm | main | recv | send | rep | io | tc | watchdog | idxbld

*type* (*NDB 8.0.23 and later*) := ldm | query | recover | main | recv | send | rep | io | tc | watchdog | idxbld

*param* := count=*number*
  | cpubind=*cpu_list*
  | cpuset=*cpu_list*
  | spintime=*number*
  | realtime={0|1}
  | nosend={0|1}
  | thread_prio={0..10}
  | cpubind_exclusive=*cpu_list*
  | cpuset_exclusive=*cpu_list*

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

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

  • 给定类型的线程数量(count)。
  • 要将给定类型的线程绑定到的非独占 CPU 集。这由cpubindcpuset中的一个确定。cpubind导致每个线程(非独占)绑定到集合中的一个 CPU;cpuset意味着每个线程(非独占)绑定到指定的 CPU 集。 在 Solaris 上,您可以指定一组要将给定类型的线程专门绑定到的 CPU。cpubind_exclusive导致每个线程专门绑定到集合中的一个 CPU;cpuset_exclusive意味着每个线程专门绑定到指定的 CPU 集合。 在单个配置中只能提供cpubindcpusetcpubind_exclusivecpuset_exclusive中的一个。
  • spintime确定线程在进入睡眠状态之前旋转的等待时间(以微秒为单位)。 spintime的默认值是SchedulerSpinTimer数据节点配置参数的值。 spintime不适用于 I/O 线程、看门狗或离线索引构建线程,因此无法为这些线程类型设置。
  • realtime可以设置为 0 或 1。如果设置为 1,则线程以实时优先级运行。这也意味着无法设置thread_priorealtime参数默认设置为RealtimeScheduler数据节点配置参数的值。 无法为离线索引构建线程设置realtime
  • 通过将nosend设置为 1,您可以阻止mainldmreptc线程协助发送线程。此参数默认为 0,并且不能与其他类型的线程一起使用。
  • thread_prio是可以从 0 到 10 设置的线程优先级级别,其中 10 表示最高优先级。默认值为 5。此参数的确切影响是特定于平台的,并在本节后面描述。 无法为离线索引构建线程设置线程优先级级别。

不同平台上的 thread_prio 设置和效果。 thread_prio的实现在 Linux/FreeBSD、Solaris 和 Windows 之间有所不同。在以下列表中,我们依次讨论其对每个平台的影响:

  • Linux 和 FreeBSD: 我们将 thread_prio 映射到要提供给 nice 系统调用的值。由于进程的较低 niceness 值表示较高的进程优先级,增加 thread_prio 会降低 nice 值。 表 25.13 thread_prio 在 Linux 和 FreeBSD 上的 nice 值映射 thread_prionice 值0191162123844506-47-88-129-1610-20thread_prionice 值一些操作系统可能提供最大进程 niceness 等级为 20,但并非所有目标版本都支持;因此,我们选择 19 作为可设置的最大 nice 值。
  • Solaris: 在 Solaris 上设置 thread_prio 会设置 Solaris FX 优先级,映射如下表所示: 表 25.14 thread_prio 到 Solaris FX 优先级的映射 thread_prio 值Solaris FX 优先级0151202253304355406457508559591060thread_prio 值Solaris FX 优先级在 Solaris 上,将 thread_prio 设置为 9 会映射到特殊的 FX 优先级值 59,这意味着操作系统还会尝试强制线程独立在自己的 CPU 核心上运行。
  • Windows: 我们将 thread_prio 映射到传递给 Windows API SetThreadPriority() 函数的 Windows 线程优先级值。该映射如下表所示: 表 25.15 thread_prio 到 Windows 线程优先级的映射 thread_prio 值Windows 线程优先级0 - 1THREAD_PRIORITY_LOWEST2 - 3THREAD_PRIORITY_BELOW_NORMAL4 - 5THREAD_PRIORITY_NORMAL6 - 7THREAD_PRIORITY_ABOVE_NORMAL8 - 10THREAD_PRIORITY_HIGHEST

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

  • ldm: 处理数据的本地查询处理程序(DBLQH 内核块)。使用的 LDM 线程越多,数据就会变得更加分区化。(从 NDB 8.0.23 开始,当 ClassicFragmentation 设置为 0 时,分区的数量不再取决于 LDM 线程的数量,而是取决于 PartitionsPerNode 的值。)每个 LDM 线程维护自己的数据和索引分区集,以及自己的重做日志。在 NDB 8.0.23 之前,为 ldm 设置的值必须是 1、2、4、6、8、12、16、24 或 32 中的一个。在 NDB 8.0.23 及更高版本中,可以将 ldm 设置为范围在 1 到 332 之间的任何值;还可以将其设置为 0,前提是 mainreptc 也为 0,并且 recv 设置为 1;这将导致 ndbmtd") 模拟 ndbd。 每个 LDM 线程通常与 1 个查询线程组成一个 LDM 组。4 到 8 个 LDM 组被组合成一个轮询组。每个 LDM 线程可以在同一轮询组中的任何查询或线程的协助下执行。NDB 试图形成轮询组,以确保每个轮询组中的所有线程都锁定到附加到同一 L3 缓存的 CPU 上,范围限定在轮询组大小的范围内。 通常需要系统重启才能有效且安全地更改 LDM 线程的数量,以确保集群操作正常;在某些情况下,可以放宽此要求,后文将详细解释。当使用 MaxNoOfExecutionThreads 进行更改时,同样需要系统重启。 当使用多于默认 LDM 数量时为磁盘数据表添加大型表空间(数百 GB 或更多)可能会导致资源和 CPU 使用问题,如果 DiskPageBufferMemory 不足够大。 在 NDB 8.0.30(仅限)中,ldm 必须包含在 ThreadConfig 值字符串中。从 NDB 8.0.31 开始,如果省略此项,将创建一个 ldm 线程。这些更改可能会影响从旧版本升级;有关更多信息,请参阅 第 25.3.7 节,“NDB 集群的升级和降级”。
  • query(自 NDB 8.0.23 起添加):查询线程与 LDM 绑定,一起形成 LDM 组;仅对READ COMMITTED查询进行操作。查询线程的数量必须设置为 LDM 线程数量的 0、1、2 或 3 倍。除非将query设置为非零值或启用AutomaticThreadConfig参数,否则不使用查询线程,此时 LDM 的行为与 NDB 8.0.23 之前相同。 查询线程也充当恢复线程(见下一项),但反之则不成立。 更改查询线程数量需要重新启动节点。
  • recover(自 NDB 8.0.23 起添加):恢复线程作为 LCP 的一部分从片段中恢复数据。 更改恢复线程数量需要重新启动节点。
  • tc:事务协调器线程(DBTC内核块),包含正在进行的事务状态。在 NDB 8.0.23 及更高版本中,TC 线程的最大数量为 128;之前为 32。 最佳情况下,每个新事务可以分配给一个新的 TC 线程。在大多数情况下,每 2 个 LDM 线程需要 1 个 TC 线程就足以保证这一点。在写入数量相对较小而读取数量较多的情况下,可能只需要每 4 个 LQH 线程 1 个 TC 线程来维护事务状态。相反,在执行大量更新的应用程序中,可能需要将 TC 线程与 LDM 线程的比率接近 1(例如,4 个 LDM 线程对应 3 个 TC 线程)。 将tc设置为 0 会导致主线程处理 TC。在大多数情况下,这与将其设置为 1 效果相同。 范围:0-64(NDB 8.0.22 及更早版本:0-32)
  • main:数据字典和事务协调器(DBDIHDBTC内核块),提供模式管理。在 NDB 8.0.23 之前,这总是由一个专用线程处理,从 NDB 8.0.23 开始,也可以指定零个或两个主线程。 范围:
    • NDB 8.0.22 及更早版本:仅为 1。 NDB 8.0.23 及更高版本:0-2。 将main设置为 0 并将rep设置为 1 会导致main块放置到rep线程中;组合线程在ndbinfo.threads表中显示为main_rep。这与将rep设置为 1 且main设置为 0 效果相同。 还可以将mainrep都设置为 0,此时两个线程都放置在第一个recv线程中;生成的组合线程在threads表中命名为main_rep_recv

    在 NDB 8.0.30(仅限)中,main必须包含在ThreadConfig值字符串中。从 NDB 8.0.31 开始,如果省略了这一点,将创建一个main线程。这些更改可能会影响从先前版本的升级;有关更多信息,请参见第 25.3.7 节,“NDB 集群升级和降级”。

  • recv: 接收线程(CMVMI内核块)。每个接收线程处理一个或多个用于与 NDB 集群中其他节点通信的套接字,每个节点一个套接字。NDB 集群支持多个接收线程;最多有 16 个这样的线程。 范围:
    • NDB 8.0.22 及更早版本: 1 - 16
    • NDB 8.0.23 及更高版本: 1 - 64

    在 NDB 8.0.30(仅限)中,recv必须包含在ThreadConfig值字符串中。从 NDB 8.0.31 开始,如果省略了这一点,将创建一个recv线程。这些更改可能会影响从先前版本的升级;有关更多信息,请参见第 25.3.7 节,“NDB 集群升级和降级”。

  • send: 发送线程(CMVMI内核块)。为了增加吞吐量,可以从一个或多个单独的专用线程执行发送(最多 8 个)。 在 NDB 8.0.20 及更高版本中,由于多线程实现的更改,使用许多发送线程可能会对可伸缩性产生不利影响。 以前,所有线程直接处理自己的发送;通过将发送线程数设置为 0(当MaxNoOfExecutionThreads设置小于 10 时也会发生这种情况)。虽然这样做可能对吞吐量产生不利影响,但在某些情况下也可能提供降低的延迟。 范围:
    • NDB 8.0.22 及更早版本: 0 - 16
    • NDB 8.0.23 及更高版本: 0 - 64
  • rep: 复制线程(SUMA内核块)。在 NDB 8.0.23 之前,异步复制操作始终由单个专用线程处理。从 NDB 8.0.23 开始��此线程可以与主线程合并(请参阅范围信息)。 范围:
    • NDB 8.0.22 及更早版本: 仅限 1。
    • NDB 8.0.23 及更高版本: 0-1。 将rep设置为 0,main设置为 1 会导致rep块放置在main线程中;合并线程显示在ndbinfo.threads表中为main_rep。这实际上与将main设置为 1,rep设置为 0 相同。 还可以将mainrep都设置为 0,这样两个线程都放置在第一个recv线程中;生成的合并线程在threads表中命名为main_rep_recv

    在 NDB 8.0.30(仅限)中,rep 必须包含在 ThreadConfig 值字符串中。从 NDB 8.0.31 开始,如果省略了此项,则会创建一个 rep 线程。这些更改可能会影响从先前版本升级;有关更多信息,请参见 第 25.3.7 节,“NDB 集群升级和降级”。

  • io:文件系统和其他杂项操作。这些不是要求严格的任务,总是由单独的专用 I/O 线程作为一组处理。 范围:仅限 1。
  • watchdog:与此类型相关的参数设置实际上应用于几个线程,每个线程都有特定的用途。这些线程包括 SocketServer 线程,用于接收其他节点的连接设置;SocketClient 线程,尝试建立与其他节点的连接;以及检查线程进展的线程看门狗线程。 范围:仅限 1。
  • idxbld:离线索引构建线程。与之前列出的其他线程类型不同,这些是临时线程,仅在节点或系统重启时创建和使用,或在运行 ndb_restore --rebuild-indexes 时使用。它们可能绑定到与永久线程类型绑定的 CPU 集合重叠的 CPU 集合。 thread_priorealtimespintime 值不能用于离线索引构建线程。此类线程中 count 也会被忽略。 如果未指定 idxbld,则默认行为如下:
    • 如果 I/O 线程未绑定,则离线索引构建线程也不会被绑定,并且这些线程会使用任何可用的核心。
    • 如果 I/O 线程已绑定,则离线索引构建线程将绑定到整个绑定线程集合,因为这些线程不应该有其他任务要执行。

    范围:0 - 1。

通常更改 ThreadConfig 需要系统初始重启,但在某些情况下可以放宽此要求:

  • 如果更改后,LDM 线程数与之前相同,则只需要简单的节点重启(滚动重启,或 N)即可实施更改。
  • 否则(即,如果 LDM 线程数发生变化),仍然可以使用节点初始重启(NI)来实现更改,前提是满足以下两个条件:
    1. 每个 LDM 线程最多处理 8 个片段,而且
    2. 表片段的总数是 LDM 线程数的整数倍。

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

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

  • 线程是否为执行线程。mainldmquery(NDB 8.0.23 及更高版本)、recvreptcsend线程是执行线程;iorecover(NDB 8.0.23 及更高版本)、watchdogidxbld线程不被视为执行线程。
  • 给定任务的线程分配是永久的还是临时的。目前除了idxbld线程外,所有线程类型都被视为永久的;idxbld线程被视为临时线程。

简单示例:

代码语言:javascript复制
# 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:

代码语言:javascript复制
ThreadConfig=ldm{count=8,cpubind=1,2,3,4,5,6,7,8},main={cpubind=9},io={cpubind=9}, 
rep={cpubind=10},tc{count=4,cpubind=11,12,13,14},recv={count=3,cpubind=15,16,17}, 
send{count=3,cpubind=18,19,20}

在大多数情况下,应该可以将主线程(模式管理)和 I/O 线程绑定到同一个 CPU 上,就像我们刚刚展示的示例中所做的那样。

以下示例结合了使用cpusetcpubind定义的 CPU 组以及线程优先级的使用。

代码语言:javascript复制
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_priospintime设置为相同的值。这意味着总共有 8 个 LDM 线程。(您应确保NoOfFragmentLogParts也设置为 8。)四个 TC 线程仅使用两个 CPU;使用cpuset时可以指定比组中线程更少的 CPU。 (对于cpubind不适用。)发送线程使用两个线程,使用cpubind将这些线程绑定到 CPU 10 和 11。主线程和 rep 线程可以重复使用这些 CPU。

本示例展示了如何为具有超线程的 24-CPU 主机设置ThreadConfigNoOfFragmentLogParts,留出 CPU 10、11、22 和 23 供操作系统功能和中断使用:

代码语言:javascript复制
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 集合如何与其他(永久)线程类型重叠,第一个使用cpuset,第二个使用cpubind

代码语言:javascript复制
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,但未为索引构建线程指定:

代码语言:javascript复制
ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, 
io={cpubind=8}

由于刚刚展示的ThreadConfig设置将线程锁定到编号为 1 至 8 的八个核心,因此等同于此处显示的设置:

代码语言:javascript复制
ThreadConfig=main,ldm={count=4,cpuset=1-4},tc={count=4,cpuset=5,6,7}, 
io={cpubind=8},idxbld={cpuset=1,2,3,4,5,6,7,8}

为了利用ThreadConfig提供的增强稳定性,有必要确保 CPU 被隔离,并且不受中断或被操作系统调度为其他任务的影响。在许多 Linux 系统上,您可以通过在/etc/sysconfig/irqbalance中设置IRQBALANCE_BANNED_CPUS0xFFFFF0,并在grub.conf中使用isolcpus引导选项来实现这一点。有关具体信息,请参阅您的操作系统或平台文档。

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

DiskPageBufferEntries

版本(或更高)

NDB 8.0.13

类型或单位

32K 页

默认值

10

范围

1 - 1000

版本(或更高)

NDB 8.0.19

类型或单位

字节

默认值

64MB

范围

4MB - 16TB

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

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

DiskPageBufferMemory

版本(或更高)

NDB 8.0.13

类型或单位

字节

默认值

64M

范围

4M - 1T

版本(或更高)

NDB 8.0.19

类型或单位

字节

默认值

64M

范围

4M - 16T

重启类型

节点重启: 需要进行滚动重启。 (NDB 8.0.13)

这确定了在磁盘上用于缓存页面的空间量,并在config.ini文件的[ndbd][ndbd default]部分中设置。

注意

以前,此参数被指定为 32 KB 页数。在 NDB 8.0 中,它被指定为字节数。

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

这是因为,在向表空间添加数据文件的过程中,扩展页会在额外的 PGMAN 工作线程中锁定到内存中,以便快速访问元数据。当添加大文件时,此工作线程的内存不足以存储所有数据文件的元数据。在这种情况下,您应该增加 DiskPageBufferMemory,或者添加较小的表空间文件。您可能还需要调整DiskPageBufferEntries

您可以查询ndbinfo.diskpagebuffer表,以帮助确定是否应增加此参数的值,以最小化不必要的磁盘查找。有关更多信息,请参见第 25.6.16.30 节,“ndbinfo diskpagebuffer 表”。

SharedGlobalMemory

版本(或更高)

NDB 8.0.13

类型或单位

字节

默认值

128M

范围

0 - 64T

重启类型

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

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

默认值为 128M

DiskIOThreadPool

版本(或更高)

NDB 8.0.13

类型或单位

线程

默认值

2

范围

0 - 4294967039 (0xFFFFFEFF)

重启类型

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

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

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

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

  • 磁盘数据文件的物理分布。 通过将数据文件、撤销日志文件和数据节点文件系统放置在不同的物理磁盘上,可以获得更好的性能。如果对这些文件集中的一些或全部执行此操作,则可以(也应该)将DiskIOThreadPool设置得更高,以便启用单独的线程来处理每个磁盘上的文件。 在 NDB 8.0 中,当使用单独的磁盘或磁盘存储磁盘数据文件时,还应禁用DiskDataUsingSameDisk;这将增加磁盘数据表空间检查点的执行速率。
  • 磁盘性能和类型。 可容纳用于处理磁盘数据文件的线程数量也取决于磁盘的速度和吞吐量。更快的磁盘和更高的吞吐量允许更多的磁盘 I/O 线程。我们的测试结果表明,固态硬盘驱动器可以处理比传统硬盘更多的磁盘 I/O 线程,因此可以使用更高的DiskIOThreadPool值。 当使用固态硬盘驱动器,特别是使用 NVMe 的固态硬盘驱动器时,建议减少TimeBetweenGlobalCheckpoints。另请参阅磁盘数据延迟参数。

此参数的默认值为 2。

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

  • FileSystemPathDD 版本(或更高版本)NDB 8.0.13类型或单位文件名默认FileSystemPath范围…重启类型初始节点重启: 需要对集群进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)如果指定了此参数,则 NDB 集群磁盘数据数据文件和撤销日志文件将放置在指定目录中。可以通过为FileSystemPathDataFilesFileSystemPathUndoFiles指定值来覆盖数据文件、撤销日志文件或两者,如这些参数所述。也可以通过在CREATE TABLESPACEALTER TABLESPACE语句的ADD DATAFILE子句中指定路径,以及通过在CREATE LOGFILE GROUPALTER LOGFILE GROUP语句的ADD UNDOFILE子句中指定路径来覆盖数据文件和撤销日志文件。如果未指定FileSystemPathDD,则使用FileSystemPath。 如果为给定数据节点指定了FileSystemPathDD目录(包括在config.ini文件的[ndbd default]部分中指定参数的情况),那么使用--initial启动该数据节点将导致删除该目录中的所有文件。
  • FileSystemPathDataFiles 版本(或更高)NDB 8.0.13类型或单位文件名默认FileSystemPathDD范围…重启类型初始节点重启: 需要进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)如果指定了此参数,则 NDB 集群磁盘数据数据文件将放置在指定的目录中。这将覆盖为FileSystemPathDD设置的任何值。可以通过在用于创建该数据文件的CREATE TABLESPACEALTER TABLESPACE语句的ADD DATAFILE子句中指定路径来覆盖给定数据文件的此参数。如果未指定FileSystemPathDataFiles,则使用FileSystemPathDD(或者如果也未设置FileSystemPathDD,则使用FileSystemPath)。 如果为给定数据节点指定了FileSystemPathDataFiles目录(包括在config.ini文件的[ndbd default]部分中指定参数的情况),那么使用--initial启动该数据节点将导致删除目录中的所有文件。
  • FileSystemPathUndoFiles 版本(或更高)NDB 8.0.13类型或单位文件名默认值FileSystemPathDD范围…重启类型初始节点重启: 需要进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)如果指定了此参数,则 NDB 集群磁盘数据撤销日志文件将放置在指定的目录中。这将覆盖为FileSystemPathDD设置的任何值。可以通过在用于创建该数据文件的CREATE LOGFILE GROUPALTER LOGFILE GROUP语句的ADD UNDO子句中指定路径来覆盖给定数据文件的此参数。如果未指定FileSystemPathUndoFiles,则使用FileSystemPathDD(或者如果也未设置FileSystemPathDD,则使用FileSystemPath)。 如果为给定数据节点指定了FileSystemPathUndoFiles目录(包括在config.ini文件的[ndbd default]部分中指定参数的情况),那么使用--initial启动该数据节点将导致删除目录中的所有文件。

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

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

InitialLogFileGroup

版本(或更高)

NDB 8.0.13

类型或单位

字符串

默认

[查看文档]

范围

重启类型

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

此参数可用于指定在执行集群的初始启动时创建的日志文件组。InitialLogFileGroup的指定如下:

代码语言:javascript复制
InitialLogFileGroup = [name=*name*;] [undo_buffer_size=*size*;] *file-specification-list*

*file-specification-list*:
    *file-specification*[; *file-specification*[; ...]]

*file-specification*:
    *filename*:*size*

日志文件组的name是可选的,默认为DEFAULT-LGundo_buffer_size也是可选的;如果省略,将默认为64M。每个*file-specification对应一个撤销日志文件,必须在file-specification-list*中指定至少一个。撤销日志文件将根据已设置的FileSystemPathFileSystemPathDDFileSystemPathUndoFiles的任何值放置,就好像它们是通过CREATE LOGFILE GROUPALTER LOGFILE GROUP语句创建的一样。

考虑以下内容:

代码语言:javascript复制
InitialLogFileGroup = name=LG1; undo_buffer_size=128M; undo1.log:250M; undo2.log:150M

这相当于以下 SQL 语句:

代码语言:javascript复制
CREATE LOGFILE GROUP LG1
    ADD UNDOFILE 'undo1.log'
    INITIAL_SIZE 250M
    UNDO_BUFFER_SIZE 128M
    ENGINE NDBCLUSTER;

ALTER LOGFILE GROUP LG1
    ADD UNDOFILE 'undo2.log'
    INITIAL_SIZE 150M
    ENGINE NDBCLUSTER;

当数据节点使用--initial启动时,将创建此日志文件组。

初始日志文件组的资源将与SharedGlobalMemory的值指示的资源一起添加到全局内存池中。

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

InitialTablespace

版本(或更高)

NDB 8.0.13

类型或单位

字符串

默认

[查看文档]

范围

重启类型

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

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

代码语言:javascript复制
InitialTablespace = [name=*name*;] [extent_size=*size*;] *file-specification-list*

表空间的 name 是可选的,默认为 DEFAULT-TSextent_size 也是可选的;默认为 1Mfile-specification-list 使用与 InitialLogfileGroup 参数显示的相同语法,唯一的区别是,与 InitialTablespace 一起使用的每个 file-specification 对应一个数据文件。file-specification-list 中必须至少指定一个。数据文件根据已设置的任何值放置在 FileSystemPathFileSystemPathDDFileSystemPathDataFiles 的值,就像它们是由 CREATE TABLESPACEALTER TABLESPACE 语句创建的一样。

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

代码语言:javascript复制
InitialTablespace = name=TS1; extent_size=8M; data1.dat:2G; data2.dat:4G

这相当于以下 SQL 语句:

代码语言:javascript复制
CREATE TABLESPACE TS1
    ADD DATAFILE 'data1.dat'
    EXTENT_SIZE 8M
    INITIAL_SIZE 2G
    ENGINE NDBCLUSTER;

ALTER TABLESPACE TS1
    ADD DATAFILE 'data2.dat'
    INITIAL_SIZE 4G
    ENGINE NDBCLUSTER;

当数据节点使用 --initial 启动时,将创建此表空间,并且以后创建 NDB 集群磁盘数据表时都可以使用。

磁盘数据延迟参数。 这里列出的两个参数可用于改善处理 NDB 集群磁盘数据表的延迟问题。

  • MaxDiskDataLatency 版本(或更高版本)NDB 8.0.19类型或单位毫秒默认0范围0 - 8000添加NDB 8.0.19重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数控制磁盘访问的最大允许平均延迟(最大 8000 毫秒)。当达到此限制时,NDB 开始中止事务以减少对磁盘数据 I/O 子系统的压力。使用 0 来禁用延迟检查。
  • DiskDataUsingSameDisk 版本(或更高)NDB 8.0.19类型或单位布尔值默认值true范围…添加NDB 8.0.19重启类型节点重启: 需要进行滚动重启(NDB 8.0.13)如果您的磁盘数据表空间使用一个或多个单独的磁盘,请将此参数设置为false。这样做可以使表空间的检查点以比共享磁盘时通常使用的更高速率执行。 当DiskDataUsingSameDisktrue时,NDB会在内存检查点进行时降低磁盘数据检查点的速率,以确保磁盘负载保持恒定。

磁盘数据和 GCP 停止错误。 当使用磁盘数据表时遇到的错误,例如节点*nodeid*因检测到 GCP 停止而被终止(错误 2303),通常被称为“GCP 停止错误”。这种错误发生在重做日志未能及时刷新到磁盘时;这通常是由于慢速磁盘和不足的磁盘吞吐量造成的。

您可以通过使用更快的磁盘,并将磁盘数据文件放在与数据节点文件系统不同的磁盘上来防止这些错误发生。减少TimeBetweenGlobalCheckpoints的值往往会减少每个全局检查点要写入的数据量,因此在尝试写入全局检查点时可能会提供一些保护措施;然而,减少此值也会减少写入 GCP 的时间,因此必须谨慎操作。

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

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

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

  • ExtraSendBufferMemory 此参数指定要分配的传输器发送缓冲区内存量,除了使用TotalSendBufferMemorySendBufferMemory或两者设置的内存量之外。
  • TotalSendBufferMemory 此参数用于确定要在此节点上为所有配置的传输器共享的发送缓冲区内存分配的总量。 如果设置了此参数,则其最小允许值为 256KB;0 表示未设置该参数。有关更详细信息,请参见第 25.4.3.14 节,“配置 NDB 集群发送缓冲区参数”。

另请参见第 25.6.7 节,“在线添加 NDB 集群数据节点”。

重做日志超额处理。 当数据节点刷新重做日志到磁盘花费的时间过长时,可以控制数据节点处理操作的方式。当给定的重做日志刷新时间超过RedoOverCommitLimit秒,超过RedoOverCommitCounter次时,会导致任何待处理的事务被中止。发生这种情况时,发送事务的 API 节点可以处理应该提交的操作,通过将操作排队并重试,或者中止它们,由DefaultOperationRedoProblemAction决定。设置超时时间和超过次数后 API 节点采取的操作的数据节点配置参数如下所示:

  • RedoOverCommitCounter 版本(或更高版本)NDB 8.0.13类型或单位数值默认值3范围1 - 4294967039 (0xFFFFFEFF)版本(或更高版本)NDB 8.0.19类型或单位数值默认值3范围1 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)当尝试将给定的重做日志写入磁盘超过RedoOverCommitLimit次时,未提交的任何事务都会被中止,并且任何这些事务发起的 API 节点会根据其DefaultOperationRedoProblemAction的值处理组成这些事务的操作(通过将操作排队以便重试,或中止它们)。
  • RedoOverCommitLimit 版本(或更高版本)NDB 8.0.13类型或单位秒默认值20范围1 - 4294967039 (0xFFFFFEFF)版本(或更高版本)NDB 8.0.19类型或单位秒默认值20范围1 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要对集群进行滚动重启。(NDB 8.0.13)此参数设置在尝试将给定重做日志写入磁盘之前的秒数上限。数据节点尝试刷新此重做日志的次数,但超过RedoOverCommitLimit,并与RedoOverCommitCounter进行比较,当刷新花费的时间比该参数的值多次时,由于刷新超时而未提交的任何事务都将被中止。发生这种情况时,任何这些事务发起的 API 节点根据其DefaultOperationRedoProblemAction设置处理组成这些事务的操作(它要么将操作排队以进行重试,要么中止它们)。

控制重启尝试。 通过数据节点配置参数MaxStartFailRetriesStartFailRetryDelay,可以对数据节点在启动失败时的重启尝试进行精细控制。

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

  • StartFailRetryDelay 版本(或更高)NDB 8.0.13类型或单位无符号默认值0范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)使用此参数设置数据节点在启动失败时的重启尝试之间的秒数。默认值为 0(无延迟)。 除非StopOnError等于 0,否则此参数和MaxStartFailRetries都会被忽略。
  • MaxStartFailRetries 版本(或更高)NDB 8.0.13类型或单位无符号默认值3范围0 - 4294967039 (0xFFFFFEFF)重启类型节点重启: 需要进行滚动重启。 (NDB 8.0.13)使用此参数限制数据节点在启动失败时的重启尝试次数。默认值为 3 次。 除非StopOnError等于 0,否则此参数和StartFailRetryDelay都会被忽略。

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

  • IndexStatAutoCreate 版本(或更高)NDB 8.0.13类型或单位整数默认值0范围0, 1版本(或更高)NDB 8.0.27类型或单位整数默认值1范围0, 1重启类型节点重启: 需要对集群进行滚动重启;(NDB 8.0.13)启用(设置为 1)或禁用(设置为 0)在创建索引时自动收集统计信息。
  • IndexStatAutoUpdate 版本(或更高)NDB 8.0.13类型或单位整数默认值0范围0, 1版本(或更高)NDB 8.0.27类型或单位整数默认值1范围0, 1重启类型节点重启: 需要对集群进行滚动重启;(NDB 8.0.13)启用(设置为 1)或禁用(设置为 0)对索引进行更改的监视,并在检测到更改时触发自动统计更新。触发更新所需的更改程度由IndexStatTriggerPctIndexStatTriggerScale选项的设置确定。
  • IndexStatSaveSize 版本(或更高)NDB 8.0.13类型或单位字节默认值32768范围0 - 4294967039 (0xFFFFFEFF)重启类型初始节点重启: 需要对集群进行滚动重启;每个数据节点都必须使用--initial重新启动。(NDB 8.0.13)允许在NDB系统表和mysqld内存缓存中保存的任何给定索引的统计信息的最大空间(以字节为单位)。 无论任何大小限制,始终会生成至少一个样本。此大小由IndexStatSaveScale进行缩放。 由IndexStatSaveSize指定的大小按照大索引的IndexStatTriggerPct值进行缩放,乘以 0.01。这进一步乘以索引大小的以 2 为底的对数。将IndexStatTriggerPct设置为 0 会禁用缩放效果。
  • IndexStatSaveScale 版本(或更高)NDB 8.0.13类型或单位百分比默认值100范围0 - 4294967039 (0xFFFFFEFF)重启类型**初始节点重启:**需要进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)由IndexStatSaveSize指定的大小按照大索引的IndexStatTriggerPct值进行缩放,乘以 0.01。这进一步乘以索引大小的以 2 为底的对数。将IndexStatTriggerPct设置为 0 会禁用缩放效果。
  • IndexStatTriggerPct 版本(或更高)NDB 8.0.13类型或单位百分比默认值100范围0 - 4294967039 (0xFFFFFEFF)重启类型**初始节点重启:**需要进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)触发索引统计更新的更新百分比变化。该值由IndexStatTriggerScale进行缩放。您可以通过将IndexStatTriggerPct设置为 0 来完全禁用此触发器。
  • IndexStatTriggerScale 版本(或更高)NDB 8.0.13类型或单位百分比默认值100范围0 - 4294967039 (0xFFFFFEFF)重启类型**初始节点重启:**需要进行滚动重启;每个数据节点必须使用--initial重新启动。(NDB 8.0.13)将IndexStatTriggerPct按照此数值乘以 0.01 进行大索引的缩放。值为 0 会禁用缩放。
  • IndexStatUpdateDelay 版本(或更高)NDB 8.0.13类型或单位秒默认值60范围0 - 4294967039 (0xFFFFFEFF)重启类型初始节点重启: 集群需要进行滚动重启;每个数据节点都必须使用 --initial 重新启动。(NDB 8.0.13)对于给定索引自动索引统计更新之间的最小延迟(以秒为单位)。将此变量设置为 0 可以禁用任何延迟。默认值为 60 秒。

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

表 25.16 NDB 集群重启类型

符号

重启类型

描述

N

节点

可以使用滚动重启(参见第 25.6.5 节,“执行 NDB 集群的滚动重启”)更新参数

S

系统

所有集群节点必须完全关闭,然后重新启动,以实现对该参数的更改

I

初始

数据节点必须使用 --initial 选项重新启动

0 人点赞