Documentation Home
MySQL NDB Cluster 7.6 发行说明  /  MySQL NDB Cluster 7.6.8 (5.7.24-ndb-7.6.8) 的变化(2018-10-23,正式发布)

MySQL NDB Cluster 7.6.8 (5.7.24-ndb-7.6.8) 的变化(2018-10-23,正式发布)

MySQL NDB Cluster 7.6.8 是 NDB 7.6 的新版本,它基于 MySQL Server 5.7,包括 NDB存储引擎 7.6 版中的功能,并修复了最近在之前的 NDB Cluster 版本中发现的错误。

获取 NDB Cluster 7.6。  NDB Cluster 7.6 源代码和二进制文件可以从 https://mysql.net.cn/downloads/cluster/获得。

有关 NDB Cluster 7.6 中所做更改的概述,请参阅 NDB Cluster 7.6 中的新增功能

此版本还合并了以前 NDB Cluster 版本中所做的所有错误修复和更改,以及通过 MySQL 5.7.24 在主线 MySQL 5.7 中添加的所有错误修复和功能更改(请参阅MySQL 5.7.24 中的更改(2018-10- 22,一般可用性))。

添加或更改的功能

  • 性能: 此版本在扫描性能方面引入了许多重大改进;这些列在这里:

    • 行校验和有助于检测硬件问题,但这样做会牺牲性能。现在提供了通过将新服务器系统变量设置为 0NDB来禁用这些功能的可能性 ;ndb_row_checksum这样做意味着行校验和不用于新的或更改的表。这会对所有类型的查询的性能产生重大影响(在某些情况下为 5% 到 10%)。此变量默认设置为 1,以提供与以前行为的兼容性。

    • 当队列不忙时,包含扫描的查询可以在 LDM 线程中执行更长时间。

    • 以前,在检查推送条件之前读取列;现在在读取任何列之前检查推送条件。

    • 当使用范围扫描作为连接执行的一部分时,推送连接的性能应该会得到显着改善。

