MySQL NDB集群7.5.2是MySQL NDB集群7.5的新版本,基于MySQL Server 5.7,包含7.5版的特性NDB
存储引擎,以及修复最近在以前的NDB集群版本中发现的错误。
获取MySQL NDB 7.5集群。MySQL NDB集群7.5源代码和二进制文件可以从10bet博彩公司 .
有关MySQL NDB Cluster 7.5更改的概述,请参见NDB 7.5集群有什么新变化.
这个版本还包含了以前NDB集群版本中所有的错误修复和更改,以及从MySQL 5.7到MySQL 5.7.12主线中添加的所有错误修复和功能更改MySQL 5.7.12的变更(2016-04-11,一般可用性)).
重要的变化;NDB复制:的
ndb_binlog_index
表现在使用InnoDB
存储引擎。当将以前的版本升级到当前版本或更新版本时,请使用mysql_upgrade与——力
——upgrade-system-tables
让它执行修改表…引擎= INNODB
在这张桌子上。的使用MyISAM
为了向后兼容,继续支持该表的存储引擎。此更改的一个好处是,现在可以依赖于此表的事务行为和无锁读取,这应该有助于缓解清除操作和日志旋转期间的并发问题,并提高此表的可用性。
由于存储要求的差异
MyISAM
而且InnoDB
表,用户应该意识到ndb_binlog_index
现在可能会占用比以前所需的更多的磁盘空间。有关更多信息,请参见NDB集群复制模式和表.
性能:事件缓冲区内存分配的缺陷被认为是低效的,可能会导致不期望的结果。当从操作系统分配额外的内存来缓冲接收到的事件数据时,即使已经分配了内存但仍未使用,也会发生这种情况。通过直接从页分配内存管理器(
mmap ()
),其中操作系统提供了这样的功能,允许直接控制内存,以便在释放内存时实际上返回给系统。这种重新实现避免了现有方法接近最坏情况内存使用的趋势,维护最坏情况事件缓冲区事件计数的数据结构,以及在不可用的位置无用地缓存空闲内存。这项工作还应该有助于最大限度地减少缓冲事件的运行时成本,最小化堆碎片,并避免由于过多的不同内存映射而导致的特定于操作系统的问题。
此外,epoch和内部EventData对象之间的关系现在在整个事件生命周期(从接收到使用)中保持不变,从而消除了迭代和保持同步的需要,表示epoch和它们的两个不同列表
EventData
对象。作为这项工作的一部分,现在在集群日志中提供了更好的有关事件缓冲区指标的报告。
参考:参见:Bug #21651536, Bug #21660947, Bug #21661297, Bug #21673318, Bug #21689380, Bug #21809959。
NDB集群api:添加了
Ndb: setEventBufferQueueEmptyEpoch ()
方法,该方法可以启用空事件(事件类型TE_EMPTY
).(错误# 22157845)NDB集群api:
Ndb_free_list_t
是NDB API实现中使用的模板,用于创建一个列表,保持发布的API对象,如NdbTransaction
,NdbOperation
,NdbRecAttr
.该模板的一个缺点是,已发布的API对象在其所有者的生命周期内都保存在列表中Ndb
对象,这样对任何对象的需求中的瞬时峰值都会导致有效的内存泄漏,并一直持续到此为止Ndb
对象本身已被释放。这项工作增加了统计数据
Ndb_free_list
实例,对列表维护的对象的使用情况进行抽样;现在,当对象被释放时,可以根据收集到的使用统计信息将它们释放到空闲列表中或重新释放。JSON:的
NDB
存储引擎支持MySQLJSON
数据类型和MySQLJSON
在MySQL 5.7.8及以后版本中实现的函数。此支持受限于单个NDB
表最多可以有3个JSON
列。MySQL NDB ClusterJ:使ClusterJ更容易处理需要
SessionFactory
要封闭,就有一种新的公开方法SessionFactory
接口,getConnectionPoolSessionCounts (),已被创建。当它为所有池连接返回0时,意味着所有会话都已关闭SessionFactory
可以关闭和重新打开。看到错误处理和重新连接更多细节。(错误# 22353594)对。进行了以下增强和添加
ThreadConfig
多线程数据节点(ndbmtd)配置参数:增加了对FreeBSD和Windows上的非独占CPU锁定的支持
cpubind
而且cpuset
.添加了对Solaris上的独占CPU锁定的支持
cpubind_exclusive
而且cpuset_exclusive
,这些都是在这个版本中添加的。增加线程优先级使用
thread_prio
,在此版本中添加。thread_prio
在Linux、FreeBSD、Windows和Solaris上都支持,但此设置的确切效果是特定于平台的;详细信息请参见文10bet官方网站档。增加了设置支持
实时
在Windows平台上。
有关详细信息,请参见
ThreadConfig
参数。10bet官方网站(错误# 25830247)ndb_restore现在为其操作的特定阶段执行输出日志记录。(错误# 21097957)
MySQL NDB集群数据节点使用的哈希索引实现的改进意味着,对于固定列,分区现在可能包含超过16gb的数据,固定列数据的最大分区大小现在增加到128tb。之前的限制起源于
DBACC
块NDB
类中处理的行固定大小部分仅使用32位引用DBTUP
块,即使45位引用已经在内核之外的其他地方使用DBACC
块;所有此类参考资料DBACC
现在改用45位指针。方法返回的错误消息是这项工作的一部分
DBACC
过于通用的内核块现在已经改进,使它们更加特定。(Bug #13844581, Bug #17465232)对发送线程的处理做了许多更改和改进
NDB
.以下是对这些变化的简要说明:减少了对发送线程的资源需求,确保使用发送线程的给定配置优于不使用发送线程的相同配置。
在低负载情况下,使用其他空闲线程(接收线程除外)作为发送线程,而不会占用额外的CPU资源。
改进了写事务的响应时间。
提供以更优雅的方式处理坏配置数据。
通过改进数据节点对其资源使用情况的实时报告,可以测量CPU使用情况。
作为实现刚刚列出的最后一项的一部分,已将许多新表添加到
ndbinfo
信息数据库。下面列出了这些表格:cpustat
:提供每秒、线程的CPU统计信息cpustat_50ms
:显示每线程CPU的原始统计数据,每50ms收集一次cpustat_1sec
:提供每线程CPU的原始统计数据,每秒收集一次cpustat_20sec
:显示每线程CPU的原始统计数据,每20秒采集一次线程
:显示线程类型的名称和描述
有关更多信息,请参见ndbinfo: NDB集群信息数据库.
重写的实现
NDB
存储引擎的全局模式锁功能,以利用在MySQL 5.7.11的MySQL服务器中实现的元数据锁钩子。许多改进提供了额外的读取可伸缩性
NDB
通过使本地读取表成为可能。现在可以从任何片段副本中读取,而不仅仅是从主片段副本中读取。默认情况下禁用此功能,以保持与前面的行为兼容,但是可以使用ndb_read_backup
本版本新增的系统变量。通过设置片段计数类型,还可以更灵活地分配分区。可能的计数类型为每个节点一个、每个节点组一个、每个节点一个Local Data Manager (LDM)(这是以前的分配方案,仍然是默认的),以及每个节点组一个LDM。可以通过控件控制单个表的此设置
FRAGMENT_COUNT_TYPE
选项中嵌入的NDB_TABLE
评论创建表
或ALTER TABLE
.这也意味着,在恢复表模式时,ndb_restore
——restore-meta
现在为目标集群使用默认分区,而不是复制从中获取备份的集群的分区。这在恢复到数据节点比原始集群多的集群时非常有用。看到恢复节点数大于原节点数,以获取更多资料。对于片段计数类型,使用两个每个节点组设置之一的表也可以完全复制。这要求表的片段计数类型为
ONE_PER_NODE_GROUP
或ONE_PER_LDM_PER_NODE_GROUP
,可以使用该选项启用FULLY_REPLICATED = 1
在一个NDB_TABLE
发表评论。默认情况下,可以为所有new启用该选项NDB
表使用ndb_fully_replicated
本版本新增的系统变量。表级设置
READ_BACKUP
也支持使用评论= " NDB_TABLE =…”
语法。在一个注释中设置多个选项也是可能的(通常是更可取的)创建表
或ALTER TABLE
声明。有关更多信息和示例,请参见设置NDB_TABLE选项.此版本还介绍了
ndb_data_node_neighbour
系统变量,该变量用于事务提示(和完全复制的表),并为当前SQL节点提供ID为”附近的”要使用的数据节点。有关更多信息,请参阅文档中对此变量的描述。10bet官方网站参考:参见Bug #18435416, Bug #11762155, Bug #54717。
不兼容的更改:当数据节点仅部分连接到API节点时,用于下推连接的节点可能从不同节点上的事务协调器获得请求,而(尚未)连接到API节点本身。在这种情况下,
NodeInfo
对象中没有包含API节点软件版本的有效信息,这将导致DBSPJ
块在中止假设API节点使用时(错误地)NDB
7.2.4或更早版本,要求在查询中止期间使用向后兼容模式,该模式会发送一个节点故障错误,而不是导致中止的实际错误。现在,无论何时出现这种情况,都假定如果
NDB
API节点版本号大于7.2.4。(错误# 23049170)重要的变化:开始的时候
——初始化
选项,mysqld不再启用NDBCLUSTER
存储引擎插件。需要进行此更改以防止将系统数据库初始化为分布式(而不是特定于单个SQL节点),这可能导致元数据锁死锁。此修复还带来的行为——初始化
在这方面与已停产的相一致——引导
选项,它开始一个最小值mysqld未启用的实例NDB
.(错误# 22758238)性能:在内部轮询方法中发现了一个性能问题
do_poll ()
轮询客户端在完成轮询之前没有检查它自己是否已被唤醒。随后的分析表明,轮询队列中只有一些客户端接收数据是足够的。do_poll ()
然后可以向这些客户端发送信号并放弃其轮询权限,即使指定的最大等待时间(10 ms)还没有过期。此更改允许
do_poll ()
继续轮询,直到指定的最大等待时间过期,或者轮询客户端本身已被唤醒(通过接收它所等待的内容)。这避免了在客户机线程之间进行不必要的线程切换,从而在API客户机中减少了多达10%的相关开销,从而在客户机线程执行自己的轮询时显著提高了性能。(Bug #81229, Bug #23202735)macOS:在OS X上,ndb_config属性使用空字符串时失败
——主机
选择。(Bug #80689, Bug #22908696)微软的Windows操作系统:ndb_mgmd无法在32位Windows平台上启动,由于调用动态加载函数的问题;这样的问题也可能发生在其他
NDB
程序使用ndb_init ()
.我们发现所有使用的函数在目标版本的Windows中都已经得到了支持,因此通过删除这些函数的动态加载并使用Windows头文件提供的版本来解决这个问题。(Bug #80876, Bug #23014820)微软的Windows操作系统:当在Windows上使用多个并行构建作业构建MySQL NDB集群时,有时可能会导致构建失败,因为host_info.exe无法安装。为了解决这个问题,
install_mcc
目标现在总是在host_info
目标。(Bug #80051, Bug #22566368)微软的Windows操作系统:执行
分析表
在有一个或多个索引的表上ndbmtd以失败告终InvalidAttrInfo信号损坏导致的错误。此问题在Windows上一直发生,但也可能在其他平台上遇到。(Bug #77716, Bug #21441297)Solaris:的ndb_print_file实用程序在Solaris 9的SPARC上始终失败。(Bug #80096, Bug #22579581)
NDB磁盘数据:对使用MySQL NDB集群磁盘数据的数据节点重新启动时的日志记录进行了以下改进:
数据节点应用的undo日志总量现在提供为日志中显示的总页数。这是最坏情况的估计。
现在,在应用undo日志时,会定期提供进度信息(每30000条记录一次)。此信息以当前重新启动期间应用到目前为止的记录数和撤消日志页数的形式提供。
(错误# 22513381)
NDB集群api:删除Ndb对象使用了不成比例的大量CPU。(错误# 22986823)
NDB集群api:对象执行事务
NdbIndexOperation
基于过时的唯一索引导致数据节点进程失败。现在在这种情况下检查索引,如果不能使用它,事务就会失败,并出现相应的错误。(Bug #79494, Bug #22299443)MySQL NDB Cluster 7.4.8中引入的、API和管理节点用于管理信号的环回传输器预留发送缓冲区计算错误。(Bug #23093656, Bug #22016081)
这个问题是对Bug #21664515的回归。
在节点重新启动期间,重新创建用于验证外键引用完整性的内部触发器是不可靠的,因为可能不是所有分布式TC和LDM实例都同意所有触发器标识。为了解决这个问题,在节点重启序列中添加了一个额外的步骤,在这个步骤中,通过查询当前主节点来确定触发器标识。(错误# 23068914)
参考:参见Bug #23221573。
在强制关闭集群中的2个数据节点之一之后,其中
NoOfReplicas = 2
时,由于仲裁失败,另一个数据节点也会关闭。(错误# 23006431)堕胎
创建日志文件组
由于缺少共享全局内存而失败的语句没有正确执行,导致节点故障。此外,发生这种情况的事务没有正确地回滚,这也导致了任何后续问题创建日志文件组
失败。(错误# 22982618)的
ndbinfo.tc_time_track_stats
该表使用直方图桶来提供延迟分布的感觉。这些桶的大小也被报道为直方图边界信息
数据节点启动期间的消息;此打印输出是多余的,因此已被删除。(错误# 22819868)由于用于测试版本之间升级兼容性的矩阵中缺少条目,无法从以前版本的MySQL NDB集群在线升级到MySQL NDB集群7.5。(错误# 22024947)
故障发生在
DBTUP
当一个片段的可变大小页面总数超过4 GB时,在调试构建中。(错误# 21313546)恢复元数据ndb_restore
- m
偶尔会出现错误消息失败创建索引失败…创建唯一索引时。在诊断此问题时,发现内部错误PREPARE_SEIZE_ERROR(临时错误)报告为未知错误。在这种情况下,ndb_restore重试唯一索引的创建,并且PREPARE_SEIZE_ERRORNDB Error 748读取事件表时忙.(错误# 21178339)参考:参见Bug #22989944。
mysqld执行时没有干净地关闭
ndb_index_stat
.(错误# 21098142)参考:参见Bug #23343739。
对数据节点错误记录机制进行了以下改进:
将消息槽大小从499字节增加到999字节,以防止日志消息相互覆盖或被截断。
增加了一个
跟踪文件名
字段输出。此字段包含引起跟踪的线程的跟踪文件名(没有任何路径)和跟踪文件号。ndbmtd跟踪文件现在也显示在错误日志中。
(错误# 21082710)
DBDICT
而且GETTABINFOREQ
队列调试增强如下:由数据节点监视的进程
GETTABINFOREQ
可通过设置使能信号DictTrace
> = 2。添加了
ApiVerbose
configuration参数,当它设置为大于或等于2时,将在API节点上启用NDB API调试日志记录。添加
转储
的当前状态GETTABINFOREQ
队列中。(见转储1229.)
另请参阅DBDICT块.(错误# 20368450)
参考:参见Bug #20368354。
mysql_upgrade日志含义升级失败。
sys
模式,如果sys
数据库目录存在但为空。(Bug #81352, Bug #23249846, Bug #22875519)当写入时
ndb_binlog_index
在MySQL服务器关闭时,表失败,mysqld杀了NDB
二进制日志线程。(Bug #81166, Bug #23142945)没有通过内部表信息方法释放与表描述关联的内存
NdbDictInterface: parseTableInfo ()
.(Bug #81141, Bug #23130084)改进内部内存使用
TransporterFacade
构造函数时执行互斥数组初始化。(Bug #81134, Bug #23127824)中引发错误时发生的内存泄漏
ha_ndbcluster: get_metadata ()
或者该方法调用的某个函数。(Bug #81045, Bug #23089566)用于验证连接的内部函数在创建新的连接时未能更新连接计数
Ndb
对象。这有可能创造一个新的Ndb
对象用于验证连接的每个操作,这可能会对性能产生影响,特别是在执行模式操作时。(Bug #80750, Bug #22932982)的表扫描
NDB
表既不使用有序索引也不使用磁盘数据列通常使用ACC
扫描。如果这发生在扫描一个唯一但无序的索引时,该索引在扫描开始后收缩(由于删除了行),然后再次增长(插入了行),那么一个既没有删除也没有插入的行可以被扫描两次。(Bug #80733, Bug #22926938)中开始备份ndb_mgm客户端创建大量表后导致集群强制关闭。处理步骤(Bug #80640, Bug #228849958)
当一个SQL节点启动并加入模式分发协议时,另一个已经在等待模式更改分发的SQL节点将在等待期间超时。这是因为代码错误地假设新的SQL节点也会承认模式分布,即使新节点加入太晚而不能参与其中。
作为修复的一部分,模式分发进程的打印输出现在总是在位掩码的较低重要部分之前打印较重要的部分;这种打印输出中的位掩码格式也得到了改进。(Bug #80554, Bug #22842538)
MySQL NDB集群自动安装程序在不同的平台上无法以不同的方式工作。(Bug #79853, Bug #22502247)
内函数
ndbrequire ()
,就像assert ()
,计算给定表达式并在表达式的计算结果不是true时终止进程,现在将失败的表达式包含在错误日志的输出中。(Bug #77021, Bug #21128318)尝试在正在进行的备份期间删除表失败,并出现错误消息未知的表;现在,它失败了由于正在进行备份,无法更改表.(Bug #47301, Bug #11755512)
参考:参见Bug #44695, Bug #11753280。