10bet网址
MySQL NDB集群7.3版本说明
下载这些版本说明
PDF (Ltr)- 0.9 mb
PDF (A4)- 0.9 mb


MySQL NDB集群7.3版本说明/版本系列更新日志:MySQL NDB Cluster 7.3/ MySQL NDB集群7.3.8 (5.6.22-ndb-7.3.8)(2015-01-21,通用可用性)

MySQL NDB集群7.3.8 (5.6.22-ndb-7.3.8)(2015-01-21,通用可用性)

增加或更改的功能

  • 性能:最近对多线程调度器所做的改进旨在优化其内部数据结构的缓存行为,这些结构的成员被放置在一个给定线程的本地成员不会溢出到另一个线程可以访问的缓存线中。在需要的情况下,插入额外的填充字节以隔离其他线程拥有(或共享)的缓存线,从而避免在另一个线程写入不完全属于自己的缓存线时,整个缓存线无效。这个优化使MT Scheduler的性能提高了几个百分点。

    后来发现,刚才描述的优化依赖于struct的全局实例thr_repository从缓存线对齐的基址开始,并且编译器不重新排列或向调度程序结构添加额外填充;还发现这些先决条件没有得到保证(甚至没有被检查)。因此,这种缓存线优化以前只在g_thr_repository(即全局实例)最终与缓存线对齐只是偶然的。此外,在64位平台上,编译器在struct中添加了额外的填充词thr_safe_pool将其填充到缓存线对齐大小的尝试失败。

    目前的修复方案确保了这一点g_thr_repository在缓存线上的对齐地址上构造,并且修改构造函数以验证设计假定的缓存线上的对齐地址。

    内部测试的结果显示,在经过这些更改之后,MT Scheduler的读性能在某些情况下提高了10%。(错误# 18352514)

  • NDB集群api:两个新的示例程序,演示读和写字符VARCHAR,VARBINARY列值,已添加到存储/ ndb / ndbapi-examples在MySQL NDB集群源树中。有关这些程序的更多信息,包括源代码清单,请参见NDB API简单数组示例,使用适配器的NDB API简单数组示例

错误修复

  • NDB磁盘数据:在一些罕见的情况下,对大型Disk Data表的许多行进行更新可能会导致节点故障。的值,就可以增加分配给磁盘页缓冲区内存的页条目的数量DiskPageBufferEntries数据节点配置参数在此版本中添加。(错误# 19958804)

  • NDB磁盘数据:在某些情况下,在DICT主系统接管后,新的主系统可能在试图前滚正在进行的模式事务时崩溃。(Bug #19875663, Bug #74510)

  • NDB磁盘数据:当一个节点作为DICT主节点发生故障,仲裁器将选择另一个节点来接管失败的节点。在接管过程中(包括清理主服务器失败时仍打开的模式事务),将决定未提交的模式事务的处置。通常情况下,该事务将回滚,但如果它已经完成提交请求的足够部分,则新的主服务器将完成提交处理。在交易的命运确定之前,没有新的消息TRANS_END_REQ可以处理来自客户机的消息。此外,由于不支持多个并发模式事务,所以必须在启动任何新事务之前完成接管清理。

    类似的限制也适用于在开放模式事务范围内执行的任何模式操作。用于协调跨所有节点的模式操作的计数器在接管处理期间和执行任何非本地模式操作时都被使用。这意味着在模式事务处于接管阶段时启动模式操作会导致该计数器被并发使用覆盖,从而导致不可预测的结果。

    前面描述的场景是在从节点故障恢复时使用伪随机延迟处理的。现在,我们在新主进程前滚或后滚前滚前滚任何前一个主进程失败后剩余的模式事务之前进行检查,并避免启动新的模式事务或使用旧事务执行操作,直到废弃事务之后的接管处理已经清理完毕。(Bug #19874809, Bug #74503)

  • NDB磁盘数据:当一个节点作为DICTMaster失败后,仍然可以通过将此请求发送给new来请求提交或中止任何打开的模式事务DICT的主人。在此事件中,新的主服务器接管模式事务,并报告提交或中止请求是否成功。在某些情况下,可能会错误地识别新的主节点—也就是说,请求被发送到错误的节点,该节点响应一个错误,客户端应用程序将此错误解释为模式事务已终止,即使在联系到正确的节点就可以成功提交事务的情况下也是如此。(Bug #74521, Bug #19880747)

  • NDB集群api:可以删除一个Ndb_cluster_connection的实例存在时Ndb使用对它的引用。现在,Ndb_cluster_connection析构函数等待所有相关的Ndb对象在完成前释放。(错误# 19999242)

    参考文献:参见Bug #19846392。

  • NDB集群api:类分配的缓冲区NdbScanOperation用于接收扫描的行,直到NdbTransaction关闭拥有扫描操作。这可能导致在同一个事务中创建多个扫描的应用程序中过度使用内存,即使这些扫描在生命周期结束时关闭,除非NdbScanOperation: close ()的方法调用releaseOp参数等于真正的.现在,当导航结果集的光标被关闭时,缓冲区就会被释放NdbScanOperation: close (),不管这个参数的值。(Bug #75128, Bug #20166585)

  • 全局检查点提交和保存协议可能因各种原因而延迟,包括磁盘I/O较慢。的DIH主节点监视这两个协议的进程,并可以强制执行协议停止的最大延迟时间,当延迟达到这个最大值时,通过杀死造成延迟的节点来实现。这DIH主GCP监视机制在每个主节点上没有多次执行它的任务;即,在检测到并处理GCP停止后,未能继续监视。(错误# 20128256)

    参考文献:参见Bug #19858151, Bug #20069617, Bug #20062754。

  • 运行时mysql_upgrade在一个MySQL NDB Cluster SQL节点上,预期的下降performance_schema而是在连接到集群的所有SQL节点上执行。(错误# 20032861)

  • 与触发的触发器池相关的一些问题已经修复,包括以下问题:

    • 当触发池耗尽时,NDB返回错误218 (从LongMessageBuffer).添加了一个新的错误代码221来处理这种情况。

    • 另一个错误报告的错误218的单独情况现在返回正确的错误。

    • 设置低值MaxNoOfFiredTriggers如果只有一个哈希桶,则在没有分配内存时导致错误。

    • 中止的事务现在释放它所持有的所有已触发的触发器记录。此前,这些记录一直保存到ApiConnectRecord已被另一个事务重用。

    • 此外,对于发射触发池在内部美元ndbinfo.ndb池表中,高值总是等于总数,这是因为所有记录在初始化时都被暂时捕获。现在,高值显示初始化完成后的最大值。

    (错误# 19976428)

  • 使用时在线重组ndbmtd数据节点和二进制日志通过mysqld的启用有时可能导致特利克斯而且DBLQH内核块,或在静默数据损坏。(错误# 19903481)

    参考文献:参见Bug #19912988。

  • 本地检查点扫描片段看门狗和全局检查点监视器在参与各自的协议时,都可以在节点太慢时排除该节点。这种排除是通过简单地要求故障节点关闭来实现的,如果发生延迟(无论出于什么原因),可能会延长其他未受影响节点的GCP或LCP停止的持续时间。

    为了尽量减少这个时间,两个协议都添加了一个隔离机制,任何其他活动节点在预定的时间后强制断开故障节点。这允许故障节点有机会在可能的情况下正常关闭(在记录调试和其他信息之后),但限制了其他节点必须等待这种情况发生的时间。现在,一旦剩下的活动节点处理了任何故障节点的断开连接,它们就可以开始故障处理并重新启动相关的协议,即使故障节点需要很长时间才能关闭。(错误# 19858151)

    参考文献:参见Bug #20128256, Bug #20069617, Bug #20062754。

  • 释放磁盘页时挂起导致看门狗失败TUP_COMMITREQ,因为使用了一个未初始化的块变量。(Bug #19815044, Bug #74380)

  • 多个线程崩溃会导致打印多组跟踪文件,并可能导致死锁。(错误# 19724313)

  • 当一个客户端重试一个新的主服务器时,这个模式事务在前一个主服务器重新启动时失败了,这个事务在新主服务器上获得的锁会阻止前一个主服务器通过启动阶段3,直到客户端被终止,它所持有的资源被清除。(Bug #19712569, Bug #74154)

  • 当使用NDB在存储引擎中,数据库或表名的最大可能长度是63个字符,但这个限制并不总是严格执行。这意味着使用64个字符的名称的语句创建数据库删除数据库,或ALTER TABLE重命名可能导致执行它的SQL节点失败。现在,这样的语句会失败,并出现适当的错误消息。(错误# 19550973)

  • 当一个新的数据节点启动时,允许API节点在数据节点准备好之前尝试将自己注册到数据节点以执行事务。这迫使API节点在再次尝试之前等待一个额外的心跳间隔。

    为了解决这个问题,有一些HA_ERR_NO_CONNECTION在此期间可能发出的错误(错误4009)已更改为集群暂时不可用错误4035),这应该允许API节点比以前更快地使用新的数据节点。作为修复的一部分,一些被错误分类的错误被移到正确的类别中,一些不再使用的错误被删除。(Bug #19524096, Bug #73758)

  • 在执行非常大的下推连接时,涉及多个列上定义的一个或多个索引,在某些情况下可以使用DBSPJ块(见DBSPJ块)NDB内核生成SCAN_FRAGREQ信号过大。当这些数据节点不能被正确处理时,由于内核中对此类信号大小的硬限制(32K),这会导致数据节点失败。这个修复通过拆分绕过了这个限制SCAN_FRAGREQ对于一个这样的信号来说,数据太大,并发送SCAN_FRAGREQ而是块信号或碎片信号。(错误# 19390895)

  • ndb_index_stat当对包含唯一索引的表使用时,有时会失败。(错误# 18715165)

  • 对包含CHAR(0)列的表的查询失败错误1296 (HY000):从NDBCLUSTER中获取错误4547 'RecordSpecification有重叠偏移量'.(错误# 14798022)

  • NDB核,是有可能的TransporterFacade对象在发送缓冲区所包含的数据时重置缓冲区,这可能导致竞态条件。(Bug #75041, Bug #20112981)

  • mysql_upgrade删除和重新创建ndbinfo数据库及其表。(Bug #74863, Bug #20031425)

  • 由于缺乏内存障碍,MySQL NDB集群等程序ndbmtd没有编译权力平台。(Bug #74782, Bug #20007248)

  • 在某些情况下,当对具有后删除触发,删除未匹配行的语句仍然会导致触发器执行。(Bug #74751, Bug #19992856)

  • 的基本要求NDB存储引擎的设计是传输注册不试图接收数据(TransporterRegistry: performReceive ())并更新连接状态(TransporterRegistry: update_connections ()),因为更新执行接收数据时使用的缓冲区的最终清理和重新初始化。在对这些缓冲区进行读写时更改它们的内容可能会导致“垃圾”或不一致的读写信号。

    在以前改进传输程序facade实现的工作过程中,互斥锁旨在防止并发使用performReceive ()而且update_connections ())方法在同一传输器上被意外删除。此修复增加了一个看门狗检查并发使用。此外,update_connections ()而且performReceive ()在轮询传输器时,调用现在一起序列化。(Bug #74011, Bug #19661543)

  • ndb_restore恢复表时失败,该表既包含主键上的内置转换,又包含主键上的登台转换文本列。

    在举行,表使用目标类型的主键列创建。但是,在将主键值加载到登台blob表之前,没有提供转换函数来转换主键值,这导致登台中的主键值损坏表格在将数据从staging表移动到目标表时,对象中找不到主键,因此读取失败表格

    现在所有对表进行检查,以查看其主表的主键是否有转换。该检查是在处理完所有的主表之后进行的,因此已经为主表设置了转换函数和参数。用于主表中主键的任何转换函数和参数现在都复制到表格(Bug #73966, Bug #19642978)

  • 发送到数据节点的损坏消息有时没有被检测到,导致传递到块的坏信号导致数据节点中止。这种失败加上节点断开可能会导致整个集群关闭。

    为了防止这种情况发生,现在在解包通过TCP接收的信号时进行额外的检查,包括检查字节顺序、压缩标志(必须不使用)和接收缓冲区中的下一个消息的长度(如果有的话)。

    只要两个连续的解包消息未能通过刚才描述的检查,就假定当前消息已损坏。在这种情况下,传输器被标记为有错误数据,并且在重新连接传输器之前不会再进行消息的解包。此外,一个条目被写入集群日志,其中包含错误和损坏消息的十六进制转储。(Bug #73843, Bug #19582925)

  • ndb_restore——打印数据的截断文本而且列值为240字节而不是256字节。(Bug #65467, Bug #14571512)

  • 在发送失败后,传输程序发送缓冲区没有正确更新。(Bug #45043, Bug #20113145)