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_params
table 的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
存储引擎。现在,所有ndbinfo
table 和视图都使用NDB
(显示为NDBINFO
)。
NDB 7.5.4 中引入了几个新的ndbinfo
table。这些 table 在此处列出,并带有简要说明:
-
dict_obj_info在
NDB
中提供数据库对象的名称和类型,以及有关父对象的信息(如果适用)-
table_distribution_status提供
NDB
table 分发状态信息 -
table_fragments提供有关
NDB
table 片段的分布的信息 -
table_info提供有关每个
NDB
table 有效的日志记录,检查点,存储和其他选项的信息 -
table_replicas提供有关片段副本的信息
-
有关更多信息,请参见各个 table 的描述。
- 默认的行和列格式更改. 从 NDB 7.5.1 开始,可以使用新的 MySQL 服务器变量ndb_default_column_format添加
ROW_FORMAT
选项和CREATE TABLE的COLUMN_FORMAT
选项的默认值DYNAMIC
而不是FIXED
。作为此更改的一部分;将此值设置为FIXED
或DYNAMIC
(或以等效选项--ndb-default-column-format=FIXED开头mysqld)以强制将此值用于COLUMN_FORMAT
和ROW_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_index
table 现在使用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 nodes,data nodes和API nodes的
ExecuteOnComputer
配置参数,现在可以在 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。-
NoOfDiskPagesToDiskDuringRestartTUP
,NoOfDiskPagesToDiskDuringRestartACC
:已弃用,没有效果;在 MySQL 5.1.6 中由DiskCheckpointSpeedInRestart
取代,后者本身已被弃用(在 NDB 7.4.1 中),现在也已删除。 -
NoOfDiskPagesToDiskAfterRestartACC
,NoOfDiskPagesToDiskAfterRestartTUP
:已弃用,但没有效果;在 MySQL 5.1.6 中由DiskCheckpointSpeed
取代,后者本身已被弃用(在 NDB 7.4.1 中),现在也已删除。 -
ReservedSendBufferMemory
:已弃用,不再起作用。 -
MaxNoOfIndexes
:过时(MySQL 4.1 之前的版本),没有任何效果;很久以来被MaxNoOfOrderedIndexes或MaxNoOfUniqueHashIndexes取代。 -
Discless
:很久以前(MySQL 4.1 之前)的同义词,由Diskless代替。
-
在 NDB 7.5.0 中也删除了过时的和未使用的(并且因此以前也没有记录过的)ByteOrder
计算机配置参数。
NDB 7.5 不支持刚刚描述的参数。现在,尝试在 NDB 群集配置文件中使用这些参数中的任何一个都会导致错误。
- DBTC 扫描增强. 通过减少用于NDB中的
DBTC
和DBDIH
内核块之间通信的 signal 数量,改进了扫描,通过减少用于 CPU 的 CPU 资源的使用,实现了数据节点用于扫描操作时更高的可伸缩性。扫描操作,在某些情况下估计减少了 5%。
同样,由于这些更改,响应时间应大大缩短,这可以帮助防止主线程过载的问题。此外,与以前的发行版相比,在BACKUP
内核块中进行的扫描也得到了改进,并且效率更高。
-
JSON 列支持. NDB 7.5.2 和更高版本支持
NDB
table 的JSON列类型以及 MySQL Server 中的 JSON 函数,但受限于NDB
table 最多可具有 3JSON
列的限制。 -
从任何副本读取;指定哈希 Map 分区片段的数量. 以前,所有读取都是针对主副本的,而简单读取除外。 (简单读取是在读取行时将其锁定的读取.)从 NDB 7.5.2 开始,可以启用任何副本的读取。默认情况下禁用此功能,但可以使用此版本中添加的ndb_read_backup系统变量为给定的 SQL 节点启用此功能。
以前,可以只用一种类型的分区 Map 定义 table,而在每个节点中的每个 LDM 上都有一个主分区,但是在 NDB 7.5.2 中,可以通过设置分区平衡来更灵活地分配分区(片段计数类型)。可能的平衡方案是每个节点一个,每个节点组一个,每个节点一个 LDM 一个,每个节点组每个 LDM 一个。
可以通过嵌入在CREATE TABLE或ALTER TABLE语句的NDB_TABLE
Comments 中的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)配置参数实现了许多增强功能和附加功能,其中包括对更多平台的支持。这些更改将在以下几段中进行介绍。
现在,使用cpubind
和cpuset
在 FreeBSD 和 Windows 上支持非独占的 CPU 锁定。现在,Solaris(仅)使用此发行版中引入的cpubind_exclusive
和cpuset_exclusive
参数支持独占 CPU 锁定。
线程优先级现已可用,由新的thread_prio
参数控制。 thread_prio
在 Linux,FreeBSD,Windows 和 Solaris 上受支持,并且因平台而异。有关更多信息,请参见ThreadConfig的描述。
Windows 平台现在支持realtime
参数。
-
分区大于 16 GB. 由于 NDB 群集数据节点使用的哈希索引实现得到了改进,因此
NDB
table 的分区现在可以包含 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 节点需要server
和common
软件包。现在,client
RPM 中包含 MySQL 和NDB
Client 端程序,包括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 用户手册。