-
重要变更;NDB Cluster APIs: 这个版本为 NDB API 引入了一个时代驱动的事件 API,它取代了早期的基于 GCI 的模型。此 API 的新版本还简化了错误检测和处理,并且改进了对事件缓冲区内存使用情况的监控。
此更改添加的 新 事件处理方法 包括
Ndb
、 、 、 、 、 、 和 。 从 同一版本开始,不推荐使用 , , , , , , , , , , 和 方法。NdbEventOperation
NdbEventOperation::getEventType2()
pollEvents2()
nextEvent2()
getHighestQueuedEpoch()
getNextEventOpInEpoch2()
getEpoch()
isEmptyEpoch()
isErrorEpoch
pollEvents()
nextEvent()
getLatestGCI()
getGCIEventOperations()
isConsistent()
isConsistentGCI()
getEventType()
getGCI()
getLatestGCI()
isOverrun()
hasError()
clearError()
一些(但不是全部)新方法可以替代已弃用的方法;并非所有已弃用的方法都映射到新方法。Event Class提供有关哪些旧方法对应于新方法的信息。
使用新 API 的错误处理不再使用专用
hasError()
和clearError()
方法处理,如前所述,这些方法现已弃用。为支持此更改,TableEvent
现在支持值TE_EMPTY
(空纪元)、TE_INCONSISTENT
(不一致纪元)和TE_OUT_OF_MEMORY
(事件缓冲区内存不足)。get_eventbuffer_free_percent()
通过引入、set_eventbuffer_free_percent()
和get_event_buffer_memory_usage()
方法以及新的 NDB API 错误自由百分比超出范围(错误代码 4123) , 事件缓冲区内存管理也得到了改进 。内存缓冲区使用情况现在可以在使用EventBufferMemoryUsage
数据结构的应用程序中表示,并通过读取ndb_eventbuffer_free_percent
系统变量从 MySQL 客户端应用程序中检查。有关详细信息,请参阅所列方法
Ndb
和 方法 的详细说明 。NdbEventOperation
另请参阅事件::TableEvent。 NDB Cluster API: MySQL NDB Cluster 源代码树中
CHAR
、VARCHAR
和VARBINARY
列值 的读写storage/ndb/ndbapi-examples
有关这些程序的更多信息,包括源代码清单,请参阅 NDB API 简单数组示例和 使用适配器的 NDB API 简单数组示例。现在对系统重启期间发生的内部状态执行额外的日志记录,例如等待节点 ID 分配和全局和本地检查点的主接管。(错误#74316,错误#19795029)
operations_per_fragment
将表格 添加 到ndbinfo
信息数据库中。使用此表,您现在可以获得对给定片段(或片段副本)执行的操作的计数。这些操作包括读取、写入、更新和删除,在执行它们时执行的扫描和索引操作,以及被拒绝的操作,以及与在给定片段副本上扫描和返回的行相关的信息。该表还提供有关用作属性值的解释程序以及它们返回的值的信息。添加了
MaxParallelCopyInstances
数据节点配置参数。如果在重新启动复制阶段使用的并行度(通常 LDM 的数量最多为 16)过多并导致系统过载,则可以使用此参数通过降低使用的并行度来覆盖默认行为。
NDB 磁盘数据: 在极少数情况下,对大型磁盘数据表的多行进行更新可能会导致节点故障。如果在磁盘数据表上观察到非常大的事务时出现此类问题,您现在可以通过提高
DiskPageBufferEntries
此版本中添加的数据节点配置参数的值来增加分配给磁盘页面缓冲区内存的页面条目数。(漏洞#19958804)NDB 磁盘数据: 在某些情况下,在
DICT
主节点接管期间,新主节点可能会在尝试前滚正在进行的模式事务时崩溃。(缺陷 #19875663,缺陷 #74510)-
NDB Cluster API: 可以删除一个
Ndb_cluster_connection
对象,同时仍然存在Ndb
使用对它的引用的实例。现在Ndb_cluster_connection
析构函数在完成之前等待所有相关Ndb
对象被释放。(漏洞#19999242)参考资料:另请参阅:Bug #19846392。
-
全局检查点提交和保存协议可能会因各种原因而延迟,包括磁盘 I/O 速度慢。主
DIH
节点监控这两种协议的进度,并且可以强制执行最大延迟时间,在此期间,当延迟达到最大值时,通过杀死负责延迟的节点来停止协议。这个DIH
主 GCP 监控机制在每个主节点上执行的任务不超过一次;也就是说,它在检测并处理 GCP 停止后未能继续监测。(缺陷号 20128256)参考资料:另请参阅:Bug #19858151、Bug #20069617、Bug #20062754。
在MySQL NDB Cluster SQL 节点上 运行mysql_upgrade
performance_schema
时,该节点上预期的数据库删除是在连接到集群的所有 SQL 节点上执行的。(缺陷号 20032861)当
ALTER TABLE ALGORITHM=INPLACE ... ADD COLUMN
语句自动将列的COLUMN_FORMAT
from更改FIXED
为DYNAMIC
now 时显示的警告包括格式已更改的列的名称。(缺陷 #20009152,缺陷 #74795)-
本地检查点扫描片段看门狗和全局检查点监视器在参与各自协议时都可以在节点太慢时排除该节点。这种排除是通过简单地要求故障节点关闭来实现的,如果延迟(无论出于何种原因)可能会延长其他未受影响节点的 GCP 或 LCP 停顿的持续时间。
为了最小化这个时间,两个协议都添加了隔离机制,任何其他活动节点在预定时间后强制断开故障节点。如果可能,这允许故障节点有机会正常关闭(在记录调试和其他信息之后),但限制其他节点必须等待这种情况发生的时间。现在,一旦剩余的活节点处理了任何故障节点的断开连接,它们就可以开始故障处理并重新启动相关协议或协议,即使故障节点需要很长时间才能关闭。(漏洞 #19858151)
参考资料:另请参阅:Bug #20128256、Bug #20069617、Bug #20062754。
应用配置参数设置时用于线程配置的值矩阵
MaxNoOfExecutionThreads
已得到改进,以支持更多数量的 LDM 线程。有关更改的更多信息,请参阅 多线程配置参数 (ndbmtd)。(缺陷 #75220,缺陷 #20215689)当一个新节点在连接到总统但没有连接到任何其他活节点后失败,然后重新连接并再次启动时,一个没有看到原始连接的活节点保留了旧的状态信息。这导致活节点向总统发送冗余信号,导致其发生故障。(错误#75218,错误#20215395)
在
NDB
内核中,TransporterFacade
对象可能会在发送缓冲区中包含的数据时重置缓冲区,这可能会导致竞争条件。(错误#75041,错误#20112981)mysql_upgrade未能
ndbinfo
按预期删除并重新创建数据库及其表。(错误#74863,错误#20031425)由于缺少内存屏障,MySQL NDB Cluster 程序(如ndbmtd)无法在
POWER
平台上编译。(错误#74782,错误#20007248)尽管存在许多防止信号缓冲区过载的保护机制,但在某些情况下仍然可以这样做。
NDB
此修复程序在内核中 添加了块级支持 (在 中SimulatedBlock
),使信号缓冲区过载保护比在个案基础上实施此类保护更可靠。(错误#74639,错误#19928269)在本地检查点期间复制元数据导致节点重启时间高度可变,这可能使诊断重启问题变得困难。此问题的修复引入了暂停 LCP 执行和刷新 LCP 报告的信号(包括
PAUSE_LCP_IDLE
、PAUSE_LCP_REQUESTED
和PAUSE_NOT_IN_LCP_COPY_META_DATA
),使得在重新启动期间 LCP 以这种方式停止时,有时可以阻止 LCP 报告。(错误#74594,错误#19898269)当数据节点从其天使进程重新启动时(即,在节点故障之后),可以在故障节点的故障处理实际完成之前为其分配一个新的节点 ID。(错误#74564,错误#19891507)
-
在
NDB
7.4 版中,节点故障处理可能需要完成多达 64 个片段的检查点。(此检查点由DBLQH
内核块执行。)在这种情况下,主节点接管等待所有此类检查点完成的要求导致完成时间过长。为了解决这些问题,
DBLQH
内核块现在可以在完成任何正在进行的片段检查点之前报告它已准备好进行主接管,并且可以在系统完成主接管时继续处理这些。(错误#74320,错误#19795217) 在节点重启期间,本地检查点有时比必要的时间更早启动,而节点仍在等待数据分布和数据字典的复制完成。(错误#74319,错误#19795152)
确定节点何时重新启动并因此知道何时加速本地检查点的检查有时会报告误报。(错误#74318,错误#19795108)
-
ndbinfo
表 中不同列中的值,disk_write_speed_aggregate
并disk_write_speed_aggregate_node
使用不同的字节倍数进行报告。现在所有这些列都以字节为单位显示值。此外,此修复更正了在计算表的 、 、 和 列中使用的标准差
std_dev_backup_lcp_speed_last_10sec
时std_dev_redo_speed_last_10sec
出现std_dev_backup_lcp_speed_last_60sec
的std_dev_redo_speed_last_60sec
错误ndbinfo.disk_write_speed_aggregate
。(错误#74317,错误#19795072) 内部方法中的递归
Dblqh::finishScanrec()
导致尝试创建两个具有相同头部的列表迭代器。NDB
在为优化存储引擎7.4 版的扫描所做的工作期间引入了此回归。(错误#73667,错误#19480197)发送失败后,传输器发送缓冲区未正确更新。(错误#45043,错误#20113145)