修正错误

  • 打包: 预期的 NDB 头文件位于devel RPM 包中,而不是libndbclient-devel. (缺陷 #84580,缺陷 #26448330)

  • NDB 磁盘数据: 在恢复本地检查点时,可以插入数据库中已存在的行;这是通过先删除现有行然后插入该行的新副本来处理的预期行为。在某些情况下涉及磁盘上的数据,NDB无法删除现有行。(缺陷 #91627,缺陷 #28341843)

  • NDB 客户端程序:NdbImportUtil::RangeList删除了ASAN 构建中显示 的内存泄漏 (缺陷 #91479,缺陷 #28264144)

  • MySQL NDB ClusterJ: 当使用 ClusterJ 查询包含一个BLOB或一个TEXT字段的表以获得不存在的记录时,抛出异常(该方法在当前 blob 状态下无效)。(漏洞#28536926)

  • MySQL NDB ClusterJ:NullPointerException使用 ClusterJ 对包含 BLOB 或 TEXT 字段的表执行全表扫描时抛出 A。这是因为省略了适当的对象初始化,现在已通过此修复程序添加了它们。(缺陷 #28199372,缺陷 #91242)

  • 将已删除的行从活动节点复制到刚开始的节点时,这些行中的一个或多个可能具有等于零的全局检查点索引。如果由于撤消日志变满而在启动完整本地检查点的同时发生这种情况,LCP_SKIP则会为 GCI = 0 的行设置该位,从而导致数据节点意外关闭。(缺陷号 28372628)

  • 由于日志线程关闭, ndbmtd在退出时有时会挂起。(漏洞 #28027150)

  • SUMA内核块接收到 SUB_STOP_REQ信号时,它会执行信号然后回复SUB_STOP_CONF。(此响应被中继回 API 后,API 将打开以发送更多SUB_STOP_REQ信号。)发送 后 SUB_STOP_CONF,如果没有订阅者,SUMA 将删除订阅,这涉及向 发送多 DROP_TRIG_IMPL_REQ条消息 DBTUP。LocalProxy 最多可以并行处理其中的 21 个请求;多于此的都在短时间队列中排队。当 a 的执行 DROP_TRIG_IMPL_REQ被延迟时,队列有可能变得过载,导致数据节点关闭并出现Error in short time queue

    SUB_STOP_REQ如果 DBTUP已经 DROP_TRIG_IMPL_REQ满负荷处理信号,而不是排队信号, 则通过延迟信号的执行来解决此问题 DROP_TRIG_IMPL_REQ。(漏洞 #26574003)

  • 拥有大量延迟触发器有时会导致作业缓冲区耗尽。发生这种情况的原因可能是单个触发器可以执行多个操作——例如,外键父触发器可以对多个匹配的子表行执行操作——并且对基表的行操作可以执行多个触发器。在这种情况下,行操作是分批执行的。当延迟执行许多触发器时——意味着所有延迟的触发器都在预提交时执行——由此产生的大量触发器操作的并发执行可能会导致数据节点作业缓冲区或发送缓冲区耗尽,从而导致节点故障.

    此问题已通过限制并发触发器操作的数量以及每个事务未完成的触发器触发请求的数量得到解决。

    对于即时触发器,限制并发触发器操作可能会增加等待执行的触发器数量,耗尽触发器记录池并导致错误Too many concurrently fired triggers (increase MaxNoOfFiredTriggers . This can be avoided by increasing MaxNoOfFiredTriggers, reducing the user transaction批量大小,或两者兼而有之。(缺陷 #22529864)

    参考资料:另请参阅:Bug #18229003、Bug #27310330。

  • ndbout在ndb_mgmd服务重启期间ndberr,从 退出并在下一次调用导致分段错误之前重定向到它们后变得mgmd_run()无效 mgmd_run()。此修复可 确保始终有效。(错误#17732772,错误#28536919)ndboutndberr

  • 使用错误 921 Out of transaction memory ... (increase SharedGlobalMemory)报告撤消日志缓冲区内存不足。

    此问题已通过引入新的错误代码 923 Out of undo buffer memory (increase UNDO_BUFFER_SIZE) 得到修复。(缺陷 #92125,缺陷 #28537319)

  • 将 anOperationRec从串行队列移动到并行队列时,Dbacc::startNext() 无法更新 反映并行队列中所有先前操作Operationrec::OP_ACC_LOCK_MODE的累积所需的标志 。OP_LOCK_MODEACC 锁队列中的这种不一致导致扫描锁接管机制失败,因为它错误地断定没有持有要接管的锁。在中止作为此类不一致并行锁队列成员的操作时,同样的故障导致断言。(缺陷 #92100,缺陷 #28530928)

  • SCAN_FRAGREQ由于恢复阶段信号 到达,数据节点在启动期间失败 。该信号源自在节点先前发生故障之前开始的扫描,并且由于故障节点的参与而应该中止。(缺陷 #92059,缺陷 #28518448)

  • DBTUP当读取操作试图读取同一事务中插入的元组的值时,发送了检测到的错误元组损坏。(缺陷 #92009,缺陷 #28500861)

    参考资料:另请参阅:Bug #28893633。

  • 对自引用外键执行更新时,可能会发生错误约束违规错误。(漏洞 #91965,漏洞 #28486390)

    参考资料:另请参阅:Bug #90644、Bug #27930382。

  • 通过尝试NDB查找已释放的触发器的定义,可以删除内部触发器定义,同时触发器的挂起实例仍未执行。这导致了不可预测的不安全行为,可能导致数据节点故障。问题的根本原因在于代码中与确定给定触发器是否已被释放相​​关的无效假设;NDB当触发器定义被确定为已发布时,通过确保 的行为 是一致的并且符合预期来解决此问题。(缺陷 #91894,缺陷 #28451957)

  • 在某些情况下,包含大量并发插入的工作负载会在使用调试构建时导致数据节点故障。(错误#91764、错误#28387450、错误#29055038)

  • 在存在并 TwoPassInitialNodeRestartCopy 启用磁盘数据表的初始节点重启期间,DBTUP按磁盘顺序使用不安全扫描。在这种情况下不再使用此类扫描。(缺陷 #91724,缺陷 #28378227)

  • 检查旧的 LCP 文件测试了表版本,但这并不总是可靠的。现在,检查不再依赖于表版本,而是将任何 maxGCI小于其 createGci. (缺陷 #91637,缺陷 #28346565)

  • 在某些情况下,级联更新触发器在同一记录上重复触发,最终消耗所有可用的并发操作,导致事务协调器中的错误 233 Out of operation records(增加 MaxNoOfConcurrentOperations)。如果 MaxNoOfConcurrentOperations 将值设置得足够高以避免这种情况,则问题表现为数据节点消耗大量 CPU,很可能最终导致超时。(缺陷 #91472,缺陷 #28262259)

  • 将一行插入到NDB具有自引用外键的表中,该外键引用了表上的唯一索引而不是主键,失败并返回 ER_NO_REFERENCED_ROW_2。这是因为在NDB更新唯一索引之前检查了外键约束,导致约束检查无法使用索引来定位行。现在,在这种情况下,NDB等到所有唯一索引值都已更新,然后再检查插入行的外键约束。(缺陷 #90644,缺陷 #27930382)

    参考资料:另请参阅:Bug #91965、Bug #28486390。

  • 以斜杠 () 字符开头的连接字符串/现在被 ndb_mgmd拒绝。

    感谢 Daniël van Eeden 贡献此修复程序。(缺陷 #90582,缺陷 #27912892)