10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

23.1.4新db集群更新说明

下面的章节描述了MySQL NDB Cluster 8.0到8.0.26中NDB Cluster实现与早期版本系列相比的变化。从NDB 8.0.19开始,NDB Cluster 8.0作为通用可用性(General Availability)版本提供。NDB Cluster 7.6和7.5是以前的GA版本,在生产环境中仍然支持;有关NDB Cluster 7.6的详细信息,请参见NDB集群7.6有什么新功能.有关NDB Cluster 7.5的类似信息,请参见新db集群7.5有什么新内容.NDB Cluster 7.4和7.3是以前的GA版本,在生产中仍然支持,尽管我们建议新的生产部署使用NDB Cluster 8.0;看到MySQL NDB集群7.3和NDB集群7.4

NDB集群8.0有什么新特性

NDB Cluster 8.0的主要变化和新特性可能令人感兴趣的如下列表:

  • 兼容性增强。以下更改减少了长期存在的非本质差异NDB行为与其他MySQL存储引擎相比:

    • 与MySQL服务器并行开发。从这个版本开始,MySQL NDB集群在一个新的统一发布模型下与标准的MySQL 8.0服务器并行开发,该模型具有以下特性:

      • NDB 8.0是在MySQL 8.0源代码树中开发、构建并发布的。

      • NDB Cluster 8.0版本的编号方案遵循MySQL 8.0的编号方案,从8.0.13版本开始。

      • NDB支持附加集群返回的版本字符串mysql- v,如下所示:

        shell: mysql Ver 8.0.26-cluster for Linux on x86_64

        NDB二进制文件继续显示MySQL服务器版本和NDB引擎版本,像这样:

        shell> ndb_mgm -V MySQL distribub MySQL -8.0.26 db-8.0.26, for Linux (x86_64)

        在MySQL Cluster NDB 8.0中,这两个版本号总是相同的。

      要构建具有NDB集群支持的MySQL 8.0.13(或更高版本)源代码,请使用CMake选项-DWITH_NDBCLUSTER

    • 平台支持笔记。NDB 8.0在平台支持方面做了如下修改:

      • NDBCLUSTER不再支持32位平台。从NDB 8.0.21开始,NDB构建过程会检查系统架构,如果不是64位平台,就会中止。

      • 从NDB 8.0.18开始,是可以构建的NDB从64位的源代码手臂cpu。目前,这种支持只支持源代码,我们不为这个平台提供任何预编译的二进制文件。

    • 数据库和表名。从NDB 8.0.18开始,数据库和表的标识符的63字节限制被取消了。与使用其他MySQL存储引擎的对象一样,这些标识符现在最多可以使用64个字节。看到

      生成外键的名称。NDB(8.0.18版本及更高版本)现在使用该模式tbl_name_fk_N用于命名内部生成的外键。使用的模式类似InnoDB

  • 模式和元数据分发和同步。NDB 8.0利用MySQL数据字典将模式信息分发到加入集群的SQL节点,并在现有SQL节点之间同步新的模式更改。以下列表描述了与此集成工作相关的各个增强:

    • 增强模式分布。NDB模式分发协调器,用于处理模式操作并跟踪它们的进展,在NDB 8.0.17中得到了扩展,以确保在模式操作结束时释放所使用的资源。以前,其中一些工作是由模式分发客户机完成的;之所以这样做,是因为客户机并不总是拥有所需的所有状态信息,当客户机在完成之前决定放弃模式操作而没有通知协调器时,可能会导致资源泄漏。

      为了帮助解决这个问题,模式操作超时检测已经从模式分发客户端移到了协调器上,为协调器提供了清理模式操作期间使用的任何资源的机会。协调器现在定期检查正在进行的模式操作是否超时,并在检测到超时时将尚未完成给定模式操作的参与者标记为失败。它还在模式操作超时发生时提供适当的警告。(应该注意的是,在检测到超时之后,模式操作本身将继续进行。)当一个或多个操作正在进行时,通过定期打印活动模式操作列表来完成附加报告。

      作为这项工作的附加部分,一个新的mysqld选项——ndb-schema-dist-timeout允许设置等待模式操作被标记为超时的时间长度。

    • 磁盘数据文件分发。从NDB集群8.0.14开始,NDB使用MySQL数据字典来确保磁盘数据文件和相关结构(如表空间和日志文件组)在所有连接的SQL节点之间正确分布。

    • 表空间对象的模式同步。当MySQL服务器作为一个SQL节点连接到一个NDB集群时,它根据在数据库中找到的信息检查它的数据字典NDB字典。

      以前,唯一NDB在连接一个新的SQL节点时同步的对象是数据库和表;MySQL NDB Cluster 8.0.14及以上版本还实现了磁盘数据对象(包括表空间和日志文件组)的模式同步。在其他好处中,这消除了MySQL数据字典与数据库不匹配的可能性NDB字典,其中表空间和日志文件组将恢复到NDB字典,而不是MySQL服务器的数据字典。

      也不可能再发行创建表引用不存在的表空间的语句。这样的语句现在会失败并出现错误。

    • 数据库DDL同步增强。在NDB 8.0.17中所做的工作确保了新连接(或重新连接)的SQL节点与现有SQL节点的数据库同步,现在适当地使用了数据字典,以便任何数据库级操作(创建数据库修改数据库,或删除数据库),当SQL节点连接(或重新连接)到集群时,这些可能被该SQL节点遗漏的信息现在会正确地复制到该节点上。

      作为启动时执行的模式同步过程的一部分,SQL节点现在将集群数据节点上的所有数据库与它自己的数据字典中的数据库进行比较,如果发现SQL节点的数据字典中缺少任何数据库,SQL节点将通过执行创建数据库声明。这样创建的数据库使用默认的MySQL Server数据库属性(如由character_set_database而且collation_database),这些语句在执行语句时在该SQL节点上生效。

    • NDB元数据变更检测与同步。NDB 8.0.16实现了一种新的机制,用于检测数据对象(如表、表空间和使用MySQL数据字典的日志文件组)的元数据更新。这是通过线程完成的NDB元数据更改监视器线程,该线程在后台运行,并定期检查NDB字典和MySQL数据字典。

      监视器默认每60秒检查一次元数据。的值可以调整轮询间隔ndb_metadata_check_interval系统变量;参数可以完全禁用轮询ndb_metadata_check系统变量.一个状态变量(也在NDB 8.0.16中添加)Ndb_metadata_detected_count显示了从那以后的次数mysqld最后一次启动时检测到不一致。

      从8.0.18版本开始,NDB确保NDB元数据更改监视器线程在启动后的操作期间提交的表、日志文件组和表空间对象将自动检查是否不匹配并由NDBbinlog线程。

      NDB 8.0.18还添加了两个与自动同步相关的状态变量:Ndb_metadata_synced_count显示自动同步的对象数量;Ndb_metadata_excluded_count表示同步失败的对象的数量(在NDB 8.0.22之前,该变量被命名为Ndb_metadata_blacklist_size).此外,您可以通过检查集群日志来查看哪些对象已被同步。

      NDB 8.0.19通过向检测和同步更改的对象添加数据库,进一步增强了该功能。只有数据库实际使用NDB表是这样处理的;其他可能出现在MySQL数据字典中的数据库将被忽略。中存在表的情况下,这就消除了以前的需求NDB但是它所属的表和数据库在SQL节点上不存在,要手动创建这个数据库;在这种情况下,数据库和所有NDB应该在SQL节点上自动创建属于它的表。

      NDB 8.0.19还介绍了ndb_metadata_sync系统变量;将此变量设置为真正的覆盖已做的任何设置ndb_metadata_check_interval而且ndb_metadata_check,导致更改监视器线程开始连续的元数据更改检测。

      在NDB 8.0.22及以上版本中设置ndb_metadata_sync真正的清除以前同步失败的对象列表,这意味着不再需要发现单个表或通过将SQL节点重新连接到集群来重新触发同步。此外,将此变量设置为清除等待重试的对象列表。

      从NDB 8.0.21开始,添加到MySQL性能模式的两个新表提供了比从日志消息或状态变量中更详细的关于自动同步当前状态的信息。表列如下:

      • ndb_sync_pending_objects:包含已检测到不匹配的数据库对象的信息NDB字典和MySQL数据字典(以及没有被排除在自动同步之外)。

      • ndb_sync_excluded_objects:包含关于NDB数据库对象已被排除,因为它们无法在NDB字典和MySQL数据字典,因此需要手动干预。

      其中一个表中的行提供数据库对象的父模式、名称和类型。对象的类型包括模式、表空间、日志文件组和表。(如果对象是日志文件组或表空间,则父模式为)。此外,ndb_sync_excluded_objects表显示了对象被排除的原因。

      这些表只有在NDBCLUSTER已启用存储引擎支持。有关这些表的更多信息,请参见

      修改NDB表额外的元数据。在NDB 8.0.14及更高版本中,类的额外元数据属性NDBtable用于存储来自MySQL数据字典的序列化元数据,而不是像以前版本中那样存储表的二进制表示。(这是一个.frm文件,MySQL服务器不再使用NDB在NDB Cluster 8.0.14及以后版本中创建的表与以前的NDB Cluster版本不兼容。在以前版本中创建的表可以在NDB 8.0.14及更高版本中使用,但不能在较早版本之后打开。

      可以使用NDB API方法访问此元数据getExtraMetadata ()而且setExtraMetadata ()这是在NDB 8.0.13中实现的。

      有关更多信息,请参见

      使用.frm文件实时升级表。在NDB 7.6和更早版本中创建的表以压缩文件的形式包含元数据.frm该文件在MySQL 8.0中不再支持。为方便在线升级到NDB 8.0,NDB执行这个元数据的动态翻译,并将其写入MySQL Server的数据字典中,从而实现mysqld在NDB Cluster 8.0中使用该表,而不阻止先前版本的后续使用该表NDB软件

      重要的

      一旦在NDB 8.0中修改了表的结构,它的元数据将使用数据字典存储,在NDB 7.6及更早的版本中无法再访问它。

      这种增强还可以恢复NDB使用较早版本备份到运行NDB 8.0(或更高版本)的集群。

    • 元数据一致性检查错误日志记录。作为先前在NDB 8.0中完成的工作的一部分,元数据检查作为对象的表示之间自动同步的一部分执行NDBNDB字典中的表和MySQL数据字典中的对应表包括表的名称、存储引擎和内部ID。从NDB 8.0.23开始,检查的属性范围扩展到包括以下数据对象的属性:

      • 索引

      • 外键

      此外,元数据属性中任何不匹配的细节现在都被写入MySQL服务器错误日志。错误日志消息使用的格式略有不同,这取决于差异是在表级别上发现的,还是在列、索引或外键级别上发现的。表级属性不匹配导致的日志错误的格式如下所示财产是属性名,ndb_value是存储在NDB字典中的属性值,和mysqld_value是存储在MySQL数据字典中的属性值:

      差异的财产“发现”,ndb_value“! =”mysqld_value

      对于列、索引和外键属性不匹配的情况,格式如下obj_type是其中之一指数,或外键,obj_name是对象的名称:

      差异在obj_typeobj_name财产“发现”,ndb_value“! =”mysqld_value

      元数据检查在自动同步的过程中进行NDB的数据字典中安装mysqld作为NDB集群中的SQL节点。如果mysqld在编译调试时,每当a创建表语句将被执行NDB表被打开。

  • 与NDB_STORED_USER同步用户权限。从NDB 8.0.18开始,提供了一种用于在SQL节点之间共享和同步用户、角色和特权的新机制NDB_STORED_USER特权。在NDB 7.6及更早版本中实现的分布式特权(参见使用共享授权表的分布式特权)不再受支持。

    在SQL节点上创建用户帐户后,可以将用户及其特权存储在NDB从而在集群中的所有SQL节点之间共享格兰特这样的陈述:

    授予ndb_stored_user权限*。*“乔”@“localhost”;

    NDB_STORED_USER总是具有全局范围,必须允许使用* *。.系统预留账号如mysql.session@localhostmysql.infoschema@localhost无法分配此特权。

    还可以在SQL节点之间通过发出适当的格兰特NDB_STORED_USER声明。将这样的角色分配给用户不会导致该用户被共享;的NDB_STORED_USER权限必须显式地授予每个用户。

    拥有。的用户或角色NDB_STORED_USER一旦所有的SQL节点加入一个给定的NDB集群,它就会被共享。对用户或角色的特权的更改将立即与所有连接的SQL节点同步。可以从任何连接的SQL节点上进行这样的更改,但建议只从指定的SQL节点上进行更改,因为不能保证在所有SQL节点上影响不同SQL节点特权的语句的执行顺序相同。

    对升级的影响。由于MySQL服务器的特权系统(参见NDBNDB 8.0版本存储引擎无法正常工作。保留NDB 7.6或更早版本中创建的特权表是安全的,但不是必须的,但它们不再用于访问控制。从NDB 8.0.16开始,amysqld充当SQL节点,并在中检测此类表NDB向MySQL服务器日志中写入一个警告,并创建InnoDB影子表自身局部;这样的影子表是在连接到集群的每个MySQL服务器上创建的。从NDB 7.6或更早版本升级时,使用NDB可以拆下安全使用吗ndb_drop_table一旦所有作为SQL节点的MySQL服务器都已经升级(参见ndb_restore公用事业公司——restore-privilege-tables选项已弃用,但在NDB 8.0中继续使用,仍然可以用于将NDB集群上一个版本的备份中的分布式特权表恢复到运行NDB 8.0的集群中。这些表的处理方法如上段所述。

    共享用户和授予存储在ndb_sql_metadata在NDB 8.0.19及更高版本中ndb_restore默认不恢复;您可以指定——include-stored-grants选项导致它这样做。

  • INFORMATION_SCHEMA变化。控件中有关“磁盘数据”文件的信息的显示中进行了以下更改INFORMATION_SCHEMA。文件表:

    • 类中不再表示表空间和日志文件组文件表格(这些结构实际上并不是文件。)

    • 控件中的单行表示每个数据文件文件表格每个撤消日志文件现在在该表中也仅用一行表示。(以前,在每个数据节点上为这些文件的每个副本显示一行。)

    此外,INFORMATION_SCHEMA表现在填充MySQL集群表的表空间统计信息。(错误# 27167728)

  • ndb_perror的错误信息。弃用的——ndb选择perror被移除。相反,使用ndb_perror获取错误消息信息NDB错误代码。(Bug #81704, Bug #81705, Bug #23523926, Bug #23523957)

  • 条件叠加增强。以前,条件下推仅限于谓词项,这些谓词项引用的是条件被下推到的同一个表中的列值。在NDB 8.0.16中,取消了这个限制,这样查询计划中较早的表中的列值也可以从推入条件中引用。从NDB 8.0.18开始,支持连接比较列表达式,以及同一表中的列之间的比较。要比较的列和列表达式必须具有完全相同的类型;这意味着它们还必须具有相同的符号、长度、字符集、精度和规模,无论这些属性如何应用。

    下推一个条件的更大部分允许更多的行被数据节点过滤掉,从而减少行数mysqld必须在连接处理期间处理。这些增强的另一个好处是,过滤可以在LDM线程中并行执行,而不是在SQL节点上的单个mysqld进程中执行;这有可能显著提高查询性能。

    用于比较列值之间类型兼容性的现有规则继续适用(参见

  • 增加最大行大小。NDB 8.0.18增加了可存储在NDBCLUSTER表从14000到30000字节。

    一个文本列继续使用总数中的264字节,与前面一样。

    类中固定宽度列的最大偏移量NDB表为8188字节;这与8.0.18之前的版本相同。

    看到

    ndb_mgm SHOW命令和单用户模式。从NDB 8.0.17开始,当集群处于单用户模式时,输出管理客户端显示命令指示在此模式生效时,哪个API或SQL节点拥有独占访问权。

  • 网上列重命名。从NDB 8.0.18开始,列NDB可以在线重命名表,使用算法=原地.看到

    改进ndb_mgmd启动时间。在NDB 8.0.18及以后版本中,管理节点守护进程的启动时间有了显著的改进,具体如下:

  • NDB API增强。从NDB 8.0.18开始,NdbScanFilter: cmp ()以及几种比较方法NdbInterpretedCode可用于相互比较表列值。受影响的NdbInterpretedCode方法如下:

    对于刚才列出的所有方法,要比较的表列值必须具有完全匹配的类型,包括长度、精度、显著性、比例、字符集和排序(视情况而定)。

    有关更多信息,请参阅各个API方法的描述。

  • 离线多线程索引构建。现在可以指定一组内核,用于执行有序索引的离线多线程构建的I/O线程,而不是像文件I/O、压缩或解压缩这样的普通I/O任务。离线在此上下文中,指的是在父表未被写入时执行的有序索引的构建;这样的建筑发生在NDB群集执行节点或系统重新启动,或作为从备份中恢复群集的一部分ndb_restore——rebuild-indexes

    此外,离线索引构建工作的默认行为被修改为使用可用的所有核心ndbmtd,而不是将其自身限制到为I/O线程保留的核心。这样做可以提高重启和恢复时间、性能、可用性和用户体验。

    此增强的实现如下:

    1. 的默认值。BuildIndexThreads从0更改为128。这意味着离线有序索引构建现在默认是多线程的。

    2. 的默认值。TwoPassInitialNodeRestartCopy改变从真正的.这意味着初始节点重启首先从生活节点到正在启动的节点(不创建任何索引)离线构建有序索引,然后再次将其数据与活动节点同步,即同步两次并在两次同步之间离线构建索引。这使得初始节点重新启动的行为更像节点的正常重新启动,并减少了构建索引所需的时间。

    3. 新的线程类型(idxbld的定义ThreadConfig配置参数,允许锁定离线索引构建线程到特定的cpu。

    此外,NDB现在区分可访问的线程类型ThreadConfig根据以下两个标准:

    1. 线程是否是执行线程。线程的类型主要ldmrecv代表tc,发送执行线程;线程类型io监管机构,idxbld不是。

    2. 分配给给定任务的线程是永久的还是临时的。目前所有线程类型除idxbld是永久性的。

    如需了解更多信息,请参见手册中指示参数的说明。(Bug #25835748, Bug #26928111)

  • Logbuffers表备份进程信息。在执行NDB备份时ndbinfo.logbuffers表现在显示关于每个数据节点上备份进程的缓冲区使用情况的信息。这实现为另外反映两种新的日志类型的行重做而且DD-UNDO.其中一行具有日志类型备份数据,显示备份时将片段复制到备份文件所使用的数据缓冲区的数量。另一行是日志类型日志备份,它显示备份期间用于记录备份启动后所做更改的日志缓冲区的数量。每一个log_type中显示的行logbuffers表中用于集群中的每个数据节点。只有当NDB备份正在进行时,具有这两种日志类型的行才会出现在表中。(错误# 25822988)

  • ndbinfo。Windows上的进程表。Windows平台上使用的监视进程的进程ID重新启动生成并重新启动mysqld现在显示在流程表作为一个angel_pid

  • 字符串哈希的改进。在NDB 8.0之前,所有字符串哈希都是基于首先将字符串转换为规范化形式,然后对生成的二进制图像进行md5哈希。这可能会导致一些性能问题,原因如下:

    • 规范化字符串总是填充到它的全部长度。对于一个VARCHAR这通常需要添加比原来字符串中字符更多的空格。

    • 字符串库没有针对这种空间填充进行优化,这在某些用例中增加了相当大的开销。

    • 填充语义在字符集之间有所不同,其中一些字符集没有填充到它们的全部长度。

    • 转换后的字符串可以变得相当大,即使没有空格填充;一些Unicode 9.0排序规则可以将单个代码点转换为100字节或更多的字符数据。

    • 后续的MD5散列主要由空格填充组成,并不是特别有效,可能会刷新很大一部分L1缓存,从而导致额外的性能损失。

    排序规则提供自己的散列函数,该函数直接对字符串进行散列,而不需要首先创建规范化的字符串。此外,对于Unicode 9.0排序规则,计算散列时不带填充。NDB现在在使用Unicode 9.0排序规则对标识为的字符串进行散列时利用这个内置函数。

    因为对于其他排序,已有的数据库在转换后的字符串上进行了散列分区,NDB继续使用前面的方法对使用这些字符串进行散列,以保持兼容性。(Bug #89590, Bug #89604, Bug #89609, Bug #27515000, Bug #27523758, Bug #27522732)

  • 重置主人变化。因为MySQL服务器现在执行重置的主人当使用全局读锁时,该语句在NDB Cluster中使用时的行为发生了以下两个方面的变化:

    • 它不再保证是同步的;也就是说,现在有可能是一个读音在重置的主人可能在二进制日志旋转之后才会记录。

    • 现在,无论语句是在写入二进制日志的同一个SQL节点上发出的,还是在同一集群中的另一个SQL节点上发出的,它的行为都完全相同。

    请注意

    显示BINLOG的事件刷新日志,大多数数据定义语句继续,就像前面所做的那样NDB版本,以同步方式操作。

  • ndb_restore选择使用。从NDB 8.0.16开始——nodeid而且——backupid调用时两个选项都是必需的ndb_restore

  • ndb_log_bin违约。的默认值从NDB 8.0.16开始ndb_log_bin系统变量已从真正的

  • 动态事务资源分配。事务协调器中的资源分配(参见DBTC块)现在使用动态内存池执行。这意味着资源分配由数据节点的配置参数等决定MaxDMLOperationsPerTransactionMaxNoOfConcurrentIndexOperationsMaxNoOfConcurrentOperationsMaxNoOfConcurrentScansMaxNoOfConcurrentTransactionsMaxNoOfFiredTriggersMaxNoOfLocalScans,TransactionBufferMemory现在是这样做的,如果每个参数表示的负载在所有这些资源的目标负载内,则可以限制这些资源中的其他资源,以免超过可用的总资源。

    作为这项工作的一部分,控制事务资源的几个新的数据节点参数DBTC,已添加:

    有关更多信息,请参见刚刚列出的参数描述。

  • 每个数据节点使用多个ldm进行备份。NDB现在可以使用多个本地数据管理器(ldm)在单个数据节点上以并行方式执行备份。(以前,备份是跨数据节点并行执行的,但在数据节点进程中总是串行执行的。)类不需要特殊的语法开始备份命令的ndb_mgm客户端来启用该特性,但所有数据节点必须使用多个ldm。这意味着数据节点必须正在运行ndbmtdndbd是单线程的,因此总是只有一个LDM),在进行备份之前,它们必须配置为使用多个LDM;您可以通过为一个多线程数据节点配置参数选择适当的设置来实现这一点MaxNoOfExecutionThreadsThreadConfig

    使用多个LDM的备份创建子目录,每个LDM一个备份/备份-backup_id/目录中。ndb_restore现在自动检测这些子目录,如果它们存在,则尝试并行恢复备份;看到NDB)。方法还可以恢复并行执行的备份ndb_restore通过修改通常的恢复过程,从以前版本的NDB Cluster获得二进制文件;

    二进制配置文件增强。从NDB 8.0.18开始,管理服务器的二进制配置文件使用了一种新的格式。以前,集群配置文件中最多可以出现16381个节;现在的最大区段数是4G。这是为了在集群中支持比更改之前更多的节点。

    升级到新格式是相对无缝的,几乎不需要人工干预,因为管理服务器可以继续毫无问题地读取旧格式。从NDB 8.0.18(或更高版本)降级到旧版本的NDB集群软件需要手动删除任何二进制配置文件,或者,使用——初始选择。

    有关更多信息,请参见

    增加数据节点数量。NDB 8.0.18将每个集群支持的最大数据节点数量增加到144(以前是48)。数据节点现在可以使用范围为1到144的节点id。

    之前建议的管理节点编号为49和50。管理节点仍然支持这些节点,但这样使用将限制数据节点的最大数量为142;因此,现在建议将节点id 145和146用于管理节点。

    作为这项工作的一部分,用于数据节点的格式sysfile已更新到版本2。该文件记录了诸如最后一个全局检查点索引、重新启动状态和每个节点的节点组成员关系等信息(参见NDB集群数据节点文件系统目录).

  • RedoOverCommitCounter和RedoOverCommitLimit的变化。由于将它们设置为0(每个数据节点配置参数的最小值)的语义存在歧义RedoOverCommitCounter而且RedoOverCommitLimit已增至1个,从8.0.19新台币开始。

  • ndb_autoincrement_prefetch_sz变化。在NDB 8.0.19中,默认的ndb_autoincrement_prefetch_sz服务器系统变量增加到512。

  • 参数最大值和默认值的更改。NDB 8.0.19对配置参数最大值和默认值进行了如下修改:

  • 磁盘数据检查点改进。NDB Cluster 8.0.19提供了许多新的增强功能,在使用非易失性内存设备(如固态驱动器)和用于此类设备的NVMe规范时,这些增强功能有助于减少Disk Data表和表空间检查点的延迟。这些改进包括以下几点:

    • 避免检查点磁盘写入的爆发

    • 当重做日志或撤消日志满时,加速磁盘数据表空间的检查点

    • 在必要时平衡到磁盘的检查点和内存中的检查点

    • 保护磁盘设备避免过载,以帮助确保高负载下的低延迟

    作为这项工作的一部分,NDB 8.0.19引入了两个新的数据节点配置参数。MaxDiskDataLatency为磁盘访问允许的延迟程度设置一个上限,并导致耗时超过此时间长度的事务被终止。DiskDataUsingSameDisk通过提高对这些表空间执行检查点的速度,可以利用将Disk Data表空间放置在单独的磁盘上的优势。

    的三个新表ndbinfo数据库,也添加在NDB 8.0.19,并列出在这里,提供关于磁盘数据性能的信息:

    • diskstat表报告过去一秒内对Disk Data表空间的写入情况

    • diskstats_1sec表报告最近20秒内对Disk Data表空间的写入情况

    • pgman_time_track_stats表报告了与disk Data表空间相关的磁盘操作的延迟

  • 内存分配和TransactionMemory。NDB 8.0.19引入了一个新的TransactionMemory参数,该参数简化了事务的数据节点内存分配,作为池化事务和本地数据管理器(LDM)内存工作的一部分。此参数用于替换几个已弃用的旧事务内存参数。

    事务内存现在可以通过下面列出的三种方式中的任何一种来设置:

  • 如果TransactionMemory时,此值用于确定事务内存。TransactionMemory如果还设置了上一项中提到的任何不兼容参数,则不能设置。

  • 如果没有设置不兼容的参数和TransactionMemory也是不设,事务内存是设由NDB

  • 有关更多信息,请参见TransactionMemory,以及

    支持额外的片段副本。NDB 8.0.19将生产中支持的片段副本的最大数量从2个增加到4个。(以前,它是可以设置NoOfReplicas到3或4,但这没有得到官方支持或在测试中验证。)

  • 恢复的片。从NDB 8.0.20开始,可以将备份划分为大致相等的部分(片),并使用实现的两个新选项并行地恢复这些片ndb_restore

    的多个实例成为可能ndb_restore以并行方式恢复备份的子集,可能会减少执行恢复操作所需的时间。

    有关更多信息,请参见ndb_restore——num-slices选择。

  • 从任何启用的片段副本中读取。从NDB 8.0.19开始,从任何片段副本中读取都是默认启用的NDB表。的默认值ndb_read_backup系统变量现在是ON,并且NDB_TABLE评论选项READ_BACKUP是1时创建一个新的NDB表格启用从任何片段副本读取可以显著提高从的读取性能NDB表,对写入的影响最小。

    有关更多信息,请参见ndb_read_backup系统变量,

    ndb_blob_tool增强。从NDB 8.0.20开始ndb_blob_tool实用程序可以检测存在内联部分的缺失blob部分,并将其替换为长度正确的占位符blob部分(由空格字符组成)。要检查是否缺少blob部件,请使用——check-missing选项与此程序。要用占位符替换任何缺失的blob部分,请使用——添加缺少的选择。

    有关更多信息,请参见

    ndbinfo版本控制。NDB的版本控制ndbinfo表,并在内部维护其表的当前定义。在启动时,NDB比较其支持ndbinfo版本与数据字典中存储的版本一致。如果版本不同,NDB滴任何旧ndbinfo表,并使用当前定义重新创建它们。

  • 支持Fedora Linux。从NDB 8.0.20开始,Fedora Linux是NDB集群社区版本支持的平台,可以使用Oracle为此目的提供的rpm进行安装。这些都可以从10bet博彩公司

  • NDB程序-去除ndbt依赖。的依赖性NDB的实用程序NDBT库已被删除。该库用于内部开发,正常使用时不需要;将其包含在这些程序中可能会在测试时导致不必要的问题。

    此处列出了受影响的程序,以及NDB移除依赖项的版本:

    这一变化对用户的主要影响是这些程序不再打印NDBT_ProgramExit -状态在运行完成之后。当升级到指定的版本时,应该更新依赖于这种行为的应用程序以反映更改。

  • 外连接和半连接的下推。在NDB 8.0.20中所做的工作允许将许多外部连接和半连接下推到数据节点,而不仅仅是那些使用主键或惟一键查找的连接

  • 使用索引扫描的半连接现在可以被推入,如果它满足刚刚为推入的外部连接指出的条件,并且它使用firstMatch策略(见解释应提供一个或多个理由。

  • 外键和字母。NDB使用定义外键时的大小写存储外键的名称。从前,当值lower_case_table_names系统变量被设置为0,它执行大小写敏感的外键名比较选择和其他SQL语句,并存储名称。从NDB 8.0.20开始,这样的比较现在总是以不区分大小写的方式执行,不管值是多少lower_case_table_names

  • 多种转运蛋白。NDB 8.0.20引入了对多个传输器的支持,以处理数据节点对之间的节点对节点通信。这为集群中的每个节点组提供了更高的更新操作速率,并有助于避免使用单个套接字的节点间通信受到系统或其他限制的约束。

    默认情况下,NDB现在使用基于本地数据管理(LDM)线程数或事务协调器(TC)线程数的多个传输器,以两者中的更大者为准。默认情况下,传输器的数量等于该数量的一半。虽然默认值应该适用于大多数工作负载,但是可以通过设置NodeGroupTransporters数据节点配置参数(也在NDB 8.0.20中引入),最大值为LDM线程数和TC线程数中较大的值。将其设置为0将导致传输程序的数量与LDM线程的数量相同。

  • Ndb_restore:主键模式改变。数据恢复时,NDB 8.0.21(以及更高版本)支持源表和目标表的不同主键定义NDB本地备份与ndb_restore当它与——allow-pk-changes选择。既支持增加也支持减少构成原始主键的列数。

    当用一个或多个额外的列扩展主键时,任何添加的列都必须定义为非空,并且在执行备份期间,任何此类列中的值都不能更改。因为有些应用程序在更新行时设置了行中的所有列值,无论是否更改了所有值,这可能导致恢复操作失败,即使要添加到主键的列中的值没有更改。方法可以覆盖此行为——ignore-extended-pk-updates选项也加入了NDB 8.0.21;在这种情况下,您必须确保没有更改这些值。

    可以从表的主键中删除列,无论该列是否仍然是表的一部分。

    有关更多信息,请参见——allow-pk-changes选择ndb_restore

  • 使用ndb_restore合并备份。在某些情况下,可能需要将最初存储在NDB集群不同实例(都使用相同的模式)中的数据合并到单个目标NDB集群中。中创建的备份现在支持这一点ndb_mgm客户端(见ndb_restore,使用——remap-column选项在NDB 8.0.21中添加——恢复数据(根据需要或需要,可能还有其他兼容选项)。——remap-column可以用于处理源集群之间主键值和唯一键值重叠的情况,并且它们在目标集群中必须不重叠,还可以用于保留表之间的其他关系,如外键。

    ——remap-column接受具有以下格式的字符串作为参数db资源描述上校fnarg游戏,在那里db资源描述,上校分别是数据库、表和列的名称,fn重映射函数的名称,和arg游戏是否有一个或多个参数fn.无缺省值。只有抵消支持作为函数名,使用arg游戏作为将列的值从备份插入到目标表时应用于该列的值的整数偏移量。这一列必须是INT长整型数字;偏移值的允许范围与该类型的有符号版本相同(如果需要,这允许偏移值为负数)。

    的同一调用中可以多次使用新选项ndb_restore,以便您可以将同一表、不同表或两者的多个列重新映射到新值。对于该选项的所有实例,偏移值不必相同。

    此外,还提供了两个新的选项ndb_desc,也从NDB 8.0.21开始:

    • ——auto-inc(简式——一个):包含输出中的下一个自动递增值,如果表有AUTO_INCREMENT列。

    • ——背景(简式- x):提供关于表的额外信息,包括模式、数据库名、表名和内部ID。

    有关更多信息和示例,请参阅——remap-column选择。

  • 发送线程的改进。从NDB 8.0.20开始,每个发送线程现在处理发送到传输器子集的消息,每个块线程现在只辅助一个发送线程,从而产生更多的发送线程,从而获得更好的性能和数据节点可伸缩性。

  • 自适应自旋控制使用SpinMethod。在支持它的平台上设置自适应CPU自旋的简单界面SpinMethod数据节点参数。该参数(在NDB 8.0.20中添加,从NDB 8.0.24开始使用)有四个设置,分别用于静态旋转、基于成本的自适应旋转、延迟优化的自适应旋转和针对每个线程都有自己CPU的数据库机器优化的自适应旋转。这些设置中的每一个都导致数据节点对一个或多个自旋参数使用一组预先确定的值,这些参数支持自适应自旋、设置自旋计时和设置自旋开销,以适合于给定的场景,从而避免了对常见用例直接设置这些值的需要。

    对于微调自旋行为,也可以直接设置这些和其他自旋参数,使用现有的SchedulerSpinTimer数据节点配置参数以及以下参数转储命令的ndb_mgm客户:

    NDB 8.0.20还增加了一个新的TCP配置参数TcpSpinTime它设置给定TCP连接的旋转时间。

    ndb_top工具也得到了增强,可以为每个线程提供自旋时间信息。

    有关其他信息,请参见SpinMethod参数,上市转储命令和

    磁盘数据和集群重启。从NDB 8.0.21开始,集群的初始重启会强制删除所有磁盘数据对象,比如表空间和日志文件组,包括与这些对象关联的任何数据文件和undo日志文件。

    看到

    Disk数据区分配。从NDB 8.0.20开始,在给定表空间使用的所有数据文件中以循环方式分配数据文件中的区。在使用多个存储设备进行磁盘数据存储的情况下,这有望改善数据的分布。

    有关更多信息,请参见

    ——ndb-log-fail-terminate选项。从NDB 8.0.21开始,当SQL节点无法完全记录所有行事件时,可以导致它终止。这可以通过开始来完成mysqld——ndb-log-fail-terminate选择。

  • AllowUnresolvedHostNames参数。默认情况下,当管理节点无法解析全局配置文件中的主机名时,它将拒绝启动,这在某些环境中可能会出现问题,例如Kubernetes。从NDB 8.0.22开始,可以通过设置来覆盖此行为AllowUnresolvedHostNames真正的(tcp违约)集群全局配置文件的部分(config.ini文件)。这样做会导致此类错误被视为警告,并被允许ndb_mgmd继续开始

  • Blob写性能增强。NDB 8.0.22实现了许多改进,通过减少应用这些修改时SQL或其他API节点与数据节点之间所需的往返次数,在修改同一行中的多个blob列时,或在修改同一语句中包含blob列的多个行时,允许更高效的批处理。许多人的表现插入更新,删除因此,可以改进报表。这里列出了此类语句的例子表格是一个NDB包含一个或多个Blob列的表:

    • 插入表格值行(1,blob_value1blob_value2,……),即插入包含一个或多个Blob列的行

    • 插入表格值行(1,blob_value1)、行(2blob_value2)、行(3blob_value3),…,即插入包含一个或多个Blob列的多行

    • 更新表格blob_column1blob_value1blob_column2blob_value2,……

    • 更新表格blob_columnblob_value在哪里primary_key_column在(value_list,其中主键列不是Blob类型

    • 删除从表格在哪里primary_key_column价值,其中主键列不是Blob类型

    • 删除从表格在哪里primary_key_column在(value_list,其中主键列不是Blob类型

    其他SQL语句也可以从这些改进中受益。这些包括数据加载INFILE而且创建表……选择…….此外,ALTER TABLE表格引擎= NDB,在那里表格使用非NDB在语句执行之前,也可以更有效地执行。

    这种增强适用于影响MySQL类型列的语句MEDIUMBLOBLONGBLOB文本简单,量变.语句更新TINYBLOB非常小的文本串列(或两种类型)不受此工作的影响,它们的性能应该不会发生变化。

    由于需要扫描表Blob列,一些SQL语句的性能并没有因为这种增强而明显提高,这就破坏了批处理。这些报表包括这里所列的类型:

    • 选择从表格(在哪里key_column在(blob_value_list)],其中通过匹配使用Blob类型的主键或唯一键列来选择行

    • 更新表格blob_columnblob_value在哪里条件,使用条件哪一个不依赖于唯一值

    • 删除从表格在哪里条件来删除包含一个或多个Blob列的行条件哪一个不依赖于唯一值

    • 一个复制ALTER TABLE语句,该语句已经使用了NDB它的行在执行语句之前或之后(或同时包含)包含一个或多个Blob列。

    要最大限度地利用此改进,您可能希望增加用于——ndb-batch-size而且——ndb-blob-write-batch-bytes选项mysqld,以减少修改blob所需的往返次数。对于复制,还建议启用slave_allow_batching系统变量,它最小化复制集群应用epoch事务所需的往返次数。

  • node . js更新。从NDB 8.0.22开始NDBNode.js的适配器是使用版本12.18.3构建的,现在只支持该版本(或Node.js的更高版本)。

  • 加密备份。NDB 8.0.22增加了使用AES-256-CBC加密的备份文件支持;这是为了防止从已被未授权方访问的备份中恢复数据。加密后,备份数据由用户提供的密码保护。密码可以是除。以外的可打印ASCII字符范围内最多256个字符的任何字符串,.用户或应用程序必须保留用于加密任何给定NDB集群备份的密码;NDB不保存密码。密码可以为空,但不建议这样做。

    在进行NDB集群备份时,可以使用加密密码=密码与管理客户端一起开始备份命令。MGM API的用户还可以通过调用来启动加密备份ndb_mgm_start_backup4 ()

    方法可以加密现有备份文件ndbxfrm在8.0.22版本中添加到NDB集群发行版的实用程序;这个程序也可以用来解密加密的备份文件。此外,ndbxfrm可以使用NDB集群创建备份时使用的相同方法压缩和解压缩备份文件CompressedBackup配置参数设置为1。

    若要从加密备份进行恢复,请使用ndb_restore的选项——解密而且——备份密码.这两个选项都是必需的,如果备份没有加密,则还需要使用其他选项来恢复相同的备份。ndb_print_backup_file而且ndbxfrm也可以读取加密文件分别使用,- p密码而且——decrypt-password =密码

    在提供密码的同时提供加密或解密选项的所有情况下,密码必须加引号;可以使用单引号或双引号分隔密码。

    从8.0.24 NDB开始,有几个NDB这里列出的程序也支持从标准输入输入密码,与交互登录时的方式类似mysql客户端使用——密码选项(不包括命令行上的密码):

    有关更多信息,请参阅刚刚列出的程序描述。

    从NDB 8.0.22开始,还可以通过设置强制备份加密RequireEncryptedBackup = 1(ndbd违约)节的集群全局配置文件。当这个完成后,ndb_mgm客户端拒绝执行未加密备份的任何尝试。

    从NDB 8.0.24开始,您可以引起ndb_mgm在通过启动备份来创建备份时使用加密——encrypt-backup.在这种情况下,调用时会提示用户输入密码开始备份如果没有提供。

  • IPv6支持。从NDB 8.0.22开始,到管理节点和数据节点的连接支持IPv6寻址;这包括管理节点和数据节点与SQL节点之间的连接。配置集群时,可以使用数字IPv6地址、解析为IPv6地址的主机名或两者同时使用。

    要使IPv6寻址工作,部署集群的操作平台和网络必须支持IPv6。与使用IPv4寻址时一样,操作平台必须提供主机名到IPv6地址的解析。

    继续支持IPv4寻址NDB.不建议同时使用IPv4和IPv6地址,但可以在以下情况下使用:

    这些案例起作用是因为ndb_mgmd缺省情况下,不绑定任何IP地址。

    的版本进行升级NDB如果网络支持IPv4和IPv6,则首先执行软件升级;完成此操作后,可以更新IPv4地址config.iniIPv6地址文件。在此之后,为了使配置更改生效并使集群使用IPv6地址启动,需要对集群执行一次系统重启。

  • 自动安装程序弃用和删除。基于web的MySQL NDB集群自动安装工具(ndb_setup.py)在NDB 8.0.22中已弃用,在NDB 8.0.23及以后版本中被移除。它不再受到支持。

  • Ndbmemcache弃用和移除。ndbmemcache不再受支持。ndbmemcache在NDB 8.0.22中被弃用,在NDB 8.0.23中被移除。

  • ndbinfo backup_id表。NDB 8.0.24增加了一个backup_idndbinfo信息数据库。这是为了替代使用ndb_select_all转储内部的内容SYSTAB_0Tyable,它很容易出错,执行它需要花费非常长的时间。

    类获取的集群最近备份的ID开始备份管理客户端命令。如果找不到此集群的备份,则表包含单行,其列值为0

  • 表分区增强。NDB 8.0.23引入了一种处理表分区和片段的新方法,它可以独立于重做日志部分的数量,确定给定数据节点的本地数据管理器(ldm)的数量。这意味着ldm的数量现在可以是高度可变的。NDB可以采用这种方法当ClassicFragmentation数据节点配置参数,也在NDB 8.0.23中实现,设置为;在这种情况下,不再使用ldm的数量来确定为每个数据节点创建多少分区,以及PartitionsPerNode参数(也在NDB 8.0.23中引入)决定这个数字,它也被用于计算表中使用的片段的数量。

    ClassicFragmentation具有默认值真正的,则使用传统的使用ldm数量的方法来确定一个表应该具有的片段数量。

    有关更多信息,请参阅前面引用的新参数的描述

    术语更新。为了与MySQL 8.0.21和NDB 8.0.21中开始的工作保持一致,NDB 8.0.23对术语进行了一些更改,如下所示:

  • ThreadConfig增强。从NDB 8.0.23开始,ThreadConfig参数扩展了两种新的线程类型,如下所示:

    • 查询:查询线程(仅)工作在读过承诺查询。查询线程还充当恢复线程。查询线程数必须是LDM线程数的0、1、2或3倍。0(默认值,除非使用ThreadConfig,或AutomaticThreadConfig)导致ldm的行为与NDB 8.0.23之前一样。

    • 恢复:恢复线程从本地检查点检索数据。这样指定的恢复线程永远不会充当查询线程。

    也可以结合现有的主要而且代表线程有两种方式:

    • 通过将其中一个参数设置为0,将其放入一个线程中。完成此操作后,将显示合并后的线程的名称main_repndbinfo.threads表格

    • 一起recv线程通过设置ldm而且tc为0,并设置recv为1。在本例中,命名了合并后的线程main_rep_recv

    此外,已经增加了一些现有线程类型的最大数量。下面列出了新的最大值,包括查询线程和恢复线程的最大值:

    • LDM: 332

    • 查询:332

    • 复苏:332

    • TC: 128

    • 收到:64

    • 发送:64

    • 主要:2

    其他线程类型的最大值保持不变。

    有关更多信息,请参阅ThreadConfig参数和ndbinfo.threads表格

    此外,作为与这项任务有关的工作的结果,NDB现在,当使用超过32个块线程时,使用互斥锁来保护作业缓冲区。虽然这可能会导致性能轻微下降(在大多数情况下是1%到2%),但它也会显著减少非常大的配置所需的内存量。例如,一个64个线程的设置在NDB 8.0.23之前使用了2gb的作业缓冲内存,而在NDB 8.0.23及以后的版本中只需要大约1gb。在我们的测试中,这使得非常复杂的查询的执行总体上提高了5%。

  • ndbmtd线程自动配置。从NDB 8.0.23开始,可以使用ndbmtd配置参数AutomaticThreadConfig.当该参数设置为1时,NDB根据应用程序可用的处理器数量,为所有线程支持的线程类型自动设置线程分配,包括new查询而且恢复上一项中描述的线程类型。如果系统不限制处理器的数量,您可以通过设置来限制处理器的数量NumCPUs(也在NDB 8.0.23中添加)。否则,自动线程配置最多支持1024个cpu。

    不管设置了什么值,都会自动进行线程配置ThreadConfigMaxNoOfExecutionThreadsconfig.ini;这意味着不需要设置这些参数中的任何一个。

    此外,NDB 8.0.23实现了许多新的功能ndbinfo信息数据库表,提供有关硬件和CPU可用性的信息,以及按NDB数据节点。下面列出了这些表格:

    其中一些表并不是在NDB集群支持的所有平台上都可用;有关更多信息,请参阅它们的个别描述。

  • NDB数据库对象的层次视图。dict_obj_tree表,添加到ndbinfo信息数据库在NDB 8.0.24中,可以提供层次化的和树形的很多视图NDB数据库对象,包括:

    • 表和相关索引

    • 表空间和相关的数据文件

    • 日志文件组和关联的撤消日志文件

    有关更多信息和示例,请参见

    索引统计信息增强。NDB 8.0.24在计算索引统计信息方面实现了以下改进:

    • 索引统计数据以前只从一个片段收集;这样就可以将这个外推扩展到其他片段。

    • 用于非常小的表的算法,例如那些只有很少行而结果被丢弃的表,已经得到了改进,因此对这类表的估计应该比以前更准确。

    从NDB 8.0.27开始,默认情况下索引统计表是自动创建和更新的,IndexStatAutoCreate而且IndexStatAutoUpdate都默认1(使)而不是0(已禁用),不再需要运行分析表更新统计信息。

    有关其他信息,请参见

    恢复操作期间NULL和NOT NULL之间的转换。从NDB 8.0.26开始,ndb_restore可支持恢复列如非空反过来,使用下面列出的选项:

    有关更多信息,请参见所示的描述ndb_restore选项。

  • NdbScanFilter的符合sql的NULL比较模式。传统上,当进行比较时NdbScanFilter对待等于(因此认为NULL = =零真正的).这与SQL标准所规定的不一样,SQL标准要求与SQL标准进行任何比较返回,包括NULL = =零

    以前,NDB API应用程序不可能覆盖这种行为;从NDB 8.0.26开始,您可以通过调用NdbScanFilter: setSqlCmpSemantics ()在创建扫描过滤器之前。(因此,此方法总是作为类方法调用,而不是作为实例方法调用。)这样做会导致下一次NdbScanFilter对象,以采用兼容sql的方法在实例的生命周期内执行的所有比较操作的比较。您必须为每一个调用方法NdbScanFilter对象应该使用兼容sql的比较。

    有关更多信息,请参见NdbScanFilter: setSqlCmpSemantics ()

  • 弃用NDB API . frm文件方法。MySQL 8.0和NDB 8.0不再使用.FRM用于存储表元数据的文件。由于这个原因,NDB API方法getFrmData ()getFrmLength (),setFrm ()从NDB 8.0.27起已弃用,并将在未来的版本中删除。对于读取和写入表元数据,使用getExtraMetadata ()而且setExtraMetadata ()代替。

  • 首选IPv4或IPv6寻址。NDB 8.0.26添加了PreferIPVersion配置参数,该参数控制DNS解析的寻址优先级。IPv4 (PreferIPVersion = 4)为默认值。因为NDB中的配置检索要求该首选项对于所有TCP连接都是相同的,所以您应该只在(tcp违约)部分的集群全局配置(config.ini)文件。

    看到

    日志的增强。以前,由于不同的日志消息使用不同的格式,并且不是所有的日志消息都包含时间戳,所以对NDB集群数据节点和管理节点日志的分析可能会受到阻碍。这些问题部分是由于日志记录是由许多不同的机制执行的,例如函数printfndbout,ndbout_c,超载的<<运算符,等等。

    我们通过标准化来解决这些问题事件日志机制,这已经出现在NDB,它以时间戳开始每个日志消息YYYY-MM-DD HH: MM: SS格式。

    看到事件日志日志消息格式。

  • MySQL Cluster Manager 1.4.8也为NDB Cluster 8.0提供了实验支持。MySQL集群管理器有一个高级的命令行界面,可以简化许多复杂的NDB集群管理任务。看到MySQL™集群管理器1.4.8用户手册,以查询更多资料。