-
作为改进本地检查点处理和最大限度减少 LCP 期间与错误 410(REDO 日志过载)相关问题发生的持续工作的一部分,
NDB
现在实施自适应 LCP 控制,根据重做日志使用情况调节 LCP 扫描优先级和 LCP 写入。对
NDB
配置参数进行了以下更改:默认值
RecoveryWork
从 50 增加到 60(为 LCP 文件保留 60% 的存储空间)。新 参数控制为插入操作保留
InsertRecoveryWork
的百分比 。RecoveryWork
默认值为 40(40% ofRecoveryWork
);最小值和最大值分别为 0 和 70。增加此值允许在 LCP 期间进行更多写入,同时限制 LCP 的总大小。减少InsertRecoveryWork
限制 LCP 期间使用的写入次数,但会导致使用更多空间。
NDB
实施 LCP 控制可为部署 带来多项好处 。使用默认配置的集群现在应该比以前更好地承受重负载,并且现在应该可以在可用磁盘空间大约是分配给集群的内存量的 2.1 倍的系统上可靠地运行它们(即,DataMemory
) 或者更多。重要的是要记住,刚刚引用的数字并未考虑磁盘上表使用的磁盘空间。在对重做日志大小减小的单个数据节点进行负载测试期间,可以成功地将大量数据加载到 NDB 中,并为重做日志保留 16GB,同时在任何时候使用不超过 50% 的重做日志时间。
有关更多信息,请参阅NDB Cluster 7.6 中的新增功能以及前面提到的参数的描述。(错误#90709、错误#27942974、错误#27942583)
参考资料:另请参阅:Bug #27926532、Bug #27169282。
ndbinfo 信息数据库: 重启后可能会使用(有时不完整的)回退数据来填充
ndbinfo.processes
表,这可能导致此表中的行具有空process_name
值。此类回退数据不再用于此目的。(漏洞#27985339)-
还原操作在
NDB
以下情况下失败:一个数据节点被重启
正在恢复的片段的本地检查点使用了两个
.ctl
文件这些
.ctl
文件中的第一个是正在使用的文件有问题的 LCP 由 2002 多个零件组成
发生这种情况是因为用于解压文件的数组
.ctl
仅包含 2002 个元素,导致内存被覆盖,因为该数据最多可包含 2048 个部分。此问题已通过增加数组大小以容纳 2048 个元素来解决。(漏洞 #28303209) -
本地检查点并不总是
DROP TABLE
正确处理操作。(漏洞 #27926532)参考资料:此问题是 Bug #26908347、Bug #26968613 的回归。
在 的执行过程中 ,只要发现请求的表已经存在
CREATE TABLE ... IF NOT EXISTS
,内部open_table()
函数ha_ndbcluster::get_default_num_partitions()
就会隐式调用。open_table()
在某些情况下,get_default_num_partitions()
在没有初始化关联thd_ndb
对象的情况下调用,导致语句失败并出现 MySQL 错误 157 Could not connect to storage engine。现在get_default_num_partitions()
始终检查此thd_ndb
对象是否存在,并在必要时对其进行初始化。