MySQL8 中文参考(八十五)(3)

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: MySQL8 中文参考(八十五)

MySQL8 中文参考(八十五)(2)https://developer.aliyun.com/article/1566065


  • 使用 ndb_perror 获取错误信息。 已删除了perror的已弃用--ndb选项。请改用ndb_perror来从NDB错误代码获取错误消息信息。(Bug #81704, Bug #81705, Bug #23523926, Bug #23523957)
  • 条件推送增强。 以前,条件推送仅限于将条件推送到引用来自与条件所推送的表相同的列值的谓词项。在 NDB 8.0  中,取消了此限制,使得可以从查询计划中较早的表中引用列值。NDB 8.0  支持比较列表达式的连接,以及在同一表中比较列。要比较的列和列表达式必须完全相同类型;这意味着它们在适用这些属性时也必须具有相同的符号、长度、字符集、精度和比例。在  NDB 8.0.27 之前,被推送的条件不能是推送连接的一部分,当解除此限制时。下推更大部分条件允许数据节点过滤更多行,从而减少mysqld在连接处理期间必须处理的行数。这些增强的另一个好处是过滤可以在 LDM 线程中并行执行,而不是在 SQL 节点上的单个 mysqld 进程中执行;这有可能显著提高查询性能。继续适用于被比较的列值之间的类型兼容性的现有规则(参见第 10.2.1.5 节,“引擎条件下推优化”)。外连接和半连接的下推。 在 NDB 8.0.20 中完成的工作允许许多外连接和半连接(不仅仅是使用主键或唯一键查找的连接)被下推到数据节点(参见第 10.2.1.5 节,“引擎条件下推优化”)。现在可以下推的扫描外连接包括符合以下条件的连接:
  • 表中没有未下推的条件
  • 在同一连接嵌套中的其他表或依赖它的上层连接嵌套中没有未下推的条件
  • 同一连接嵌套中的所有其他表,或依赖它的上层连接嵌套,也被下推
  • 如果半连接使用索引扫描,并且符合刚才提到的被下推外连接的条件,并且使用firstMatch策略,那么现在可以将其下推(参见第 10.2.2.1 节,“使用半连接转换优化 IN 和 EXISTS 子查询谓词”)。
    这些额外的改进是在 NDB 8.0.21 中完成的:
  • 通过转换NOT EXISTSNOT IN查询而由 MySQL 优化器生成的反连接(参见第 10.2.2.1 节,“使用半连接转换优化 IN 和 EXISTS 子查询谓词”)可以被NDB下推到数据节点。
    当表中没有未下推的条件,并且查询满足外连接下推必须满足的任何其他条件时,可以执行此操作。
  • NDB在尝试从附加的表中检索任何行之前,会尝试识别和评估一个非依赖标量子查询。当它能够这样做时,获得的值将作为下推条件的一部分使用,而不是使用提供值的子查询。
  • 从 NDB 8.0.27 开始,作为下推查询的一部分下推的条件现在可以引用同一下推查询中祖先表的列,但必须满足以下条件:
  • 推送的条件可能包括任何比较运算符<<=>>==,和<>
  • 被比较的值必须是相同类型,包括长度、精度和比例。
  • NULL处理根据 ISO SQL 标准指定的比较语义执行;任何与NULL的比较都返回NULL
  • 考虑使用此处所示语句创建的表:
CREATE TABLE t (
    x INT PRIMARY KEY, 
    y INT
) ENGINE=NDB;
  • 查询语句如SELECT * FROM t AS m JOIN t AS n ON m.x >= n.y现在可以使用引擎条件推送优化来推送条件列y
    当无法推送连接时,EXPLAIN应提供原因或原因。
    更多信息请参见 Section 10.2.1.5, “引擎条件推送优化”。
    NDB API 方法branch_col_eq_param()branch_col_ne_param()branch_col_lt_param()branch_col_le_param()branch_col_gt_param(),和branch_col_ge_param()在 NDB 8.0.27 中作为这项工作的一部分添加。这些NdbInterpretedCode可用于比较列值与参数值。
    此外,NdbScanFilter::cmp_param(),也在 NDB 8.0.27 中添加,使得可以定义列值和参数值之间的比较,用于执行扫描。
  • 最大行大小增加。 NDB 8.0 将NDBCLUSTER表中可存储的最大字节数从 14000 增加到 30000 字节。
    BLOBTEXT列继续使用此总数的 264 字节,与以前一样。
    NDB表的固定宽度列的最大偏移量为 8188 字节;这与之前的版本保持不变。
    有关更多信息,请参见第 25.2.7.5 节,“NDB 集群中数据库对象相关的限制”。
  • ndb_mgm SHOW 命令和单用户模式。 在 NDB 8.0 中,当集群处于单用户模式时,管理客户端的 SHOW 命令的输出指示在此模式下哪个 API 或 SQL 节点具有独占访问权限。
  • 在线列重命名。 现在可以在线重命名NDB表的列,使用ALGORITHM=INPLACE。有关更多信息,请参见第 25.6.12 节,“NDB 集群中 ALTER TABLE 的在线操作”。
  • 改进的 ndb_mgmd 启动时间。 在 NDB 8.0 中,管理节点守护程序的启动时间已经得到显著改善,具体体现在以下方面:
  • 由于将ndb_mgmd以前用于处理配置数据中节点属性的列表数据结构替换为哈希表,管理服务器的整体启动时间已经减少了 6 倍或更多。
  • 此外,在集群配置文件中使用的数据和 SQL 节点主机名未出现在管理服务器的hosts文件中时,ndb_mgmd 的启动时间可能比以前短多达 20 倍。
  • NDB API 增强。NdbScanFilter::cmp()NdbInterpretedCode 的几种比较方法现在可以用于比较表列值。受影响的NdbInterpretedCode方法在此列出:
  • branch_col_eq()
  • branch_col_ge()
  • branch_col_gt()
  • branch_col_le()
  • branch_col_lt()
  • branch_col_ne()
  • 对于上述列出的所有方法,要比较的表列值必须完全匹配类型,包括长度、精度、有符号性、比例、字符集和排序规则(如适用)。
    有关更多信息,请参见各个 API 方法的描述。
  • 离线多线程索引构建。 现在可以指定一组核心用于执行离线多线程构建有序索引的 I/O 线程,而不是执行正常的 I/O 任务,如文件 I/O,压缩或解压缩。在这种情况下,“离线”指的是在父表未被写入时执行有序索引构建;这种构建发生在NDB集群执行节点或系统重启时,或作为使用ndb_restore--rebuild-indexes从备份还原集群的一部分时。此外,离线索引构建工作的默认行为已修改为使用所有可用于ndbmtd")的核心,而不仅限于为 I/O 线程保留的核心。这样做可以提高重启和还原时间以及性能、可用性和用户体验。此增强功能的实现如下:
  1. BuildIndexThreads的默认值从 0 更改为 128。这意味着离线有序索引构建现在默认是多线程的。
  2. TwoPassInitialNodeRestartCopy的默认值从false更改为true。这意味着初始节点重启首先将所有数据从“活动”节点复制到正在启动的节点,而不创建任何索引,然后离线构建有序索引,然后再次将其数据与活动节点同步,即在两次同步之间进行离线索引构建。这使得初始节点重启的行为更像节点的正常重启,并减少了构建索引所需的时间。
  3. ThreadConfig配置参数定义了一个新的线程类型(idxbld),以允许将离线索引构建线程锁定到特定的 CPU。
  • 此外,NDB现在通过这两个标准区分可访问ThreadConfig的线程类型:
  1. 线程是否是执行线程。mainldmrecvreptcsend类型的线程是执行线程;iowatchdogidxbld类型的线程不是。
  2. 线程分配给特定任务是永久的还是临时的。目前除了idxbld之外的所有线程类型都是永久的。
  • 要获取更多信息,请参阅手册中指定参数的描述。(Bug #25835748, Bug #26928111)
  • logbuffers 表备份过程信息。 在执行 NDB 备份时,ndbinfo.logbuffers 表现在显示每个数据节点上备份过程中缓冲区使用情况的信息。这通过反映两种新的日志类型的行来实现,除了 REDODD-UNDO。其中一行具有日志类型 BACKUP-DATA,显示备份期间用于将片段复制到备份文件的数据缓冲区的使用量。另一行具有日志类型 BACKUP-LOG,显示备份期间用于记录备份开始后所做更改的日志缓冲区的使用量。在集群中的每个数据节点的 logbuffers 表中显示这两种 log_type 行。只有在 NDB 备份正在进行时,表中才存在具有这两种日志类型的行。 (Bug #25822988)
  • Windows 上的 ndbinfo.processes 表。 在 Windows 平台上由 RESTART 用于生成和重新启动 mysqld 的监视进程的进程 ID 现在在 processes 表中显示为 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)
  • RESET MASTER 更改。 因为 MySQL 服务器现在使用全局读锁执行RESET MASTER,所以当与 NDB Cluster 一起使用时,此语句的行为在以下两个方面发生了变化:
  • 不再保证是同步的;也就是说,现在可能会出现在发出RESET MASTER之前立即进行的读取操作可能要等到二进制日志被轮换后才被记录。
  • 现在无论语句是在写入二进制日志的相同 SQL 节点上执行,还是在同一集群中的不同 SQL 节点上执行,它的行为都完全相同。
  • 注意
    SHOW BINLOG EVENTSFLUSH LOGS,以及大多数数据定义语句继续像以前的NDB版本一样以同步方式运行。
  • ndb_restore 选项用法。 在调用ndb_restore时,现在需要同时使用--nodeid--backupid选项。
  • ndb_log_bin 默认值。 NDB 8.0 将ndb_log_bin系统变量的默认值从TRUE更改为FALSE
  • 动态事务资源分配。 现在,事务协调器中的资源分配是使用动态内存池进行的。这意味着资源分配由数据节点配置参数决定,例如MaxDMLOperationsPerTransactionMaxNoOfConcurrentIndexOperationsMaxNoOfConcurrentOperationsMaxNoOfConcurrentScansMaxNoOfConcurrentTransactionsMaxNoOfFiredTriggersMaxNoOfLocalScansTransactionBufferMemory现在以这样的方式进行,即如果每个参数所代表的负载都在所有这些资源的目标负载范围内,那么其他这些资源可以被限制,以使总资源不超过可用资源。作为这项工作的一部分,已添加了几个新的数据节点参数,用于控制DBTC中的事务资源,列在这里:
  • ReservedConcurrentIndexOperations
  • ReservedConcurrentOperations
  • ReservedConcurrentScans
  • ReservedConcurrentTransactions
  • ReservedFiredTriggers
  • ReservedLocalScans
  • ReservedTransactionBufferMemory.
  • 有关刚才列出的参数的更多信息,请参阅其描述。
  • 每个数据节点使用多个本地数据管理器进行备份。 NDB 现在可以在每个数据节点上并行执行备份,使用多个本地数据管理器(LDMs)。 (以前,备份是在数据节点之间并行进行的,但在数据节点进程内部始终是串行的。)在 ndb_mgm 客户端的 START BACKUP 命令中不需要特殊的语法来启用此功能,但所有数据节点必须使用多个 LDMs。 这意味着数据节点必须运行 ndbmtdndbd 是单线程的,因此始终只有一个 LDM)并且在进行备份之前必须配置为使用多个 LDMs;您可以通过为多线程数据节点配置参数 MaxNoOfExecutionThreadsThreadConfig 之一选择适当的设置来实现这一点。
    使用多个 LDMs 进行备份会在 BACKUP/BACKUP-*backup_id*/ 目录下创建子目录,每个 LDM 一个。ndb_restore 现在会自动检测这些子目录,如果存在,则尝试并行恢复备份;详细信息请参见 第 25.5.23.3 节,“从并行备份中恢复”。 (单线程备份将像以前的 NDB 版本一样恢复。)还可以通过修改通常的恢复过程,使用先前版本的 NDB 集群的 ndb_restore 二进制文件来恢复并行备份;第 25.5.23.3.2 节,“串行恢复并行备份” 提供了如何执行此操作的信息。
    您可以通过在集群的全局配置文件(config.ini)的 [ndbd default] 部分为所有数据节点将 EnableMultithreadedBackup 数据节点参数设置为 0 来强制创建单线程备份。
  • 二进制配置文件增强。 NDB 8.0 使用了管理服务器二进制配置文件的新格式。以前,集群配置文件中最多可以出现 16381 个部分;现在,部分的最大数量为 4G。这旨在支持比以前更大数量的节点在集群中。
    升级到新格式相对无缝,并且很少需要手动干预,因为管理服务器仍然可以无问题地读取旧格式。从 NDB 8.0 降级到旧版本的 NDB 集群软件需要手动删除任何二进制配置文件,或者使用--initial选项启动旧管理服务器二进制文件。
    欲了解更多信息,请参阅第 25.3.7 节,“NDB 集群升级和降级”。
  • 增加数据节点数量。 NDB 8.0 将每个集群支持的数据节点最大数量增加到 144(以前为 48)。数据节点现在可以使用范围为 1 到 144 的节点 ID。
    以前,管理节点的推荐节点 ID 为 49 和 50。这些仍然支持用作管理节点,但将它们用作此类节点会限制数据节点的最大数量为 142;因此,现在建议将节点 ID 145 和 146 用于管理节点。
    作为这项工作的一部分,用于数据节点sysfile的格式已更新为版本 2。该文件记录了每个节点的最后全局检查点索引、重启状态和节点组成员资格等信息(参见 NDB 集群数据节点文件系统目录)。
  • RedoOverCommitCounter 和 RedoOverCommitLimit 更改。 由于将它们设置为 0 的语义存在歧义,因此数据节点配置参数RedoOverCommitCounterRedoOverCommitLimit的最小值已增加到 1。
  • ndb_autoincrement_prefetch_sz 更改。 ndb_autoincrement_prefetch_sz服务器系统变量的默认值增加到 512。
  • 参数最大值和默认值的更改。 NDB 8.0 对配置参数的最大值和默认值进行了以下更改:
  • DataMemory的最大值增加到 16TB。
  • DiskPageBufferMemory的最大值也增加到 16TB。
  • 默认值StringMemory已增加至 25%。
  • LcpScanProgressTimeout的默认值已增加至 180 秒。
  • 磁盘数据检查点改进。 NDB Cluster 8.0 提供了许多新的增强功能,有助于在使用非易失性内存设备(如固态硬盘和 NVMe 规范的设备)时减少磁盘数据表和表空间的检查点延迟。这些改进包括以下内容:
  • 避免检查点磁盘写入的突发
  • 加速当重做日志或撤销日志变满时的磁盘数据表空间检查点
  • 在必要时平衡磁盘和内存检查点之间的检查点
  • 保护磁盘设备免受过载,以确保在高负载下低延迟
  • 作为这项工作的一部分,已添加了两个数据节点配置参数。MaxDiskDataLatency设定了磁盘访问允许的延迟上限,并导致超过此时间长度的事务被中止。DiskDataUsingSameDisk使得可以利用将磁盘数据表空间放置在不同磁盘上,从而增加这些表空间的检查点执行速度。
    此外,ndbinfo数据库中的三个新表提供有关磁盘数据性能的信息:
  • diskstat表报告过去一秒钟对磁盘数据表空间的写入
  • diskstats_1sec表报告过去 20 秒对磁盘数据表空间的写入
  • pgman_time_track_stats表报告与磁盘数据表空间相关的磁盘操作的延迟
  • 内存分配和 TransactionMemory。 新的TransactionMemory参数简化了数据节点内存用于事务的分配,作为汇总事务和本地数据管理器(LDM)内存的工作的一部分。该参数旨在取代已被弃用的几个旧事务内存参数。事务内存现在可以通过以下三种方式之一设置:
  • 几个配置参数与TransactionMemory不兼容。如果设置了其中任何一个,就无法设置TransactionMemory(请参阅与 TransactionMemory 不兼容的参数),并且数据节点的事务内存将如同在 NDB 8.0 之前一样确定。
    注意
    尝试在config.ini文件中同时设置TransactionMemory和任何这些参数会阻止管理服务器启动。
  • 如果设置了TransactionMemory,则该值用于确定事务内存。如果已设置了前面提到的任何不兼容参数,则无法设置TransactionMemory
  • 如果没有设置任何不兼容的参数,并且也没有设置TransactionMemory,则事务内存由NDB设置。
  • 更多信息,请参阅TransactionMemory的描述,以及第 25.4.3.13 节,“数据节点内存管理”。
  • 支持额外的片段副本。 NDB 8.0 将在生产中支持的片段副本的最大数量从两个增加到四个。(以前,可以将NoOfReplicas设置为 3 或 4,但这在测试中并未得到官方支持或验证。)
  • 分片恢复。 从 NDB 8.0.20 开始,可以将备份分成大致相等的部分(片段),并使用两个新选项并行恢复这些片段,这两个选项已经在ndb_restore中实现:
  • --num-slices确定备份应分成的片段数。
  • --slice-id提供要由当前实例的ndb_restore恢复的片段的 ID。
  • 这使得可以使用多个实例的ndb_restore并行恢复备份的子集,可能减少执行恢复操作所需的时间。
    更多信息,请参阅ndb_restore--num-slices选项的描述。
  • 从任何片段副本读取已启用。 对于所有NDB表,默认启用从任何片段副本读取。这意味着ndb_read_backup系统变量的默认值现在为 ON,并且在创建新的NDB表时,NDB_TABLE注释选项READ_BACKUP的值为 1。启用从任何片段副本读取显著提高了从NDB表读取的性能,对写入的影响很小。
    欲了解更多信息,请参阅ndb_read_backup系统变量的描述,以及 Section 15.1.20.12,“设置 NDB 注释选项”。
  • ndb_blob_tool 增强。 从 NDB 8.0.20 开始,ndb_blob_tool实用程序可以检测缺失的 blob 部分,其中存在内联部分,并用正确长度的占位符 blob 部分(由空格字符组成)替换这些部分。要检查是否存在缺失的 blob 部分,请使用此程序的--check-missing选项。要用占位符替换任何缺失的 blob 部分,请使用--add-missing选项。
    欲了解更多信息,请参阅 Section 25.5.6,“ndb_blob_tool — 检查和修复 NDB Cluster 表的 BLOB 和 TEXT 列”。
  • ndbinfo 版本控制。 NDB 8.0.20 及更高版本支持ndbinfo表的版本控制,并在内部维护其表的当前定义。在启动时,NDB会将其支持的ndbinfo版本与数据字典中存储的版本进行比较。如果版本不同,NDB会删除任何旧的ndbinfo表,并使用当前定义重新创建它们。
  • 对 Fedora Linux 的支持。 从 NDB 8.0.20 开始,Fedora Linux 是 NDB Cluster Community 版本的支持平台,并可以使用 Oracle 提供的 RPM 包进行安装。这些可以从NDB Cluster 下载页面获取。
  • NDB 程序—NDBT 依赖项移除。 已移除了许多NDB实用程序对NDBT库的依赖。该库在开发中内部使用,对于正常使用不需要;将其包含在这些程序中可能会导致测试时出现不希望的问题。受影响的程序列在此处,以及移除依赖项的NDB版本:
  • ndb_restore
  • ndb_delete_all
  • ndb_show_tables (NDB 8.0.20)
  • ndb_waiter (NDB 8.0.20)
  • 这一变化对用户的主要影响是,这些程序在运行完成后不再打印NDBT_ProgramExit - *status*。依赖于这种行为的应用程序在升级到指定版本时应该进行更新。
  • 外键和大小写。 NDB 使用外键名称的定义大小写存储这些名称。以前,当lower_case_table_names系统变量的值设置为 0 时,它对外键名称进行区分大小写比较,就像在SELECT和其他 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_restore恢复 NDB 本机备份时,支持源表和目标表的不同主键定义,当使用--allow-pk-changes选项运行时。 支持增加和减少构成原始主键的列数。
    当主键使用额外列扩展时,添加的任何列必须定义为NOT NULL,并且在进行备份时,这些列中的任何值都不得更改。 因为一些应用程序在更新行时会设置所有列的值,无论实际上是否更改了所有值,这可能会导致恢复操作失败,即使要添加到主键的列中没有值发生更改。 您可以使用 NDB 8.0.21 中还添加的--ignore-extended-pk-updates选项覆盖此行为;在这种情况下,您必须确保不更改任何这样的值。
    无论这一列是否仍然是表的一部分,都可以从表的主键中删除一列。
    要获取更多信息,请参阅ndb_restore选项--allow-pk-changes的描述。
  • 使用 ndb_restore 合并备份。 在某些情况下,可能希望将最初存储在不同 NDB 集群实例(都使用相同模式)中的数据合并到单个目标 NDB 集群中。 当使用ndb_mgm客户端创建的备份(请参阅第 25.6.8.2 节,“使用 NDB 集群管理客户端创建备份”)并使用ndb_restore进行恢复时,现在支持使用 NDB 8.0.21 中添加的--remap-column选项以及--restore-data(可能还需要或希望的其他兼容选项)。 --remap-column 可用于处理源集群之间主键和唯一键值重叠的情况,并且在目标集群中不重叠是必要的,以及保留表之间的其他关系,如外键。--remap-column的参数是一个字符串,格式为*db*.*tbl*.*col*:*fn*:*args*,其中*dbtblcol分别是数据库,表和列的名称,fn是重新映射函数的名称,args是一个或多个fn的参数。没有默认值。只支持offset作为函数名称,args*是要在从备份插入目标表时应用到列值的整数偏移量。此列必须是INT - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT")或BIGINT - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT")之一;偏移值的允许范围与该类型的有符号版本相同(如果需要,这允许偏移为负)。新选项可以在同一次调用ndb_restore中多次使用,这样您可以重新映射同一表的多个列,不同表或两者的新值。偏移值不必对所有选项实例相同。此外,还为ndb_desc提供了两个新选项,从 NDB 8.0.21 开始:
  • --auto-inc(简写形式-a):如果表具有AUTO_INCREMENT列,则在输出中包含下一个自增值。
  • --context(简写形式-x):提供有关表的额外信息,包括模式,数据库名称,表名称和内部 ID。
  • 有关更多信息和示例,请参阅--remap-column选项的描述。
  • 发送线程改进。 从 NDB 8.0.20 开始,每个发送线程现在处理发送到一组传输器的发送,并且每个块线程现在只辅助一个发送线程,导致更多的发送线程,从而提高性能和数据节点的可伸缩性。
  • 使用 SpinMethod 进行自适应自旋控制。 在支持的平台上设置自适应 CPU 自旋的简单接口,使用SpinMethod数据节点参数。该参数(在  NDB 8.0.20 中添加,从 NDB 8.0.24  开始生效)有四个设置,分别用于静态自旋、基于成本的自适应自旋、优化延迟的自适应自旋以及针对每个线程都有自己 CPU  的数据库机器进行优化的自适应自旋。这些设置中的每一个都会使数据节点使用一组预定值来设置一个或多个自旋参数,从而实现自适应自旋,设置自旋时间和自旋开销,适用于特定场景,从而无需为常见用例直接设置这些值。为了对自旋行为进行微调,还可以直接设置这些和其他自旋参数,使用现有的SchedulerSpinTimer数据节点配置参数以及在ndb_mgm客户端中的以下DUMP命令:
  • DUMP 104000 (SetSchedulerSpinTimerAll): 设置所有线程的自旋时间
  • DUMP 104001 (SetSchedulerSpinTimerThread): 设置指定线程的自旋时间
  • DUMP 104002 (SetAllowedSpinOverhead): 设置自旋开销,即允许获得 1 单位延迟所需的 CPU 时间单位数
  • DUMP 104003 (SetSpintimePerCall): 设置调用的自旋时间
  • DUMP 104004 (EnableAdaptiveSpinning): 启用或禁用自适应自旋
  • NDB 8.0.20 还添加了一个新的 TCP 配置参数TcpSpinTime,用于设置给定 TCP 连接的自旋时间。
    ndb_top 工具也得到增强,以提供每个线程的自旋时间信息。
    欲了解更多信息,请参阅SpinMethod参数的描述,列出的DUMP命令以及 Section 25.5.29, “ndb_top — 查看 NDB 线程的 CPU 使用信息”。
  • 磁盘数据和集群重启。 从 NDB 8.0.21 开始,集群的初始重启会强制删除所有磁盘数据对象,如表空间和日志文件组,包括与这些对象相关联的任何数据文件和撤销日志文件。
    更多信息请参见第 25.6.11 节,“NDB 集群磁盘数据表”。
  • 磁盘数据范围分配。 从 NDB 8.0.20 开始,在数据文件中分配范围是在给定表空间中使用的所有数据文件之间以循环方式进行的。这有望改善在使用多个存储设备进行磁盘数据存储时数据的分布。
    更多信息请参见第 25.6.11.1 节,“NDB 集群磁盘数据对象”。
  • –ndb-log-fail-terminate 选项。 从 NDB 8.0.21 开始,您可以通过使用 --ndb-log-fail-terminate 选项启动 mysqld,使 SQL 节点在无法完全记录所有行事件时终止。
  • AllowUnresolvedHostNames 参数。 默认情况下,管理节点在无法解析全局配置文件中存在的主机名时拒绝启动,这在某些环境(如 Kubernetes)中可能会有问题。从 NDB 8.0.22 开始,可以通过在集群全局配置文件(config.ini 文件)的 [tcp default] 部分中将 AllowUnresolvedHostNames 设置为 true 来覆盖此行为。这样做会将此类错误视为警告,并允许 ndb_mgmd 继续启动
  • Blob 写入性能增强。 NDB 8.0.22 实现了一些改进,允许在同一行中修改多个 blob 列或在同一语句中修改包含 blob 列的多行时更有效地进行批处理,从而减少 SQL 或其他 API 节点与数据节点之间在应用这些修改时所需的往返次数。因此,许多 INSERTUPDATEDELETE 语句的性能可以得到改善。这里列出了一些这样的语句示例,其中 table 是包含一个或多个 Blob 列的 NDB 表:
  • INSERT INTO *table* VALUES ROW(1, *blob_value1*, *blob_value2*, ...),即插入包含一个或多个 Blob 列的一行数据
  • INSERT INTO *table* VALUES ROW(1, *blob_value1*), ROW(2, *blob_value2*), ROW(3, *blob_value3*), ...,即插入包含一个或多个 Blob 列的多行数据
  • UPDATE *table* SET *blob_column1* = *blob_value1*, *blob_column2* = *blob_value2*, ...
  • UPDATE *table* SET *blob_column* = *blob_value* WHERE *primary_key_column* in (*value_list*),其中主键列不是 Blob 类型
  • DELETE FROM *table* WHERE *primary_key_column* = *value*,其中主键列不是 Blob 类型
  • DELETE FROM *table* WHERE *primary_key_column* IN (*value_list*),其中主键列不是 Blob 类型
  • 其他 SQL 语句也可能从这些改进中受益。这些包括 LOAD DATA INFILECREATE TABLE ... SELECT ...。此外,ALTER TABLE *table* ENGINE = NDB,其中 table 在执行语句之前使用的存储引擎不是 NDB,也可能执行得更有效率。
    这种改进适用于影响 MySQL 类型 BLOBMEDIUMBLOBLONGBLOBTEXTMEDIUMTEXTLONGTEXT 列的语句。仅更新 TINYBLOBTINYTEXT 列(或两种类型)的语句不受此工作的影响,不应期望其性能发生变化。
    由于某些 SQL 语句需要扫描表格 Blob 列,这会破坏批处理,因此这种改进对某些 SQL 语句的性能没有明显提升。这些语句包括以下类型:
  • SELECT FROM *table* [WHERE *key_column* IN (*blob_value_list*)],其中通过匹配使用 Blob 类型的主键或唯一键列来选择行
  • UPDATE *table* SET *blob_column* = *blob_value* WHERE *condition*,使用一个不依赖于唯一值的 condition
  • DELETE FROM *table* WHERE *condition* 用于删除包含一个或多个 Blob 列的行,使用一个不依赖于唯一值的 condition
  • 在执行语句之前已经使用 NDB 存储引擎的表上执行复制 ALTER TABLE 语句,并且在执行语句之前或之后(或两者都有)表的行包含一个或多个 Blob 列
  • 为了充分利用这一改进,您可能希望增加用于 mysqld--ndb-batch-size--ndb-blob-write-batch-bytes 选项的值,以最小化修改 blob 所需的往返次数。对于复制,还建议启用 slave_allow_batching 系统变量,以最小化副本集群应用时代事务所需的往返次数。
    注意
    从 NDB 8.0.30 版本开始,您还应该使用 ndb_replica_batch_size 替代 --ndb-batch-size,以及 ndb_replica_blob_write_batch_bytes 而不是 --ndb-blob-write-batch-bytes。有关这些变量的描述以及更多信息,请参见这些变量的描述,以及 第 25.7.5 节,“为复制准备 NDB 集群”。
  • Node.js 更新。 从 NDB 8.0.22 版本开始,Node.js 的 NDB 适配器使用的是版本 12.18.3,并且现在仅支持该版本(或更高版本的 Node.js)。
  • 加密备份。 NDB 8.0.22 版本新增了对使用 AES-256-CBC 加密的备份文件的支持;这旨在防止未经授权的人员从已被访问的备份中恢复数据。当备份数据加密时,会由用户提供的密码进行保护。密码可以是任何由可打印 ASCII 字符范围内除了 !, ', ", $, %, \, 和 ^ 之外的最多 256 个字符组成的字符串。对于加密任何给定 NDB 集群备份所使用的密码的保留必须由用户或应用程序执行;NDB 不保存密码。密码可以为空,尽管这并不推荐。在进行 NDB 集群备份时,可以使用管理客户端 START BACKUP 命令,并通过 ENCRYPT PASSWORD=*password* 进行加密。MGM API 的用户也可以通过调用 ndb_mgm_start_backup4() 来启动加密备份。你可以使用ndbxfrm实用程序对现有的备份文件进行加密,该实用程序已添加到 NDB Cluster 发行版中的 8.0.22 版本中;该程序还可用于解密加密的备份文件。此外,ndbxfrm可以使用与 NDB Cluster 在设置CompressedBackup配置参数为 1 时创建备份时所使用的相同方法来压缩备份文件和解压缩压缩备份文件。要从加密备份中恢复,请使用ndb_restore与选项--decrypt--backup-password。这两个选项是必需的,以及任何其他在未加密情况下恢复相同备份所需的选项。ndb_print_backup_filendbxfrm也可以分别使用-P *password*和--decrypt-password=*password*读取加密文件。在提供密码以及加密或解密选项的所有情况下,密码必须用引号括起来;您可以使用单引号或双引号来界定密码。从 NDB 8.0.24 开始,这里列出的几个NDB程序还支持从标准输入输入密码,类似于在与mysql客户端交互登录时使用--password选项(不包括在命令行中输入密码)的方式:
  • 对于ndb_restorendb_print_backup_file--backup-password-from-stdin选项使得可以以安全的方式输入密码,类似于mysql客户端的--password选项。对于ndb_restore,与--decrypt选项一起使用;对于ndb_print_backup_file,使用该选项代替 -P 选项。
  • 对于ndb_mgm,选项--backup-password-from-stdin--execute "START BACKUP [*选项*]"一起支持从系统 shell 启动集群备份。
  • 两个ndbxfrm选项,--encrypt-password-from-stdin--decrypt-password-from-stdin,在使用该程序加密或解密备份文件时会导致类似的行为。
  • 有关刚列出的程序的更多信息,请参阅其描述。
    从 NDB 8.0.22 开始,还可以通过在集群全局配置文件的 [ndbd default] 部分中设置RequireEncryptedBackup=1来强制备份加密。这样做时,ndb_mgm客户端将拒绝任何未加密的备份尝试。
    从 NDB 8.0.24 开始,您可以通过使用--encrypt-backup启动ndb_mgm来使其在创建备份时使用加密。在这种情况下,如果未提供密码,则在调用START BACKUP时会提示用户输入密码。


MySQL8 中文参考(八十五)(4)https://developer.aliyun.com/article/1566067

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十三)(3)
MySQL8 中文参考(二十三)
54 4
|
5月前
|
存储 缓存 关系型数据库
MySQL8 中文参考(二十一)(5)
MySQL8 中文参考(二十一)
82 3
|
5月前
|
存储 监控 Java
MySQL8 中文参考(二十一)(4)
MySQL8 中文参考(二十一)
140 3
|
5月前
|
存储 安全 关系型数据库
MySQL8 中文参考(二十一)(1)
MySQL8 中文参考(二十一)
49 3
|
5月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十一)(3)
MySQL8 中文参考(二十一)
72 2
|
5月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十一)(2)
MySQL8 中文参考(二十一)
75 2
|
5月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8 中文参考(二十五)(5)
MySQL8 中文参考(二十五)
49 2
|
5月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十四)(1)
MySQL8 中文参考(二十四)
56 2
|
5月前
|
NoSQL 关系型数据库 MySQL
MySQL8 中文参考(二十三)(2)
MySQL8 中文参考(二十三)
62 2
|
5月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十三)(1)
MySQL8 中文参考(二十三)
37 2