21.1.4.1 NDB Cluster 7.5 的新增功能

下 table 列出了 NDB Cluster 7.5 中可能引起关注的主要更改和新功能:

  • ndbinfo 增强功能.ndbinfo数据库中进行了许多更改,主要是现在它提供了有关 NDB 群集节点配置参数的详细信息。

config_paramstable 已变为只读状态,并已增加了附加列,以提供有关每个配置参数的信息,包括参数的类型,默认值,最大值和最小值(如果适用),参数的简要说明以及是否该参数是必需的。该 table 还为每个参数提供唯一的param_number

config_valuestable 中的一行显示了具有指定 ID 的节点上给定参数的当前值。该参数由config_param列的值标识,该值 Map 到config_paramstable 的param_number

使用此关系,您可以在这两个 table 上编写联接,以按名称获取一个或多个 NDB 群集配置参数的默认值,最大值,最小值和当前值。下面显示了使用这种联接的示例 SQL 语句:

SELECT  p.param_name AS Name,
        v.node_id AS Node,
        p.param_type AS Type,
        p.param_default AS 'Default',
        p.param_min AS Minimum,
        p.param_max AS Maximum,
        CASE p.param_mandatory WHEN 1 THEN 'Y' ELSE 'N' END AS 'Required',
        v.config_value AS Current
FROM    config_params p
JOIN    config_values v
ON      p.param_number = v.config_param
WHERE   p. param_name IN ('NodeId', 'HostName','DataMemory', 'IndexMemory');

有关这些更改的更多信息,请参见第 21.5.14.8 节“ ndbinfo config_paramstable”。有关更多信息和示例,请参见第 21.5.14.9 节“ ndbinfo config_valuestable”

此外,ndbinfo数据库不再取决于MyISAM存储引擎。现在,所有ndbinfotable 和视图都使用NDB(显示为NDBINFO)。

NDB 7.5.4 中引入了几个新的ndbinfotable。这些 table 在此处列出,并带有简要说明:

