MySQL NDB Cluster 7.6.2是NDB 7.6的一个新版本,基于MySQL Server 5.7,包括版本7.6的特性NDB
存储引擎,以及修复最近发现的bug在以前的NDB集群版本。
获取NDB集群7.6。NDB Cluster 7.6的源代码和二进制文件可以从10bet博彩公司 。
关于NDB Cluster 7.6中更改的概述,请参见NDB Cluster 7.6有什么新功能。
这个版本还包含了之前NDB Cluster版本中所有的bug修复和更改,以及在主线MySQL 5.7到MySQL 5.7.18中添加的所有bug修复和特性更改MySQL 5.7.18的变化(2017-04-10,普通可用性))。
Solaris:由于系统运行时库的依赖项,Solaris的最低要求版本现在是Solaris 11更新3。
Solaris:在Solaris上,MySQL现在是用Developer Studio 12.5构建的,而不是海湾合作委员会。二进制文件需要安装Developer Studio C/ c++运行库。查看这里,了解如何只安装库:
https://docs.oracle.com/cd/e60778_01/html/e60743/ogozsu.html.
不兼容的更改;NDB磁盘数据:由于磁盘文件格式的变化,有必要执行
——初始
在升级到此版本时升级或降级时重新启动每个数据节点。重要的变化:作为正在进行的简化NDB Cluster配置工作的一部分,索引的内存现在从
DataMemory
;这IndexMemory.
配置参数现在已弃用,并将在未来的NDB版本中移除。任何被设置的内存IndexMemory.
在config.ini
文件现在自动添加到DataMemory
。另外,默认值为DataMemory
已增加到98M,默认的IndexMemory.
已经减少到0。除了简化配置
NDB
,这些更改的另一个好处是,通过增加LDM线程数量来进行扩展,不再会因为为IndexMemory.
。以前,增加LDM线程的数量有时会导致索引内存耗尽,而大量的LDM线程则会导致索引内存耗尽DataMemory
仍然可用。因为
DBACC.
内核块(负责哈希索引存储)现在与彼此共享存储器以及DBLQH
(充当本地数据管理器的内核块),它们可以利用向上伸缩不增加这一事实DataMemory
大量使用,充分利用索引的空闲内存。(有关这些内核块的更多信息,请参见DBACC块,DBLQH块。这里列出了作为这项工作的一部分所做的相关更改:
的几个实例
DataMemory
与表数据存储无关的使用现在使用事务内存代替。出于这个原因,在某些系统上可能需要增加
sharedglobalmemory.
。此外,使用大型事务执行初始批量数据负载的系统可能需要将大型事务分解为较小的事务。数据节点现在生成
MemoryUsage
事件(见NDB集群日志事件),并在资源使用达到99%(以及像以前一样达到80%、90%或100%)时在集群日志中写入适当的消息。报告记忆库
和其他曝光内存消耗的命令现在使用页面大小为32K而不是8K来显示索引存储器消耗。IndexMemory.
控件中不再显示的值之一ndbinfo.memoryusage
表的memory_type
列。这
ndbinfo.resources
表现在显示DISK_OPERATIONS
资源原样TRANSACTION_MEMORY
。这
保留
资源已被移除。IndexMemory.
不再显示在ndb_config输出。
表现:控件的源代码中的许多调试语句和打印输出
DBTC
和DBLQH
内核块以及相关代码中的内核块被移到调试代码中,或者完全删除。在许多常见的用例中,预计这将使本地数据管理和事务协调器线程的性能提高至多10%。NDB集群api;ndbinfo信息数据库:添加两个表到
ndbinfo
信息数据库。这然后
表提供有关配置为给定NDB群集的一部分的节点的信息,例如节点ID和进程类型。这流程
表显示了有关当前连接到群集的节点的信息;此信息包括进程名称和系统进程ID和服务地址。对于每个数据节点和SQL节点,它还显示了节点天使过程的进程ID。作为实现
流程
表,一个新的set_service_uri()
方法已添加到NDB API中。有关更多信息,请参见表ndbinfo config_nodes,ndbinfo进程表, 也ndb_cluster_connection :: set_service_uri()。
NDB集群api:NDB集群的系统名现在可以在mysql客户作为价值
ndb_system_name.
状态变量,也可以通过NDB API应用程序使用Ndb_cluster_connection: get_system_name ()
方法。系统名称可以使用的名字
参数(系统)
集群配置文件的一部分。添加了
- query-all
选项ndb_config。此选项的作用与- 询问
选择除了- query-all
(简式:——一个
)一次转储所有属性的配置信息。(Bug #60095, Bug #11766869)以前,当一个LDM线程遇到I/O延迟时,比如在磁盘过载情况下,它向本地检查点写入的速度会更慢——也就是说,它在I/O延迟模式下写入。但是,其他LDM线程不一定遵守或符合这种状态。当遇到这样的减速时,为了确保所有LDM线程都降低LCP的写速度,
NDB
现在全局跟踪I/O延迟模式,以便一旦至少有一个线程在I/O延迟模式下进行写操作,就报告I/O延迟状态,因此当延迟条件持续存在时,所有LDM线程都被迫在延迟模式下进行写操作。其他LDM实例写速度的降低应该会增加总体容量,从而在这种情况下能够比以前更快地克服磁盘过载的情况。添加了ndb_import.工具,以便于加载CSV格式化的数据,例如由此产生的
选择到输出文件
,变成一个NDB
表格ndb_import.它的功能很像mysqlimport或者是加载数据
SQL语句,并支持格式化数据文件的许多类似选项。连接到NDB
管理服务器(ndb_mgmd) 是必须的;必须有另外用的(api)
集群中的插槽config.ini
为此目的文件。此外,目标数据库和表(使用该表(使用)NDB
存储引擎)必须已存在,并且CSV文件(较少任何文件扩展名)的名称必须与目标表的名称相同。创建目标数据库和表需要运行的SQL节点,但不需要ndb_import.函数。有关更多信息,请参见ndb_import -导入CSV数据到NDB。
分区:输出
解释分区
显示不正确的值分区
在显式分区上运行时NDB
具有大量分区的表。这是由于这样一个事实,当处理
解释
声明中,mysqld.计算散列值的分区ID为(
),只有当表被分区时才正确hash_value
%number_of_partitions.
哈希
,由于其他分区类型使用将映射散列值的不同方法映射到分区ID。此修复程序替换所执行的分区ID计算mysqld.与内部NDB
函数,根据表的分区类型正确计算分区ID。(错误# 21068548)参考:参见Bug #25501895, Bug #14672885。
微软Windows:在Windows上收集关于cpu的信息时,自动安装程序只计算物理核,而在其他平台上,它同时收集物理核和虚拟核的信息。现在,在Windows上获得的CPU信息与在其他平台上提供的信息相同。(Bug #85209, Bug #25636423)
Solaris;ndbmemcache:
ndbmemcache
当使用Developer Studio编译NDB Cluster时,在Solaris平台上没有正确构建。(Bug #85477, Bug #25730703)Solaris;MySQL NDB ClusterJ:当使用Oracle Developer Studio编译NDB Cluster时,ClusterJ在Solaris平台上没有正确构建。(错误# 25738510)
NDB磁盘数据:在某些情况下,将NDB磁盘数据表的内存中的动态列设置为
零
没有正确处理。(bug#79253,bug#22195588)NDB复制:执行
创建表
在某些情况下可能导致复制从SQL线程挂起。(Bug #85015, Bug #25654833)这个问题是:Bug #83676, Bug #25042101的回归。
当
ndb_report_thresh_binlog_epoch_slip
已启用事件缓冲区状态消息report_reason =低/ ENOUGH_FREE_EVENTBUFFER
当事件缓冲区使用率高然后降低到较低级别时,将在日志中打印。此计算基于已分配的事件缓冲区内存总数,而不是所设置的限制ndb_eventbuffer_max_alloc
;即使事件缓冲区有无限内存(ndb_eventbuffer_max_alloc
= 0,默认值),这可能会让用户感到困惑。这是固定如下:
计算的计算
ndb_eventbuffer_free_percent.
现在是基于ndb_eventbuffer_max_alloc
,而不是实际分配的数量。当
ndb_eventbuffer_free_percent.
设置和ndb_eventbuffer_max_alloc
是否等于0,事件缓冲区状态消息使用report_reason =低/ ENOUGH_FREE_EVENTBUFFER
都不再印刷了。当
ndb_report_thresh_binlog_epoch_slip
已设置,一个事件缓冲区状态消息显示Report_Reason = Buffered_epochs_over_Threshold.
每10秒(而不是每秒)写入,无论何时大于阈值,都会写入。
(错误# 25726723)
批量更新是通过读取记录并在一组记录上执行事务来执行的,该事务在读取记录时启动。当事务初始化失败时,事务执行器函数随后没有意识到已经发生了这一点,从而导致SQL节点失败。通过在尝试初始化事务时提供适当的错误处理,可以修复此问题。(错误# 25476474)
参考:参见Bug #20092754。
数据节点主线程的CPU使用率
DBDIH.
在某些情况下,当数据库有大量的片段副本时,作为本地检查点末端的主块可能接近100%。通过减少LCP期间片段队列检查的频率和范围来解决这个问题。(错误# 25443080)执行网上文件
ALTER TABLE……重组分区
声明一个NDB
主键长度大于80字节的表会导致重新启动数据节点,导致重组失败。(错误# 25152165)在部分重启集群期间,多个数据节点失败可能导致API节点失败。这是由于一个线程扩展了一个内部对象ID映射,从而改变了它在内存中的位置,而另一个线程仍然在访问旧的位置,导致后一个线程的段错误。
内部
map ()
和的映射()
出现此问题的函数现在被设置为线程安全的。(错误# 25092498)参考资料:参见Bug #25306089。
超过10个数据节点的NDB集群的计划关闭并不总是正常执行。(错误# 20607730)
下降了
TRANS_AI
使用长信号格式的信号未被处理DBTC
内核块。(Bug #85606, Bug #25777337)参考:参见Bug #85519, Bug #27540805。
通过消除不需要的方式推动推动加入处理
FLUSH_AI
属性传递空行给DBSPJ
当一行应该只传递给SPJ API时,内核块;这减少了集合AttrInfo
必须执行的投影以产生结果。这也可以使用包装TRANSID_AI
在传递SPJ API结果时发出信号,这样效率更高。(Bug #85525, Bug #25741170)参考文献:另见:Bug#85545,Bug#25750355。
使用长信号格式(在NDB 6.4中引入)接收
TRANSID_AI
消息得到支持备份
那DBTC
那DBLQH
那SUMA
那DBSPJ
,DBUTIL
NDB内核块,但是DBTUP
块只在发送时产生长信号DPSPJ
或DBUTIL
,然后发送一系列短信号。现在DBTUP
只要接收块支持这种优化,就对此类消息使用长信号。(Bug #85519, Bug #25740805)为防止扫描返回多于客户端预留缓冲区的行、字节或两者都返回,则
DBTUP
内核块报告的大小TRANSID_AI
中已发送给客户端TUPKEYCONF
信号发送给请求DBLQH
堵塞。DBLQH
知道可用于结果集的最大批处理大小,并在超过此大小时终止扫描批处理。这
DBSPJ
块FLUSH_AI
属性允许DBTUP
生产两个TRANSID_AI
来自同一行的结果,一个用于客户机,一个用于DBSPJ
,这是在连接的表上查找键所必需的。这两个的大小都被添加到由DBTUP
阻塞,导致控制DBLQH
块相信它已经消耗了更多的最大批量大小,而不是实际情况,导致扫描批次过早终止,这可能对SPJ扫描的性能产生负面影响。为纠正此问题,在此情况下,才会报告API请求的实际读取长度部分。(bug#85408,bug#25702850)在SPARC平台上使用Oracle Developer Studio 12.5构建的Solaris 11的数据节点二进制文件由于总线错误而失败。(Bug #85390, Bug #25695818)
在扫描请求的初始阶段
DBTC
内核块发送一系列digetnodesreq.
信号到了DBDIH.
块,以获取要扫描的每个片段的字典信息。如果DBDIH.
回digetnodesref.
,该信号的错误代码没有读取,错误218从LongMessageBuffer结果总是被退回来。在这种情况下,来自digetnodesref.信号实际上是用的。(Bug #85225, Bug #25642405)如果用户试图调用ndb_setup.py当自动安装程序仍在运行时(例如,在关闭启动它的终端后,然后打开一个新的终端并在新的终端中调用它),程序会出现错误而失败Web服务器已运行,这是预期的行为。在这种情况下,
mcc.pid.
在重新启动自动安装程序(这也是预期的行为)之前,必须先删除文件。现在,当程序因为这个原因失败时,位置mcc.pid.
包含在错误消息中以简化此任务。(bug#85169,bug#25611093)在同一节点组中的一个或多个数据节点发生故障后,计划关闭数据节点的操作并不总是正确执行。(Bug #85168, Bug #25610703)
在来自不同SQL节点的同一个数据库对象上的模式操作之间存在竞争条件的可能性;当其中一个SQL节点延迟释放受影响的模式对象上的元数据锁时,就可能发生这种情况,因为这样一来,模式分布协调器就会认为锁释放是因为错误的模式更改。这可能导致在部分或所有SQL节点上错误地应用模式更改,或出现重复超时候诗
# # #
证券交易委员会分配……由于分发协议失败,节点日志中的消息。(Bug #85010, Bug #25557263)参考:参见Bug #24926009。
在NDB表中添加或删除外键时
改变表
语句,父表的元数据未更新,这使得可以在父级执行无效的更改操作。在您可以升级到此版本之前,您可以通过运行解决此问题
显示创建表
在父节点上添加或删除外键后立即执行;此语句将导致重新加载表的元数据。(Bug #82989, Bug #24666177)交易
NDB
当查询缓存也被启用时,具有级联外键的表返回的结果不一致,这是因为mysqld.没有意识到子表更新。这就意味着结果要等一会儿选择
从子表中获取从查询缓存中获取,此时包含陈旧数据。在这种情况下通过将父表的所有子项添加到要选中的内部列表中来修复
NDB
以便在父节点更新时进行更新,因此mysqld.现在正确地通知任何应该从查询缓存中无效的更新的子表。(Bug #81776, Bug #23553507)