在执行 NDB 备份时,该 表现在
ndbinfo.logbuffers
显示有关每个数据节点上备份进程的缓冲区使用情况的信息。这被实现为反映除了REDO
和之外的两种新日志类型的行DD-UNDO
。其中一行的日志类型为BACKUP-DATA
,它显示备份期间用于将片段复制到备份文件的数据缓冲区量。另一行的日志类型为BACKUP-LOG
,它显示备份期间用于记录备份开始后所做更改的日志缓冲区的数量。这些log_type
行中的每一行都显示在logbuffers
集群中每个数据节点的表。具有这两种日志类型的行仅在当前正在进行 NDB 备份时才会出现在表中。(缺陷号 25822988)添加了ndbd和ndbmtd
--logbuffer-size
的选项,用于调试大量日志消息。这控制了数据节点日志缓冲区的大小;默认值 (32K) 用于正常操作。(漏洞 #89679,漏洞 #27550943)-
以前的实验性共享内存 (SHM) 传输器现在在生产中得到支持。SHM 通过将信号写入内存而不是套接字来传输信号。NDB 已经尝试在共享同一主机的数据节点和 API 节点之间自动使用 SHM。要启用显式共享内存连接,请将
UseShm
配置参数设置1
为相关数据节点。当显式定义共享内存作为连接方式时,数据节点由 标识,HostName
API 节点由标识HostName
。可以使用其他调整参数(例如
ShmSize
、ShmSpintime
和 )SendBufferMemory
来提高 SHM 传输器的性能。SHM 的配置在其他方面类似于 TCP 传输器的配置。该SigNum
参数不再使用,并且为它所做的任何设置现在都将被忽略。NDB Cluster Shared Memory Connections提供了有关这些参数的更多信息。此外,作为这项工作的一部分,
NDB
与支持长期不受支持的遗留 SCI 传输器相关的代码已被删除。有关www.dolphinics.com
支持旧版 SCI 硬件的信息或有关较新的 Dolphin Express 硬件的信息,请参阅参考资料。 -
内核块现在在
SPJ
评估连接请求时会考虑在内,其中至少有一些表用于内部连接。这意味着SPJ
一旦知道先前的请求未返回父行的任何结果,就可以消除对行或范围的请求。这使数据节点和SPJ
块不必处理从不参与内部连接结果行的请求和结果行。笔记从 NDB 7.6.5 或更早版本升级时,您应该知道此优化取决于 API 客户端和数据节点功能,因此在所有这些都升级之前不可用。
用于从套接字读取、从套接字执行消息和唤醒其他线程的轮询接收器
NDB
现在将其他线程的唤醒卸载到一个新线程,该线程根据请求唤醒其他线程,否则只是休眠。这通过防止接收线程因包括唤醒其他线程在内的任务而负担过重,从而提高了单个集群连接的可伸缩性。
-
NDB Cluster APIs: 之前修复的一个问题,在部分重启期间多个数据节点的故障可能导致 API 节点失败,在继续之前没有正确检查关联
NdbReceiver
对象的有效性。现在在这种情况下,无效对象会触发对无效信号的处理,而不是节点故障。(漏洞 #25902137)参考资料:此问题是 Bug #25092498 的回归。
NDB Cluster API:
setBound()
在用于指定NULL
边界 时返回不正确的结果,通常是空结果集 这个问题似乎是由 gcc 中的问题引起的,仅限于使用此方法的旧版本(不使用NdbRecord
)的情况,并且通过在旧实现中重写有问题的内部逻辑来解决。(漏洞 #89468,漏洞 #27461752)-
NDB Cluster APIs: 发布的 NDB API 对象保存在一个或多个
Ndb_free_list
结构中以供以后重用。每个列表还跟踪从它那里夺取的所有对象,并确保这些对象最终被释放回给它。如果内部函数NdbScanOperation::init()
失败,则可能会泄漏NdbApiSignal
已分配的NdbOperation
现在在这种情况下,NdbScanOperation::release()
调用以释放由失败分配的任何对象,NdbScanOperation
然后再将其返回到空闲列表。此修复程序还处理了与 类似的问题
NdbOperation::init()
,其中失败的调用也可能会泄漏信号。(漏洞 #89249,漏洞 #27389894) 在某些情况下,当
DBTC
块中的事务中止时,仍然存在指向尚未引用计数的操作记录的触发记录的链接,但是当这样的操作记录被释放时,触发引用计数仍然递减。(缺陷号 27629680)-
联机备份由
NDB
模糊数据以及重做和撤消日志组成。要恢复到一致的状态,有必要确保日志包含跨越模糊数据部分捕获和一致快照点的所有更改。这是通过在数据捕获完成后等待通过 GCI 边界来实现的,但在停止更改日志记录和在备份元数据中记录停止 GCI 之前。在恢复时,日志会重播到停止 GCI,将系统恢复到一致停止 GCI 时的状态。当在负载下,可能会选择出现得太早且未跨越所有捕获数据的 GCI 边界时,就会出现问题。这可能会导致恢复备份时出现不一致;这些可能会被视为破坏约束或损坏的
BLOB
条目。现在选择停止 GCI,以便它跨越模糊数据捕获过程的整个持续时间,以便备份日志始终包含给定停止 GCI 内的所有数据。(漏洞#27497461)
参考资料:另请参阅:Bug #27566346。
-
对于
NDB
表,当外键作为 DDL 语句的一部分添加或删除时,所有引用的父表的外键元数据应重新加载到连接到集群的所有 SQL 节点上的处理程序中,但这仅在执行语句的mysqld 。因此,任何依赖于来自相应父表的外键元数据的后续查询都可能返回不一致的结果。(漏洞#27439587)参考资料:另请参阅:Bug #82989、Bug #24666177。
ANALYZE TABLE
在大型低基数表上使用过多的 CPU。(漏洞#27438963)-
使用非常大的列表的查询
IN
没有得到正确处理,这可能导致数据节点故障。(缺陷号 27397802)参考资料:另请参阅:Bug #28728603。
-
数据节点过载在某些情况下可能会导致数据节点意外关闭,从而导致所有数据节点与管理和节点断开连接。
这是由于
API_FAILREQ
在节点故障之前不是最后接收到的信号的情况。作为此修复的一部分,事务协调
SCAN_TABREQ
器对处于不正确状态的信号 的处理ApiConnectRecord
也得到了改进。(漏洞 #27381901)参考资料:另请参阅:Bug #47039、Bug #11755287。
在双节点集群中,当 ID 最低的节点开始使用
--nostart
时,API 客户端无法连接,失败并显示Could not alloc node id at HOST port PORT_NO: No free node id found for mysqld(API)。(漏洞 #27225212)-
MaxNoOfExecutionThreads
在没有初始系统重启的情况下进行 更改 会导致数据节点意外关闭。(缺陷号 27169282)参考资料:此问题是 Bug #26908347、Bug #26968613 的回归。
-
竞争条件有时会在传输器异步断开连接和重新连接期间发生,而其他线程同时将信号数据插入发送缓冲区,导致集群意外关闭。
作为解决此问题的工作的一部分,Transporter Registry 在准备发送时使用的内部模板函数被重构为使用可能或不太可能的逻辑来加快执行速度,并删除了一些对 NULL 的重复检查。(错误#24444908,错误#25128512)
参考资料:另请参阅:Bug #20112700。
ndb_restore有时记录的数据文件和日志文件进度值远大于 100%。(缺陷号 20989106)
内部函数
BitmaskImpl::setRange()
设置比指定的少一位。(缺陷 #90648,缺陷 #27931995)-
无法 使用set to 、 或 来创建
NDB
表 。(缺陷 #89811,缺陷 #27602352)PARTITION_BALANCE
FOR_RA_BY_LDM_X_2
FOR_RA_BY_LDM_X_3
FOR_RA_BY_LDM_X_4
参考:此问题是 Bug #81759、Bug #23544301 的回归。
为具有多个数据节点的集群向全局配置文件添加一个
[tcp]
或[shm]
部分导致默认 TCP 连接丢失到使用单个部分的节点。(漏洞 #89627,漏洞 #27532407)由于在执行辅助发送时重用了用于发送线程的代码,所有本地释放发送缓冲区都被释放到全局池中,这导致本地发送缓冲池的预期级别被忽略。现在发送线程和辅助工作线程遵循它们自己的策略来维护它们的本地缓冲池。(错误#89119,错误#27349118)
当发送优先级 A 信号时,我们现在确保显式初始化未决信号的数量。(错误#88986,错误#27294856)
在一个配置有一个 MySQL 服务器的 MySQL 集群中,当创建和使用
NDB
具有非存储生成列的表时发生二进制日志失败。只有当产品是在调试支持下构建时才会出现问题。(漏洞 #86084,漏洞 #25957586)ndb_restore 没有打印 值的尾随 0。(漏洞 #65560,漏洞 #14198580)
--print-data
--hex
LONGVARBINARY
当内部函数
ha_ndbcluster::copy_fk_for_offline_alter()
检查应该从中删除外键的表上的依赖对象时,它没有对外键执行任何过滤,这使得它有可能尝试检索索引或触发器,从而导致虚假错误 723(没有这样的表)。