有关更多信息,请参见各个 table 的描述。

  • 默认的行和列格式更改. 从 NDB 7.5.1 开始,可以使用新的 MySQL 服务器变量ndb_default_column_format添加ROW_FORMAT选项和CREATE TABLECOLUMN_FORMAT选项的默认值DYNAMIC而不是FIXED。作为此更改的一部分;将此值设置为FIXEDDYNAMIC(或以等效选项--ndb-default-column-format=FIXED开头mysqld)以强制将此值用于COLUMN_FORMATROW_FORMAT。在 NDB 7.5.4 之前,此变量的默认值为DYNAMIC;在此版本和更高版本中,默认值为FIXED,它与以前的发行版具有向后兼容性(错误#24487363)。

现有 table 列使用的行格式和列格式不受此更改的影响。如果执行此操作的ALTER TABLE语句指定ALGORITHM=COPY,则添加到此类 table 的新列将使用这些新的默认值(可能被ndb_default_column_format覆盖),并且现有列也将更改为使用这些默认值。

Note

如果mysqld--ndb-allow-copying-alter-table=FALSE一起运行,则不能隐式完成ALTER TABLE的复制。

  • ndb_binlog_index 不再依赖于 MyISAM. 从 NDB 7.5.2 开始,NDB 群集复制中使用的ndb_binlog_indextable 现在使用InnoDB存储引擎而不是MyISAM。升级时,可以将_与--force --upgrade-system-tables一起运行,以使其在此 table 上执行ALTER TABLE ... ENGINE = INNODB。为了向后兼容,仍支持对该 table 使用MyISAM

此更改的好处在于,它可以依赖于此 table 的事务行为和无锁读取,这可以帮助减轻清除操作和日志轮换期间的并发问题,并提高此 table 的可用性。

  • 更改 ALTER TABLE. NDB Cluster 以前支持联机ALTER TABLE的替代语法。 NDB Cluster 7.5 不再支持此功能,NDB Cluster 7.5 与标准 MySQL Server 一样,仅对 tableDDL 使用ALGORITHM = DEFAULT|COPY|INPLACE

另一个影响此语句使用的更改是,ALTER TABLE ... ALGORITHM=INPLACE RENAME现在除了重命名之外还可能包含 DDL 操作。

  • 不推荐使用 ExecuteOnComputer 参数. 不推荐使用management nodesdata nodesAPI nodesExecuteOnComputer配置参数,现在可以在 NDB Cluster 的将来版本中将其删除。对于所有三种类型的节点,应使用等效的HostName参数。

  • 每键记录优化. 现在,NDB 处理程序将“每键记录”接口用于在 MySQL 5.7.5 中为优化器实现的索引统计信息。此项更改带来的一些好处包括以下所列:

  • 现在,在许多情况下,优化器现在会选择更好的执行计划,在这种情况下,以前曾经选择了较差的连接索引或 table 连接 Sequences

    • EXPLAIN显示的行估算值更准确

    • SHOW INDEXtable 示的基数估计得到了改进

  • 连接池节点 ID. NDB 7.5.0 添加了mysqld --ndb-cluster-connection-pool-nodeids选项,该选项允许为连接池设置一组节点 ID。此设置覆盖--ndb-nodeid,这意味着它也覆盖--ndb-connectstring选项和NDB_CONNECTSTRING环境变量。

Note

您可以使用mysqld--ndb-cluster-connection-pool选项设置连接池的大小。

  • create_old_temporals 已删除. create_old_temporals系统变量在 NDB Cluster 7.4 中已弃用,现在已被删除。

  • ndb_mgm Client PROMPT 命令. NDB Cluster 7.5 添加了一个新命令来设置 Client 端的命令行提示符。下面的示例说明了PROMPT命令的用法:

ndb_mgm> PROMPT mgm#1:
mgm#1: SHOW
Cluster Configuration
---------------------
[ndbd(NDB)]     4 node(s)
id=5    @10.100.1.1  (mysql-5.7.31-ndb-7.5.20, Nodegroup: 0, *)
id=6    @10.100.1.3  (mysql-5.7.31-ndb-7.5.20, Nodegroup: 0)
id=7    @10.100.1.9  (mysql-5.7.31-ndb-7.5.20, Nodegroup: 1)
id=8    @10.100.1.11  (mysql-5.7.31-ndb-7.5.20, Nodegroup: 1)

[ndb_mgmd(MGM)] 1 node(s)
id=50   @10.100.1.8  (mysql-5.7.31-ndb-7.5.20)

[mysqld(API)]   2 node(s)
id=100  @10.100.1.8  (5.7.31-ndb-7.5.20)
id=101  @10.100.1.10  (5.7.31-ndb-7.5.20)

mgm#1: PROMPT
ndb_mgm> EXIT
jon@valhaj:/usr/local/mysql/bin>

有关其他信息和示例,请参见第 21.5.1 节“ NDB 群集 ManagementClient 端中的命令”

  • 每个片段增加了 FIXED 列存储. NDB Cluster 7.5 和更高版本在FIXED列中每个片段的数据最多支持 128 TB。在 NDB Cluster 7.4 和更早版本中,每个片段为 16 GB。

  • 删除了不推荐使用的参数. 以下 NDB Cluster 数据节点配置参数在 NDB Cluster 的早期版本中已弃用,并在 NDB 7.5.0 中删除:

  • Id:在 NDB 7.1.9 中已弃用;替换为NodeId

    • NoOfDiskPagesToDiskDuringRestartTUPNoOfDiskPagesToDiskDuringRestartACC:已弃用,没有效果;在 MySQL 5.1.6 中由DiskCheckpointSpeedInRestart取代,后者本身已被弃用(在 NDB 7.4.1 中),现在也已删除。

    • NoOfDiskPagesToDiskAfterRestartACCNoOfDiskPagesToDiskAfterRestartTUP:已弃用,但没有效果;在 MySQL 5.1.6 中由DiskCheckpointSpeed取代,后者本身已被弃用(在 NDB 7.4.1 中),现在也已删除。

    • ReservedSendBufferMemory:已弃用,不再起作用。

    • MaxNoOfIndexes:过时(MySQL 4.1 之前的版本),没有任何效果;很久以来被MaxNoOfOrderedIndexesMaxNoOfUniqueHashIndexes取代。

    • Discless:很久以前(MySQL 4.1 之前)的同义词,由Diskless代替。

在 NDB 7.5.0 中也删除了过时的和未使用的(并且因此以前也没有记录过的)ByteOrder计算机配置参数。

NDB 7.5 不支持刚刚描述的参数。现在,尝试在 NDB 群集配置文件中使用这些参数中的任何一个都会导致错误。

  • DBTC 扫描增强. 通过减少用于NDB中的DBTCDBDIH内核块之间通信的 signal 数量,改进了扫描,通过减少用于 CPU 的 CPU 资源的使用,实现了数据节点用于扫描操作时更高的可伸缩性。扫描操作,在某些情况下估计减少了 5%。

同样,由于这些更改,响应时间应大大缩短,这可以帮助防止主线程过载的问题。此外,与以前的发行版相比,在BACKUP内核块中进行的扫描也得到了改进,并且效率更高。

  • JSON 列支持. NDB 7.5.2 和更高版本支持NDBtable 的JSON列类型以及 MySQL Server 中的 JSON 函数,但受限于NDBtable 最多可具有 3 JSON列的限制。

  • 从任何副本读取;指定哈希 Map 分区片段的数量. 以前,所有读取都是针对主副本的,而简单读取除外。 (简单读取是在读取行时将其锁定的读取.)从 NDB 7.5.2 开始,可以启用任何副本的读取。默认情况下禁用此功能,但可以使用此版本中添加的ndb_read_backup系统变量为给定的 SQL 节点启用此功能。

以前,可以只用一种类型的分区 Map 定义 table,而在每个节点中的每个 LDM 上都有一个主分区,但是在 NDB 7.5.2 中,可以通过设置分区平衡来更灵活地分配分区(片段计数类型)。可能的平衡方案是每个节点一个,每个节点组一个,每个节点一个 LDM 一个,每个节点组每个 LDM 一个。

可以通过嵌入在CREATE TABLEALTER TABLE语句的NDB_TABLEComments 中的PARTITION_BALANCE选项(在 NDB 7.5.4 中从FRAGMENT_COUNT_TYPE重命名)来控制单个 table 的此设置。使用此语法也支持 table 级READ_BACKUP的设置。有关更多信息和示例,请参见第 13.1.18.9 节“设置 NDB_TABLE 选项”

在 NDB API 应用程序中,还可以使用为此目的提供的方法来获取和设置 table 的分区余额。有关这些的更多信息,请参见Table::getPartitionBalance()Table::setPartitionBalance()以及Object::PartitionBalance

作为这项工作的一部分,NDB 7.5.2 还引入了ndb_data_node_neighbour系统变量。它旨在用于事务提示中,以便为此 SQL 节点提供“附近”数据节点。

此外,还原 table 架构时,ndb_restore --restore-meta现在使用目标群集的默认分区,而不是使用与进行备份的原始群集相同数量的分区。有关更多信息和示例,请参见第 21.4.24.1.2 节,“还原到比原始节点更多的节点”

NDB 7.5.3 对READ_BACKUP进行了进一步增强:在此版本和更高版本中,可以在线将给定 table 的READ_BACKUP设置为ALTER TABLE ...算法= INPLACE ...的一部分。

  • ThreadConfig 的改进. NDB 7.5.2 中为ThreadConfig多线程数据节点(ndbmtd)配置参数实现了许多增强功能和附加功能,其中包括对更多平台的支持。这些更改将在以下几段中进行介绍。

现在,使用cpubindcpuset在 FreeBSD 和 Windows 上支持非独占的 CPU 锁定。现在,Solaris(仅)使用此发行版中引入的cpubind_exclusivecpuset_exclusive参数支持独占 CPU 锁定。

线程优先级现已可用,由新的thread_prio参数控制。 thread_prio在 Linux,FreeBSD,Windows 和 Solaris 上受支持,并且因平台而异。有关更多信息,请参见ThreadConfig的描述。

Windows 平台现在支持realtime参数。

  • 分区大于 16 GB. 由于 NDB 群集数据节点使用的哈希索引实现得到了改进,因此NDBtable 的分区现在可以包含 16 GB 的固定列数据,以及最大分区大小。列现在提高到 128 TB。先前的限制是由于NDB内核中的DBACC块仅使用DBTUP块中行的固定大小部分的 32 位引用,尽管在DBTUP本身中使用了对该数据的 45 位引用,并且DBACC以外的内核中的其他地方;现在,对DBACC块中处理的数据的所有此类引用都使用 45 位。

  • 从 ndb_restore 打印 SQL 语句. NDB 7.5.4 为 NDB 群集发行版随附的ndb_restoreUtil 添加了--print-sql-log选项。此选项启用 SQL 记录到stdout重要 :使用此选项还原的每个 table 都必须具有显式定义的主键。

有关更多信息,请参见第 21.4.24 节“ ndb_restore-还原 NDB 群集备份”

  • RPM 软件包的组织. 从 NDB 7.5.4 开始,为 NDB Cluster 提供的 RPM 软件包的命名和组织与为 MySQL 服务器发行的 RPM 软件包更加紧密地结合在一起。现在,所有 NDB 群集 RPM 的名称都以mysql-cluster为前缀。现在使用data-node软件包安装了数据节点;Management 节点现在是通过management-server软件包安装的;和 SQL 节点需要servercommon软件包。现在,client RPM 中包含 MySQL 和NDBClient 端程序,包括mysqlClient 端和ndb_mgmManagementClient 端。

有关 NDB 群集 RPM 的详细列 table 和其他信息,请参见第 21.2.3.2 节,“从 RPM 安装 NDB 群集”

  • ndbinfo 进程和 config_nodestable. NDB 7.5.7 将两个 table 添加到ndbinfo信息数据库中,以提供有关群集节点的信息;这些 table 在这里列出:

  • config_nodes:该 table 提供 NDB 群集的配置文件中列出的每个节点的节点 ID,进程类型和主机名。

    • processes显示有关当前连接到集群的节点的信息;该信息包括进程名称和系统进程 ID;对于每个数据节点和 SQL 节点,它还显示该节点的 angel 进程的进程 ID。此外,该 table 还显示了每个连接节点的服务地址。可以使用Ndb_cluster_connection::set_service_uri()方法在 NDB API 应用程序中设置此地址,该方法也在 NDB 7.5.7 中添加。
  • 系统名称. NDB 群集的系统名称可用于标识特定群集。从 NDB 7.5.7 开始,MySQL Server 将此名称显示为Ndb_system_name状态变量的值。 NDB API 应用程序可以使用同一版本中添加的Ndb_cluster_connection::get_system_name()方法。

系统会自动生成基于 Management 服务器启动时间的系统名称;您可以通过在群集的配置文件中添加[system]部分并将Name参数设置为该部分中您选择的值(在启动 Management 服务器之前)来覆盖此值。

  • ndb_restore 选项. 从 NDB 7.5.13 开始,调用ndb_restore时都需要--nodeid--backupid选项。

  • ndb_blob_tool 增强功能. 从 NDB 7.5.18 开始,ndb_blob_toolUtil 可以检测到存在内联部分的丢失的 blob 部分,并用正确长度的占位符 blob 部分(由空格字符组成)替换。要检查是否缺少斑点部分,请在此程序中使用--check-missing选项。要将所有丢失的 BlobComponent 替换为占位符,请使用--add-missing选项。

有关更多信息,请参见第 21.4.6 节“ ndb_blob_tool —检查和修复 NDB 群集 table 的 BLOB 和 TEXT 列”

  • -ndb-log-fail-terminate 选项. 从 NDB 7.5.18 开始,只要无法完全记录所有行事件,就可以使 SQL 节点终止。这可以通过使用--ndb-log-fail-terminate选项启动mysqld来完成。

从 NDB 7.5.7 开始不再支持 ClusterJPA。其源代码和二进制文件已从 NDB 群集发行版中删除。

MySQL Cluster Manager 还支持 NDB Cluster 7.5,它提供了高级命令行界面,可以简化许多复杂的 NDB ClusterManagement 任务。有关更多信息,请参见MySQL™Cluster Manager 1.4.8 用户手册