NDB群集中的新增功能
以下各节描述了与早期版本系列相比,MySQL NDB Cluster 8.0到8.0.20中NDB Cluster实现的更改。从NDB 8.0.19开始,NDB Cluster 8.0可以作为通用版本(GA)发行。NDB Cluster 7.6和7.5是GA仍在生产中支持的早期GA版本;有关NDB Cluster 7.6的信息,请参阅 NDB Cluster 7.6的新增功能。有关NDB Cluster 7.5的类似信息,请参见 NDB Cluster 7.5中的新增功能。NDB Cluster 7.4和7.3是GA仍支持生产的早期GA版本,尽管我们建议将用于生产的新部署使用NDB Cluster 8.0;但是,请参见 MySQL NDB Cluster 7.3和NDB Cluster 7.4。
NDB Cluster 8.0的新增功能
以下列表中列出了NDB Cluster 8.0中可能引起关注的主要更改和新功能:
兼容性增强。
NDB
与其他MySQL存储引擎相比,以下更改减少了长期以来不必要的行为差异:与MySQL服务器并行开发。从此发行版开始,将在具有以下功能的新统一发行模型下与标准MySQL 8.0服务器并行开发MySQL NDB Cluster:
- NDB 8.0是用MySQL 8.0源代码树开发,构建的,并随MySQL 8.0源代码树一起发布。
- 从版本8.0.13开始,NDB Cluster 8.0发行版的编号方案遵循MySQL 8.0的编号方案。
带有
NDB
支持的构建源将附加-cluster
到mysql返回的版本字符串-V
,如下所示:shell≫ mysql -V mysql Ver 8.0.20-cluster for Linux on x86_64 (Source distribution)
NDB
二进制文件继续显示MySQL Server版本和NDB
引擎版本,如下所示:shell>
ndb_mgm -V MySQL distrib mysql-8.0.20 ndb-8.0.20, for Linux (x86_64)在MySQL Cluster NDB 8.0中,这两个版本号始终相同。
要构建具有NDB Cluster支持的MySQL 8.0.13(或更高版本)源,请使用CMake选项
-DWITH_NDBCLUSTER
。- 数据库和表名。从NDB 8.0.18开始,数据库和表的标识符的63字节限制已删除。这些标识符现在最多可以使用64个字节,就像使用其他MySQL存储引擎的对象一样。请参见“在NDB Cluster 8.0中解决的先前的NDB Cluster问题”。
- 生成的外键名称。
NDB
(版本8.0.18及更高版本)现在使用该模式来命名内部生成的外键。这类似于所使用的模式。tbl_name_fk_N
InnoDB
架构和元数据的分发与同步。 NDB 8.0利用MySQL数据字典将架构信息分发给加入群集的SQL节点,并在现有SQL节点之间同步新的架构更改。下表描述了与此集成工作相关的各个增强功能:
模式分布增强。
NDB
NDB 8.0.17中扩展了处理模式操作并跟踪其进度的模式分发协调器,以确保在模式操作结束时释放其使用的资源。以前,其中一些工作是由模式分发客户端完成的。由于客户端并不总是具有所有需要的状态信息,因此已更改了该信息,当客户端决定在完成之前放弃架构操作且未通知协调器时,这可能导致资源泄漏。为了帮助解决此问题,架构操作超时检测已从架构分发客户端移至协调器,从而为协调器提供了清除架构操作期间使用的任何资源的机会。现在,协调器会定期检查正在进行的模式操作是否超时,并在检测到超时时将尚未完成给定模式操作的参与者标记为失败。每当发生架构操作超时时,它还提供适当的警告。(应注意,在检测到此类超时后,架构操作本身将继续。
作为这项工作的附加部分,新的mysqld选项
--ndb-schema-dist-timeout
可以设置将模式操作标记为已超时的等待时间。- 磁盘数据文件分发。从NDB Cluster 8.0.14开始,
NDB
使用MySQL数据字典来确保磁盘数据文件以及相关的构造(例如表空间和日志文件组)正确地分布在所有连接的SQL节点之间。 表空间对象的架构同步。当MySQL服务器作为SQL节点连接到NDB群集时,它会根据字典中的信息检查其数据
NDB
字典。以前,
NDB
在连接新的SQL节点时同步的唯一对象是数据库和表。MySQL NDB Cluster 8.0.14和更高版本还实现了磁盘数据对象(包括表空间和日志文件组)的架构同步。除其他优点外,这消除了在本NDB
机备份和还原后MySQL数据字典与字典之间不匹配的可能性,在该备份中,表空间和日志文件组已还原到NDB
字典,而不是MySQL Server的数据字典。也不再可能发出
CREATE TABLE
引用不存在的表空间的语句。这样的语句现在失败,并显示错误。数据库DDL同步增强。在NDB做8.0.17保证的工作,通过与现有的SQL节点上新加入(或重新加入)SQL节点的数据库同步,现在合理的利用数据字典,这样任何数据库级操作(
CREATE DATABASE
,ALTER DATABASE
,或DROP DATABASE
),可能有现在,当它连接(或重新连接)到集群时,此SQL节点遗漏的错误消息可以在其上正确复制。作为启动时执行的模式同步过程的一部分,SQL节点现在将集群数据节点上的所有数据库与其自己的数据字典中的数据库进行比较,如果发现SQL节点的数据字典中缺少这些数据库中的任何一个,则该SQL节点通过执行一条
CREATE DATABASE
语句在本地安装它。这样创建的数据库使用默认的MySQL Server数据库属性(例如由character_set_database
和确定的属性collation_database
),该属性在执行语句时对该SQL节点有效。NDB元数据更改检测。 NDB 8.0.16实现了一种新机制,用于使用MySQL数据字典检测数据对象(如表,表空间和日志文件组)的元数据更新。这是使用线程(即
NDB
元数据更改监视线程)在后台运行的,并定期检查NDB
字典和MySQL数据字典之间的不一致情况来完成的。默认情况下,监视器每60秒执行一次元数据检查。可以通过设置
ndb_metadata_check_interval
系统变量的值来调整轮询间隔。通过将ndb_metadata_check
系统变量设置为,可以完全禁用轮询OFF
。一个状态变量,Ndb_metadata_detected_count
显示自上次启动mysqld以来检测到不一致的次数。NDB表中的额外元数据更改。在NDB 8.0.14和更高版本中,表的额外元数据属性
NDB
用于存储MySQL数据字典中的序列化元数据,而不是像以前的版本那样存储表的二进制表示形式。(这是一个.frm
文件,MySQL服务器不再使用-请参见MySQL数据字典。)作为支持此更改的一部分,表的额外元数据的可用大小已增加。这意味着NDB
在NDB Cluster 8.0.14和更高版本中创建的表与以前的NDB Cluster版本不兼容。在早期版本中创建的表可以与NDB 8.0.14及更高版本一起使用,但是此后不能由早期版本打开。这种元数据访问使用NDB API方法
getExtraMetadata()
,并setExtraMetadata()
认为是在NDB 8.0.13实现。有关更多信息,请参见“升级和降级NDB群集”。
使用.frm文件动态升级表。在NDB 7.6和更早版本中创建的表包含压缩
.frm
文件形式的元数据,MySQL 8.0不再支持该元数据。为了便于在线升级到NDB 8.0,请NDB
对该元数据进行即时转换并将其写入MySQL Server的数据字典中,这使NDB Cluster 8.0中的mysqld可以与该表一起使用,而不会阻止后续使用该表。该NDB
软件的先前版本。重要
在NDB 8.0中修改了表的结构后,将使用数据字典存储其元数据,并且NDB 7.6和更早版本将无法再访问它。
此增强功能还可以将
NDB
使用较早版本进行的备份还原到运行NDB 8.0(或更高版本)的群集。元数据更改检测和自动同步。从8.0.18版本开始,
NDB
确保NDB
在启动后的操作期间由元数据更改监视线程提交的表,日志文件组和表空间对象自动检查是否不匹配,并由NDB
binlog线程进行同步。NDB 8.0.18还添加了两个与自动同步有关的状态变量:
Ndb_metadata_synced_count
显示自动同步的对象数;Ndb_metadata_blacklist_size
指示同步失败的对象数。此外,您可以通过检查集群日志来参见哪些对象已同步。NDB 8.0.19通过将数据库添加到检测到并同步了更改的对象中来进一步增强了此功能。仅
NDB
处理表实际使用的数据库;MySQL数据字典中可能存在的其他数据库将被忽略。对于在其中存在表NDB
但在SQL节点上不存在该表和它所属的数据库的情况,这消除了以前的手动创建该数据库的要求;现在,在这种情况下,NDB
应该在SQL节点上自动创建数据库及其所有表。
用户特权与NDB_STORED_USER的同步。从NDB 8.0.18开始,使用
NDB_STORED_USER
特权可以在SQL节点之间共享和同步用户,角色和特权的新机制。不再支持NDB 7.6和更早版本中实现的分布式特权(请参阅使用共享授权表的分布式特权)。一旦在SQL节点上创建了用户帐户,就可以
NDB
通过发出如下GRANT
语句来将用户及其特权存储在集群中的所有SQL节点中,并在它们之间共享:GRANT NDB_STORED_USERON *.*TO 'jon'@'localhost';NDB_STORED_USER
始终具有全局范围,必须使用授予ON *.*
。系统保留的帐户,例如mysql.session@localhost
或mysql.infoschema@localhost
不能分配此特权。可以通过发出适当的
GRANT NDB_STORED_USER
语句在SQL节点之间共享角色。将这种角色分配给用户不会导致该用户被共享;该NDB_STORED_USER
特权必须被授予每个用户明确。具有
NDB_STORED_USER
SQL权限的用户或角色,一旦加入给定的NDB群集,就会与所有SQL节点共享。用户或角色特权的更改将立即与所有连接的SQL节点同步。可以从任何连接的SQL节点进行此类更改,但是建议的做法是仅从指定的SQL节点进行更改,因为不能保证影响不同SQL节点特权的语句的执行顺序在所有SQL上都相同节点。升级的含义。由于MySQL服务器特权系统的更改(请参见“授权表”),使用
NDB
存储引擎的特权表在NDB 8.0中无法正常运行。安全但不必保留在NDB 7.6或更早版本中创建的此类特权表,但是它们不再用于访问控制。从NDB 8.0.16开始,充当SQL节点并检测到此类表的mysqldNDB
向MySQL服务器日志写入警告,并创建InnoDB
自身的影子表;这样的影子表是在连接到群集的每个MySQL服务器上创建的。从NDB 7.6或更早版本执行升级时,一旦所有充当SQL节点的MySQL服务器都已升级,则NDB
可以使用ndb_drop_table安全删除使用的特权表(请参见“升级和降级NDB群集”)。该ndb_restore实用程序的
--restore-privilege-tables
选项已被弃用,但继续NDB 8.0兑现,并且仍可以用于恢复分布式权限表存在于NDB簇的先前版本带到运行NDB 8.0集群备份。这些表的处理如前所述。共享用户和授权被存储在
ndb_sql_metadata
表中,其中在NDB 8.0.19和后来ndb_restore默认不还原;您可以指定--include-stored-grants
导致它这样做的选项。INFORMATION_SCHEMA更改。在
INFORMATION_SCHEMA.FILES
表中有关磁盘数据文件的信息显示中进行了以下更改:- 表空间和日志文件组不再在
FILES
表中表示。(这些构造实际上不是文件。) - 现在,每个数据文件在
FILES
表中由一行表示。现在,每个撤消日志文件在此表中也仅由一行表示。(以前,在每个数据节点上为每个文件的每个副本显示了一行。)
另外,
INFORMATION_SCHEMA
现在表中填充了MySQL Cluster表的表空间统计信息。(缺陷#27167728)- 表空间和日志文件组不再在
- ndb_perror的错误信息。不建议使用
--ndb
的perror已删除。而是使用ndb_perror从NDB
错误代码获取错误消息信息。(错误#81704,错误#81705,错误#23523926,错误#23523957) 条件下推增强功能。以前,条件下推仅限于谓词,这些谓词指的是来自将条件推入到的同一表中的列值。在NDB 8.0.16中,取消了此限制,以便也可以从推送条件中引用查询计划中较早的表中的列值。从NDB 8.0.18开始,支持比较列表达式的联接,以及同一表中列之间的比较。要比较的列和列表达式必须完全相同。这意味着只要这些属性适用,它们还必须具有相同的符号,长度,字符集,精度和小数位数。
下推条件的较大部分将允许数据节点过滤出更多的行,从而减少了mysqld在联接处理期间必须处理的行数。这些增强的另一个好处是,可以在LDM线程中并行执行过滤,而不是在SQL节点上的单个mysqld进程中执行过滤。这有可能显着提高查询性能。
用于比较的列值之间的类型兼容性的现有规则继续适用(请参见“引擎条件下推式优化”)。
增加最大行大小。 NDB 8.0.18将
NDBCLUSTER
表中可存储的最大字节数从14000字节增加到30000字节。与之前一样,
BLOB
或TEXT
列继续使用该总数的264个字节。NDB
表的固定宽度列的最大偏移量为 8188字节;这与8.0.18之前的版本相同。有关更多信息,请参见“NDB群集中与数据库对象相关联的限制”。
- ndb_mgm SHOW命令和单用户模式。从NDB 8.0.17开始,当群集处于单用户模式时,管理客户端
SHOW
命令的输出指示在该模式生效时哪个API或SQL节点具有独占访问权。 - 在线列重命名。从NDB 8.0.18开始,
NDB
可以使用来在线重命名表的列ALGORITHM=INPLACE
。有关更多信息,请参见“在NDB群集中使用ALTER TABLE进行在线操作”。 缩短了ndb_mgmd启动时间。在NDB 8.0.18及更高版本中,管理节点守护程序的启动时间已通过以下方式得到了显着改善:
- 由于使用
ndb_mgmd
哈希表替换了以前用于处理配置数据中节点属性的列表数据结构,因此管理服务器的总启动时间减少了6倍或更多。 - 此外,如果
hosts
在群集配置文件中使用了管理服务器文件中不存在的数据和SQL节点主机名,则ndb_mgmd的开始时间最多可以比以前缩短20倍。
- 由于使用
NDB API增强功能。从NDB 8.0.18开始
NdbScanFilter::cmp()
,NdbInterpretedCode
可以使用几种比较方法来相互比较表列的值。受影响的NdbInterpretedCode
方法在这里列出:branch_col_eq()
branch_col_ge()
branch_col_gt()
branch_col_le()
branch_col_lt()
branch_col_ne()
对于刚刚列出的所有方法,要比较的表列值都应为完全匹配的类型,包括长度,精度,带符号,小数位数,字符集和排序规则(如适用)。
有关更多信息,请参见各个API方法的描述。
脱机多线程索引构建。现在可以指定一组内核,这些内核将用于执行有序索引的脱机多线程构建的I / O线程,这与文件I / O,压缩或解压缩之类的常规I / O职责相反。在本文中,“ Offline ”是指在未写入父表时执行的有序索引的构建;当
NDB
集群执行节点或系统重新启动时,或者作为使用ndb_restore从备份还原集群的一部分时,就会进行这种构建--rebuild-indexes
。此外,离线索引构建工作的默认行为已修改为使用可用于ndbmtd的所有内核,而不是将其自身限制为为I / O线程保留的内核。这样做可以改善重新启动和还原时间以及性能,可用性和用户体验。
此增强实现如下:
- 的默认值
BuildIndexThreads
从0更改为128。这意味着默认情况下,脱机有序索引构建现在是多线程的。 - 的默认值
TwoPassInitialNodeRestartCopy
从更改false
为true
。这意味着初始节点重新启动会首先将所有数据从“活动”节点复制到正在启动的节点(不创建任何索引),从而离线构建有序索引,然后再次将其数据与活动节点同步,即同步两次并在两个同步化之间离线构建索引。这将导致初始节点重新启动的行为更像节点的正常重新启动,并减少了建立索引所需的时间。 idxbld
为ThreadConfig
配置参数定义了新的线程类型(),以允许将脱机索引构建线程锁定到特定的CPU。
此外,
NDB
现在区分ThreadConfig
这两个条件可访问的线程类型:- 该线程是否为执行线程。的类型的线
main
,ldm
,recv
,rep
,tc
,和send
是执行线程;螺纹类型io
,watchdog
以及idxbld
是不是。 - 线程分配给给定任务是永久的还是临时的。当前,所有线程类型除外,
idxbld
都是永久性的。
有关其他信息,请参见《手册》中指示参数的说明。(缺陷#25835748,错误#26928111)
- 的默认值
- logbuffers表备份过程信息。在执行NDB备份时,该
ndbinfo.logbuffers
表现在显示有关每个数据节点上备份过程的缓冲区使用情况的信息。这被实现为行,除了REDO
和以外还反映了两种新的日志类型DD-UNDO
。这些行之一具有日志类型BACKUP-DATA
,该类型显示备份期间用于将片段复制到备份文件的数据缓冲区量。另一行的日志类型为BACKUP-LOG
,显示备份期间用于记录备份开始后所做更改的日志缓冲区量。这些log_type
行中的每一行都显示在logbuffers
群集中每个数据节点的表。只有当当前正在进行NDB备份时,表中才会出现具有这两种日志类型的行。(缺陷#25822988) - Windows上的ndbinfo.processes表。现在在表中显示为 Windows平台上
RESTART
用于生成和重新启动mysqld的监视进程的进程ID 。processes
angel_pid
字符串哈希改进。在NDB 8.0之前,所有字符串散列都基于首先将字符串转换为规范化形式,然后MD5散列结果二进制图像。由于以下原因,这可能会引起一些性能问题:
- 规范化的字符串始终以空格填充其全长。对于
VARCHAR
,这通常涉及添加比原始字符串中的字符更多的空格。 - 字符串库并未针对此空间填充进行优化,这在某些用例中增加了可观的开销。
- 填充语义在字符集之间有所不同,其中一些字符集未填充到其全长。
- 即使没有空格填充,转换后的字符串也可能变得很大。某些Unicode 9.0归类可以将单个代码点转换为100字节或更多的字符数据。
- 随后的MD5哈希主要由空格填充组成,并且效率不是特别高,可能会通过刷新L1缓存的重要部分而导致其他性能损失。
排序规则提供了自己的哈希函数,该函数直接对字符串进行哈希处理,而无需先创建规范化的字符串。此外,对于Unicode 9.0归类,哈希的计算无需填充。
NDB
现在,只要对标识为使用Unicode 9.0归类的字符串进行哈希处理,就可以利用此内置函数。由于对于其他归类而言,存在在转换后的字符串上进行哈希分区的现有数据库,因此
NDB
继续采用先前的方法对使用这些方法的字符串进行哈希处理以保持兼容性。(错误#89590,错误#89604,错误#89609,错误#27515000,错误#27523758,错误#27522732)- 规范化的字符串始终以空格填充其全长。对于
RESET MASTER更改。由于MySQL Server现在
RESET MASTER
使用全局读取锁执行,因此与NDB Cluster一起使用时,该语句的行为在以下两个方面有所变化:- 它不再保证是同步的。也就是说,现在可能
RESET MASTER
要等到二进制日志旋转之后才记录即将发布的读取。 - 现在,无论该语句是在编写二进制日志的同一SQL节点上发出,还是在同一群集中的其他SQL节点上发出,该语句的行为都完全相同。
注意
SHOW BINLOG EVENTS
,FLUSH LOGS
和大多数数据定义语句(与以前的NDB
版本一样)继续以同步方式运行。- 它不再保证是同步的。也就是说,现在可能
- ndb_restore选项的用法。从NDB 8.0.16开始,调用ndb_restore时,
--nodeid
和--backupid
选项都是必需的。 - 默认为ndb_log_bin。从NDB 8.0.16开始,
ndb_log_bin
系统变量的默认值已从更改TRUE
为FALSE
。 动态事务资源分配。现在,使用动态内存池来执行事务协调器中的资源分配(请参阅 DBTC块)。这意味着,资源分配判断由数据节点的配置参数,例如
MaxDMLOperationsPerTransaction
,MaxNoOfConcurrentIndexOperations
,MaxNoOfConcurrentOperations
,MaxNoOfConcurrentScans
,MaxNoOfConcurrentTransactions
,MaxNoOfFiredTriggers
,MaxNoOfLocalScans
,和TransactionBufferMemory
现在以这样的方式进行操作:如果这些参数中的每一个所代表的负载在所有此类资源的目标负载之内,则可以限制这些其他资源,以免超出可用的总资源。作为这项工作的一部分,添加了几个新的数据节点参数,用于控制
DBTC
此处列出的事务资源:ReservedConcurrentIndexOperations
ReservedConcurrentOperations
ReservedConcurrentScans
ReservedConcurrentTransactions
ReservedFiredTriggers
ReservedLocalScans
ReservedTransactionBufferMemory
。
有关更多信息,请参见刚刚列出的参数说明。
每个数据节点使用多个LDM进行备份。
NDB
现在,可以使用多个本地数据管理器(LDM)以并行方式在单个数据节点上执行备份。(以前,备份是在数据节点之间并行完成的,但是始终在数据节点进程中是串行的。)ndb_mgm客户端中的START BACKUP
命令不需要特殊语法即可启用此功能,但是所有数据节点必须使用多个LDM。这意味着数据节点必须正在运行ndbmtd(ndbd是单线程的,因此始终只有一个LDM),并且在进行备份之前必须将它们配置为使用多个LDM。您可以通过为多线程数据节点配置参数MaxNoOfExecutionThreads
或选择一个合适的设置来做到这一点ThreadConfig
。使用多个LDM的备份会在目录下创建子目录,每个LDM都创建一个子目录。现在,ndb_restore会自动检测这些子目录,如果它们存在,则尝试并行还原备份。有关详细信息,请参见“ndb_restore-还原NDB群集备份”。(单线程备份的还原与以前的版本相同。)通过修改常规还原过程,还可以使用Ndb Cluster早期版本中的ndb_restore二进制文件来还原并行获取的备份。“串行还原并行备份”
BACKUP/BACKUP-backup_id/
NDB
,提供有关如何执行此操作的信息。- ARM支持(仅源)。从NDB 8.0.18开始,可以
NDB
从源代码构建 64位ARM
CPU。当前,此支持仅是源代码,我们不为此平台提供任何预编译的二进制文件。 二进制配置文件增强。从NDB 8.0.18开始,新格式用于管理服务器的二进制配置文件。以前,群集配置文件中最多可以显示16381个部分;现在,最大分段数为4G。这旨在支持群集中比此更改之前可能的节点数量更多的节点。
升级到新格式是相对无缝的,并且很少需要手动干预,因为管理服务器仍可以读取旧格式而不会出现问题。从NDB 8.0.18(或更高版本)降级到NDB Cluster软件的较旧版本需要手动删除任何二进制配置文件,或者使用该
--initial
选项启动较旧的管理服务器二进制文件。有关更多信息,请参见“升级和降级NDB群集”。
数据节点数量增加。 NDB 8.0.18将每个群集支持的最大数据节点数增加到144(以前是48)。数据节点现在可以使用1到144(含)范围内的节点ID。
以前,管理节点的建议节点ID为49和50。管理节点仍支持这些ID,但是使用它们将数据节点的最大数量限制为142;因此,将其限制为142。因此,现在建议将节点ID 145和146用于管理节点。
- RedoOverCommitCounter和RedoOverCommitLimit更改。由于在语义将它们设置为0歧义,对于每个数据节点的配置参数的最小值
RedoOverCommitCounter
和RedoOverCommitLimit
已经增大到1,其中NDB 8.0.19开始。 - ndb_autoincrement_prefetch_sz更改。在NDB 8.0.19中,
ndb_autoincrement_prefetch_sz
服务器系统变量的默认值增加到512。 参数maxmimums和默认值的更改。 NDB 8.0.19对配置参数的最大值和默认值进行了以下更改:
- 的最大数量
DataMemory
增加到16 TB。 - 的最大数量
DiskPageBufferMemory
也增加到16 TB。 - 的默认值
StringMemory
增加到25%。 - 的默认值
LcpScanProgressTimeout
增加到180秒。
- 的最大数量
磁盘数据检查点改进。 NDB Cluster 8.0.19提供了许多新的增强功能,当使用非易失性存储设备(例如固态驱动器和此类设备的NVMe规范)时,有助于减少磁盘数据表和表空间的检查点的延迟。这些改进包括以下列表中的改进:
- 避免检查点磁盘写入突发
- 重做日志或撤消日志已满时,加快磁盘数据表空间的检查点
- 必要时使检查点与磁盘检查点和内存中检查点相互平衡
- 保护磁盘设备免于过载,以帮助确保高负载下的低延迟
作为这项工作的一部分,NDB 8.0.19引入了两个新的数据节点配置参数。
MaxDiskDataLatency
限制磁盘访问允许的延迟程度,并导致花费比此时间更长的时间的事务中止。DiskDataUsingSameDisk
通过提高执行此类表空间检查点的速率,可以利用将磁盘数据表空间容纳在单独的磁盘上的优势。此外,
ndbinfo
数据库中的三个新表(也在NDB 8.0.19中添加并在此处列出)提供了有关磁盘数据性能的信息:- 该
diskstat
表报告了过去一秒内对磁盘数据表空间的写操作 - 该
diskstats_1sec
表报告最近20秒内对磁盘数据表空间的写操作 - 该
pgman_time_track_stats
表报告与磁盘数据表空间有关的磁盘操作的延迟
内存分配和TransactionMemory。 NDB 8.0.19引入了一个新
TransactionMemory
参数,该参数简化了事务的数据节点内存分配,这是将事务和本地数据管理器(LDM)内存池化的一部分工作。此参数旨在替换已弃用的几个较旧的事务性存储器参数。现在可以通过以下三种方式之一设置事务存储:
- 几个不建议使用的配置参数与不兼容
TransactionMemory
。如果设置了任何一个,TransactionMemory
则无法设置(请参阅与TransactionMemory不兼容的参数),并且将确定数据节点的事务内存是NDB 8.0.19之前的版本。 - 如果
TransactionMemory
设置为,则此值用于确定事务存储。TransactionMemory
如果还设置了上一项中提到的任何不兼容的不建议使用的参数,则无法设置。 - 如果
TransactionMemory
未设置任何不兼容的参数,也未设置,则事务存储器由设置NDB
。
有关更多信息,请参见的描述
TransactionMemory
以及“数据节点内存管理”。- 几个不建议使用的配置参数与不兼容
- 支持其他副本。 NDB 8.0.19将生产中支持的最大副本数从2增加到4。(以前,可以将其设置
NoOfReplicas
为3或4,但是在测试中未正式支持或验证。) 按片还原。从NDB 8.0.20开始,可以将备份分成大致相等的部分(切片),并使用为ndb_restore实现的两个新选项并行还原这些切片:
--num-slices
确定应将备份分成的片的数量。--slice-id
提供要由ndb_restore的当前实例还原的片的ID 。
这使得可以使用ndb_restore的多个实例来并行还原备份的子集,从而有可能减少执行还原操作所需的时间。
有关更多信息,请参见ndb_restore
--num-slices
选项的描述。从任何启用的副本中读取。从NDB 8.0.19开始,默认情况下为所有
NDB
表启用从任何副本进行读取。这意味着ndb_read_backup
系统变量的默认值现在为ON,并且在创建新表时NDB_TABLE
comment选项的READ_BACKUP
值为1NDB
。启用从任何副本进行的读取可显着提高从NDB
表读取的性能,而对写入的影响最小。有关更多信息,请参见
ndb_read_backup
系统变量的描述和“设置NDB_TABLE选项”。ndb_blob_tool增强功能。从NDB 8.0.20开始,ndb_blob_tool实用程序可以检测到丢失的blob部件,这些部件存在内联部件,并用正确长度的占位符blob部件(由空格组成)替换。要检查是否缺少斑点部分,请在
--check-missing
此程序中使用该选项。要将所有丢失的Blob零件替换为占位符,请使用该--add-missing
选项。有关更多信息,请参见“ndb_blob_tool—检查和修复NDB群集表的BLOB和TEXT列”。
- ndbinfo版本控制。
NDB
8.0.20及更高版本支持ndbinfo
表的版本控制,并在内部维护其表的当前定义。在启动时,NDB
将其支持的ndbinfo
版本与数据字典中存储的版本进行比较。如果版本不同,则NDB
删除所有旧ndbinfo
表并使用当前定义重新创建它们。 - 支持Fedora Linux。从NDB 8.0.20开始,Fedora Linux是NDB Cluster Community版本支持的平台,可以使用Oracle为此目的提供的RPM进行安装。这些可以从 NDB群集下载页面获得。
NDB程序-消除NDBT依赖项。删除了许多
NDB
实用程序对NDBT
库的依赖。该库在内部用于开发,正常使用不是必需的。在测试中将其包含在这些程序中可能会导致不必要的问题。此处列出了受影响的程序,以及
NDB
删除依赖项的版本:- ndb_delete_all,在NDB 8.0.18
- ndb_show_tables,在NDB 8.0.20
- ndb_waiter,在NDB 8.0.20
此更改对用户的主要影响是,运行完成后,这些程序将不再打印。依赖于此类行为的应用程序应进行更新,以反映升级到指示版本时的更改。
NDBT_ProgramExit -status
下推外部联接和半联接。在NDB 8.0.20中完成的工作允许将许多外部联接和半联接(不仅是使用主键或唯一键查找的联接)下推到数据节点(请参见“引擎条件下推优化”)。
现在可以使用扫描推送的外部联接包括满足以下条件的那些:
- 桌子上没有未按下的条件
- 在同一联接嵌套中的其他表或它依赖的上联接联接中,没有未推条件
- 相同联接嵌套或它依赖的上联接嵌套中的所有其他表也被推送
现在,如果符合索引中所要求的外部联接的条件的半联接可以被推动,并且使用该
firstMatch
策略(请参见“使用 EXISTS 策略优化子查询”)。当无法推动联接时,
EXPLAIN
应提供一个或多个原因。- 外键和字母包围。
NDB
使用定义外键的方式存储外键的名称。以前,当lower_case_table_names
系统变量的值设置为0时,它将执行区分使用的外键名称SELECT
和其他SQL语句以及存储的名称的区分大小写的比较。从NDB 8.0.20开始,这种比较现在始终以不区分大小写的方式执行,而与的值无关lower_case_table_names
。 多个运输商。 NDB 8.0.20引入了对多个传输器的支持,以处理数据节点对之间的节点到节点通信。这有助于提高群集中每个节点组的更新操作的速率,并有助于避免由于系统限制或使用单个套接字的节点间通信受到其他限制。
默认情况下,
NDB
现在根据本地数据管理(LDM)线程数或事务处理协调器(TC)线程数,使用较大数量的传输器。默认情况下,转运蛋白的数量等于该数量的一半。虽然默认值对于大多数工作负载都可以很好地执行,但是可以通过设置NodeGroupTransporters
数据节点配置参数(也在NDB 8.0.20中引入)来调整每个节点组使用的传输器的数量,最大数量中的最大值LDM线程数或TC线程数。将其设置为0会使传输器的数量与LDM线程的数量相同。ndb_restore:主键架构更改。当
NDB
使用ndb_restore运行带有该--allow-pk-changes
选项的本地备份时, NDB 8.0.21(及更高版本)支持源表和目标表的不同主键定义。支持增加和减少构成原始主键的列数。当主键扩展有一个或多个附加列时,必须将添加的任何列定义为
NOT NULL
,并且在进行备份的过程中任何此类列中的值都不得更改。由于某些应用程序在更新时将所有列值设置为一行,因此无论是否实际更改了所有值,即使未更改要添加到主键的列中的值,这也可能导致还原操作失败。您可以使用--ignore-extended-pk-updates
也在NDB 8.0.21中添加的选项来覆盖此行为。在这种情况下,必须确保没有更改任何此类值。无论该列是否仍是表的一部分,都可以从表的主键中删除该列。
有关更多信息,请参见ndb_restore的
--allow-pk-changes
选项说明。使用ndb_restore合并备份。在某些情况下,可能希望将最初存储在NDB群集的不同实例中的数据(全部使用相同的架构)合并到单个目标NDB群集中。现在,当使用在ndb_mgm客户端中创建的备份(请参见“NDB集群在线备份”)并使用ndb_restore还原它们时,使用
--remap-column
NDB 8.0.21中添加的选项以及--restore-data
(以及可能需要的附加兼容选项)。--remap-column
可以用于处理主键和唯一键值在源群集之间重叠的情况,并且有必要在目标群集中它们不重叠,以及保留表之间的其他关系(例如外键)。--remap-column
将具有以下格式的字符串作为参数作为参数,其中,和是数据库,表和列的名称,是重新映射函数的名称,并且是的一个或多个参数。没有默认值。仅支持将函数名作为函数名,并将其作为从备份插入目标表时应用于列值的整数偏移量。该列必须使用MySQL整数类型之一(请参见“整数类型(精确值)-INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT”db
.tbl
.col
:fn
:args
db
tbl
col
fn
args
fn
offset
args
);偏移值的允许范围与该类型的带符号版本相同(如果需要,可以使偏移值为负)。可以在ndb_restore的同一调用中多次使用new选项,以便可以将同一表,不同表或这两者的多个列重新映射到新值。偏移值不必对于该选项的所有实例都相同。
此外,为Ndb_desc提供了两个新选项,这些选项也从NDB 8.0.21开始:
--auto-inc
(简写形式-a
):如果表有一个AUTO_INCREMENT
列,则在输出中包括下一个自动增量值。--context
(简短形式-x
):提供有关表的额外信息,包括模式,数据库名称,表名称和内部ID。
有关更多信息和示例,请参阅该
--remap-column
选项的描述。- 发送线程改进。从NDB 8.0.20开始,每个发送线程现在都处理发送到一部分传输器的消息,并且每个块线程现在仅协助一个发送线程,从而导致更多的发送线程,从而提高了性能和数据节点的可伸缩性。
MySQL Cluster Manager 1.4.8还为NDB Cluster 8.0提供了实验性支持。MySQL Cluster Manager具有高级的命令行界面,可以简化许多复杂的NDB Cluster管理任务。有关更多信息,请参见《 MySQL™Cluster Manager 1.4.8用户手册》。