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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MySQL8 中文参考(八十五)

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


25.2.5 NDB 8.0 中新增、弃用或移除的选项、变量和参数

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-added-deprecated-removed.html

  • NDB 8.0 中引入的参数
  • NDB 8.0 中弃用的参数
  • NDB 8.0 中移除的参数
  • NDB 8.0 中引入的选项和变量
  • NDB 8.0 中弃用的选项和变量
  • NDB 8.0 中移除的选项和变量

接下来的几节包含有关 NDB 节点配置参数和 NDB 特定的 mysqld 选项和变量的信息,这些信息已经在 NDB 8.0 中新增、弃用或移除。

NDB 8.0 中引入的参数

以下是在 NDB 8.0 中新增的节点配置参数。

  • AllowUnresolvedHostNames: 当为 false(默认)时,管理节点无法解析主机名会导致致命错误;当为 true 时,未解析的主机名仅报告警告。NDB 8.0.22 中添加。
  • AutomaticThreadConfig: 使用自动线程配置;覆盖任何 ThreadConfig 和 MaxNoOfExecutionThreads 的设置,并禁用 ClassicFragmentation。NDB 8.0.23 中添加。
  • ClassicFragmentation: 当为 true 时,使用传统表碎片化;设置为 false 以启用碎片在 LDM 之间的灵活分布。被 AutomaticThreadConfig 禁用。NDB 8.0.23 中添加。
  • DiskDataUsingSameDisk: 如果磁盘数据表空间位于不同物理磁盘上,则设置为 false。NDB 8.0.19 中添加。
  • EnableMultithreadedBackup: 启用多线程备份。NDB 8.0.16 中添加。
  • EncryptedFileSystem: 加密本地检查点和表空间文件。实验性功能;不支持生产环境使用。NDB 8.0.29 中添加。
  • KeepAliveSendInterval: 数据节点之间链接上保持活动信号之间的时间间隔,以毫秒为单位。设置为 0 以禁用。在 NDB 8.0.27 中添加。
  • MaxDiskDataLatency: 允许的磁盘访问平均延迟的最大值(毫秒),在开始中止事务之前。在 NDB 8.0.19 中添加。
  • NodeGroupTransporters: 同一节点组中节点之间使用的传输器数量。在 NDB 8.0.20 中添加。
  • NumCPUs: 指定与 AutomaticThreadConfig 一起使用的 CPU 数量。在 NDB 8.0.23 中添加。
  • PartitionsPerNode: 确定在每个数据节点上创建的表分区数;如果启用了 ClassicFragmentation,则不使用。在 NDB 8.0.23 中添加。
  • PreferIPVersion: 指示 IP 版本 4 或 6 的 DNS 解析器首选项。在 NDB 8.0.26 中添加。
  • RequireEncryptedBackup: 备份是否必须加密(1 = 需要加密,否则为 0)。在 NDB 8.0.22 中添加。
  • ReservedConcurrentIndexOperations: 在一个数据节点上具有专用资源的同时索引操作数量。在 NDB 8.0.16 中添加。
  • ReservedConcurrentOperations: 在一个数据节点上事务协调器中具有专用资源的同时操作数量。在 NDB 8.0.16 中添加。
  • ReservedConcurrentScans: 在一个数据节点上具有专用资源的同时扫描数量。在 NDB 8.0.16 中添加。
  • ReservedConcurrentTransactions: 在一个数据节点上具有专用资源的同时事务数量。在 NDB 8.0.16 中添加。
  • ReservedFiredTriggers: 在一个数据节点上具有专用资源的触发器数量。在 NDB 8.0.16 中添加。
  • ReservedLocalScans: 在一个数据节点上具有专用资源的同时片段扫描数量。在 NDB 8.0.16 中添加。
  • ReservedTransactionBufferMemory: 分配给每个数据节点的键和属性数据的动态缓冲空间(以字节为单位)。在 NDB 8.0.16 中添加。
  • SpinMethod: 确定数据节点使用的旋转方法;详细信息请参阅文档。在 NDB 8.0.20 中添加。
  • TcpSpinTime: 在接收时进入休眠之前旋转的时间。在 NDB 8.0.20 中添加。
  • TransactionMemory: 每个数据节点上为事务分配的内存。在 NDB 8.0.19 中添加。
在 NDB 8.0 中已弃用的参数

在 NDB 8.0 中已弃用以下节点配置参数。

  • BatchSizePerLocalScan: 用于计算具有保持锁的扫描的锁记录数量。在 NDB 8.0.19 中已弃用。
  • MaxAllocate: 不再使用;没有效果。在 NDB 8.0.27 中已弃用。
  • MaxNoOfConcurrentIndexOperations: 在一个数据节点上可以同时执行的索引操作的总数。在 NDB 8.0.19 中已弃用。
  • MaxNoOfConcurrentTransactions: 此数据节点上同时执行的事务数的最大值,可以同时执行的事务总数是此值乘以集群中数据节点的数量。在 NDB 8.0.19 中已弃用。
  • MaxNoOfFiredTriggers: 在一个数据节点上可以同时触发的触发器总数。在 NDB 8.0.19 中已弃用。
  • MaxNoOfLocalOperations: 此数据节点上定义的操作记录的最大数量。在 NDB 8.0.19 中已弃用。
  • MaxNoOfLocalScans: 此数据节点上并行片段扫描的最大数量。在 NDB 8.0.19 中已弃用。
  • ReservedTransactionBufferMemory: 为每个数据节点分配的用于键和属性数据的动态缓冲空间(以字节为单位)。在 NDB 8.0.19 中已弃用。
  • UndoDataBuffer: 未使用;没有效果。在 NDB 8.0.27 中已弃用。
  • UndoIndexBuffer: 未使用;没有效果。在 NDB 8.0.27 中已弃用。
在 NDB 8.0 中删除的参数

在 NDB 8.0 中没有删除任何节点配置参数。

在 NDB 8.0 中引入的选项和变量

在 NDB 8.0 中已添加以下系统变量、状态变量和服务器选项。

  • Ndb_api_adaptive_send_deferred_count_replica: 该副本未实际发送的自适应发送调用次数。NDB 8.0.23 中添加。
  • Ndb_api_adaptive_send_forced_count_replica: 该副本发送的强制发送的自适应发送次数。NDB 8.0.23 中添加。
  • Ndb_api_adaptive_send_unforced_count_replica: 该副本发送的非强制发送的自适应发送次数。NDB 8.0.23 中添加。
  • Ndb_api_bytes_received_count_replica: 该副本从数据节点接收的数据量(以字节为单位)。NDB 8.0.23 中添加。
  • Ndb_api_bytes_sent_count_replica: 该副本发送到数据节点的数据量(以字节为单位)。NDB 8.0.23 中添加。
  • Ndb_api_pk_op_count_replica: 该副本基于或使用主键��操作次数。NDB 8.0.23 中添加。
  • Ndb_api_pruned_scan_count_replica: 该副本将扫描修剪为一个分区的次数。NDB 8.0.23 中添加。
  • Ndb_api_range_scan_count_replica: 该副本启动的范围扫描次数。NDB 8.0.23 中添加。
  • Ndb_api_read_row_count_replica: 该副本读取的总行数。NDB 8.0.23 中添加。
  • Ndb_api_scan_batch_count_replica: 该副本接收的行批次数。NDB 8.0.23 中添加。
  • Ndb_api_table_scan_count_replica: 该副本启动的表扫描次数,包括内部表的扫描。NDB 8.0.23 中添加。
  • Ndb_api_trans_abort_count_replica: 该副本中事务被中止的次数。NDB 8.0.23 中添加。
  • Ndb_api_trans_close_count_replica: 该副本中事务被中止的次数(可能大于 TransCommitCount 和 TransAbortCount 之和)。NDB 8.0.23 中添加。
  • Ndb_api_trans_commit_count_replica: 该副本提交的事务数。NDB 8.0.23 中添加。
  • Ndb_api_trans_local_read_row_count_replica: 此副本已读取的总行数。在 NDB 8.0.23 中添加。
  • Ndb_api_trans_start_count_replica: 此副本启动的事务次数。在 NDB 8.0.23 中添加。
  • Ndb_api_uk_op_count_replica: 此副本基于或使用唯一键的操作次数。在 NDB 8.0.23 中添加。
  • Ndb_api_wait_exec_complete_count_replica: 等待此副本操作执行完成而被阻塞的线程次数。在 NDB 8.0.23 中添加。
  • Ndb_api_wait_meta_request_count_replica: 等待此副本通过元数据信号而被阻塞的线程次数。在 NDB 8.0.23 中添加。
  • Ndb_api_wait_nanos_count_replica: 此副本等待数据节点发出某种类型信号的总时间(以纳秒为单位)。在 NDB 8.0.23 中添加。
  • Ndb_api_wait_scan_result_count_replica: 等待此副本通过扫描信号而被阻塞的线程次数。在 NDB 8.0.23 中添加。
  • Ndb_config_generation: 集群当前配置的生成编号。在 NDB 8.0.24 中添加。
  • Ndb_conflict_fn_max_del_win_ins: 基于 NDB$MAX_DEL_WIN_INS()结果的冲突解决机制在插入操作中被应用的次数。在 NDB 8.0.30 中添加。
  • Ndb_conflict_fn_max_ins: "greater timestamp wins"冲突解决机制在插入操作中被应用的次数。在 NDB 8.0.30 中添加。
  • Ndb_metadata_blacklist_size: NDB 二进制日志线程未能同步的 NDB 元数据对象数量;在 NDB 8.0.22 中更名为 Ndb_metadata_excluded_count。在 NDB 8.0.18 中添加。
  • Ndb_metadata_detected_count: NDB 元数据更改监视线程检测到更改的次数。在 NDB 8.0.16 中添加。
  • Ndb_metadata_excluded_count: NDB 二进制日志线程未能同步的 NDB 元数据对象数量。在 NDB 8.0.22 中添加。
  • Ndb_metadata_synced_count: 已同步的 NDB 元数据对象数量。在 NDB 8.0.18 中添加。
  • Ndb_trans_hint_count_session: 在此会话中启动的使用提示的事务数量。在 NDB 8.0.17 中添加。
  • ndb-applier-allow-skip-epoch: 允许复制应用程序跳过时代。在 NDB 8.0.28 中添加。
  • ndb-log-fail-terminate: 如果无法完全记录所有找到的行事件,则终止 mysqld 进程。在 NDB 8.0.21 中添加。
  • ndb-log-transaction-dependency: 使二进制日志线程为写入二进制日志的每个事务计算事务依赖关系。在 NDB 8.0.33 中添加。
  • ndb-schema-dist-timeout: 在检测到模式分发超时之前等待多长时间。在 NDB 8.0.17 中添加。
  • ndb_conflict_role: 副本在冲突检测和解决中扮��的角色。值为 PRIMARY、SECONDARY、PASS 或 NONE(默认)。只能在停止复制 SQL 线程时更改。有关更多信息,请参阅文档。在 NDB 8.0.23 中添加。
  • ndb_dbg_check_shares: 检查任何残留的共享(仅限调试构建)。在 NDB 8.0.13 中添加。
  • ndb_log_transaction_compression: 是否压缩 NDB 二进制日志;也可以通过启用–binlog-transaction-compression 选项在启动时启用。在 NDB 8.0.31 中添加。
  • ndb_log_transaction_compression_level_zstd: 写入压缩事务到 NDB 二进制日志时要使用的 ZSTD 压缩级别。在 NDB 8.0.31 中添加。
  • ndb_metadata_check: 启用自动检测 NDB 元数据与 MySQL 数据字典的更改;默认启用。在 NDB 8.0.16 中添加。
  • ndb_metadata_check_interval: 每隔多少秒执行一次检查 NDB 元数据与 MySQL 数据字典的更改。在 NDB 8.0.16 中添加。
  • ndb_metadata_sync: 触发立即同步 NDB 字典和 MySQL 数据字典之间的所有更改;导致忽略 ndb_metadata_check 和 ndb_metadata_check_interval 值。同步完成后重置为 false。在 NDB 8.0.19 中添加。
  • ndb_replica_batch_size: 副本应用程序的批处理大小(以字节为单位)。在 NDB 8.0.30 中添加。
  • ndb_schema_dist_lock_wait_timeout: 在模式分发期间等待锁定的时间,超时后返回错误。在 NDB 8.0.18 中添加。
  • ndb_schema_dist_timeout: 在模式分发期间检测超时之前等待的时间。在 NDB 8.0.16 中添加。
  • ndb_schema_dist_upgrade_allowed: 当连接到 NDB 时允许模式分发表升级。在 NDB 8.0.17 中添加。
  • ndbinfo: 启用 ndbinfo 插件(如果支持)。在 NDB 8.0.13 中添加。
  • replica_allow_batching: 为副本打开或关闭更新批处���。在 NDB 8.0.26 中添加。
在 NDB 8.0 中已弃用的选项和变量

以下系统变量、状态变量和选项已在 NDB 8.0 中弃用。

  • Ndb_api_adaptive_send_deferred_count_slave: 此副本未实际发送的自适应发送调用次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_adaptive_send_forced_count_slave: 此副本发送的强制发送自适应发送次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_adaptive_send_unforced_count_slave: 此副本发送的非强制发送自适应发送次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_bytes_received_count_slave: 此副本从数据节点接收的数据量(以字节为单位)。在 NDB 8.0.23 中已弃用。
  • Ndb_api_bytes_sent_count_slave: 此副本发送到数据节点的数据量(以字节为单位)。在 NDB 8.0.23 中已弃用。
  • Ndb_api_pk_op_count_slave: 此副本基于或使用主键的操作次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_pruned_scan_count_slave: 此副本已被修剪到一个分区的扫描次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_range_scan_count_slave: 此副本启动的范围扫描次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_read_row_count_slave: 该副本已读取的总行数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_scan_batch_count_slave: 该副本接收的行批次数量。在 NDB 8.0.23 中已弃用。
  • Ndb_api_table_scan_count_slave: 该副本开始的表扫描次数,包括内部表的扫描。在 NDB 8.0.23 中已弃用。
  • Ndb_api_trans_abort_count_slave: 该副本中被中止的事务数量。在 NDB 8.0.23 中已弃用。
  • Ndb_api_trans_close_count_slave: 该副本中被中止的事务数量(可能大于 TransCommitCount 和 TransAbortCount 之和)。在 NDB 8.0.23 中已弃用。
  • Ndb_api_trans_commit_count_slave: 该副本提交的事务数量。在 NDB 8.0.23 中已弃用。
  • Ndb_api_trans_local_read_row_count_slave: 该副本已读取的总行数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_trans_start_count_slave: 该副本开始的事务数量。在 NDB 8.0.23 中已弃用。
  • Ndb_api_uk_op_count_slave: 该副本基于或使用唯一键的操作次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_wait_exec_complete_count_slave: 该副本中线程被阻塞等待操作执行完成的次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_wait_meta_request_count_slave: 该副本中线程被阻塞等待基于元数据的信号的次数。在 NDB 8.0.23 中已弃用。
  • Ndb_api_wait_nanos_count_slave: 该副本等待来自数据节点某种类型信号的总时间(以纳秒为单位)。在 NDB 8.0.23 中已弃用。
  • Ndb_api_wait_scan_result_count_slave: 该副本中线程被阻塞等待基于扫描的信号的次数。在 NDB 8.0.23 中已弃用。
  • Ndb_metadata_blacklist_size: NDB 二进制日志线程未能同步的 NDB 元数据对象数量;在 NDB 8.0.22 中更名为 Ndb_metadata_excluded_count。在 NDB 8.0.21 中已弃用。
  • Ndb_replica_max_replicated_epoch: 此副本上最近提交的 NDB 时代。当此值大于或等于 Ndb_conflict_last_conflict_epoch 时,尚未检测到冲突。在 NDB 8.0.23 中已弃用。
  • ndb_slave_conflict_role: 副本在冲突检测和解决中扮演的角色。值为 PRIMARY、SECONDARY、PASS 或 NONE(默认)。只能在停止复制 SQL 线程时更改。有关更多信息,请参阅文档。在 NDB 8.0.23 中已弃用。
  • slave_allow_batching: 打开或关闭副本的更新批处理。在 NDB 8.0.26 中已弃用。
在 NDB 8.0 中移除的选项和变量

以下系统变量、状态变量和选项已在 NDB 8.0 中移除。

  • Ndb_metadata_blacklist_size: NDB 二进制日志线程未能同步的 NDB 元数据对象数量;在 NDB 8.0.22 中更名为 Ndb_metadata_excluded_count。在 NDB 8.0.22 中已移除。

25.2.6 MySQL Server 使用 InnoDB 与 NDB Cluster 比较

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-compared.html

25.2.6.1 NDB 和 InnoDB 存储引擎之间的差异

25.2.6.2 NDB 和 InnoDB 工作负载

25.2.6.3 NDB 和 InnoDB 特性使用总结

MySQL Server 提供了多种存储引擎选择。由于 NDBInnoDB 都可以作为 MySQL 的事务性存储引擎,因此 MySQL Server 的用户有时会对 NDB Cluster 感兴趣。他们将 NDB 视为 MySQL 8.0 默认的 InnoDB 存储引擎的可能替代品或升级。虽然 NDBInnoDB 共享一些共同特性,但在架构和实现上存在差异,因此一些现有的 MySQL Server 应用程序和使用场景可能非常适合 NDB Cluster,但并非所有情况都适用。

在本节中,我们讨论并比较了 NDB 8.0 使用的 NDB 存储引擎与 MySQL 8.0 中使用的 InnoDB 的一些特性。接下来的几节提供了技术比较。在许多情况下,关于何时何地使用 NDB Cluster 必须根据具体情况做出决策,考虑所有因素。虽然本文档无法为每种可能的使用场景提供具体细节,但我们也尝试就一些常见应用类型相对适用于 NDB 而非 InnoDB 后端提供一些非常一般性的指导。

NDB Cluster 8.0 使用基于 MySQL 8.0 的 mysqld,包括对 InnoDB 1.1 的支持。虽然可以在 NDB Cluster 中使用 InnoDB 表,但这些表不是集群化的。不可能使用 NDB Cluster 8.0 发行版中的程序或库与 MySQL Server 8.0,或者反过来。

尽管一些常见的商业应用程序可以在 NDB Cluster 或 MySQL 服务器上运行(最有可能使用InnoDB存储引擎),但存在一些重要的架构和实现差异。  第 25.2.6.1 节,“NDB 和 InnoDB  存储引擎之间的差异”提供了这些差异的摘要。由于这些差异,一些使用场景显然更适合其中一个引擎;请参见第 25.2.6.2 节,“NDB 和  InnoDB 工作负载”。这反过来影响了更适合与NDBInnoDB一起使用的应用程序类型。请参见第 25.2.6.3 节,“NDB 和 InnoDB 特性使用摘要”,以比较它们在常见类型的数据库应用程序中的相对适用性。

有关NDBMEMORY存储引擎的相对特性的信息,请参见何时使用 MEMORY 或 NDB Cluster。

有关 MySQL 存储引擎的其他信息,请参见第十八章,替代存储引擎

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndb-innodb-engines.html

25.2.6.1 NDB 和 InnoDB 存储引擎之间的差异

NDB 存储引擎采用分布式、无共享架构实现,这导致它在许多方面的行为与 InnoDB 有所不同。对于不习惯使用 NDB 的人来说,由于其分布式特性涉及事务、外键、表限制和其他特性,可能会出现意外行为。这些情况如下表所示:

表 25.2 InnoDB 和 NDB 存储引擎之间的差异

特性 InnoDB(MySQL 8.0) NDB 8.0
MySQL 服务器版本 8.0 8.0
InnoDB 版本 InnoDB 8.0.36 InnoDB 8.0.36
NDB Cluster 版本 不适用 NDB 8.0.35/8.0.35
存储限制 64TB 128TB
外键
事务 所有标准类型 READ COMMITTED
MVCC
数据压缩 否(NDB 检查点和备份文件可以进行压缩)
大型行支持(> 14K) VARBINARYVARCHARBLOBTEXT 列支持 仅对 BLOBTEXT 列支持(使用这些类型存储大量数据可能降低 NDB 性能)
复制支持 使用 MySQL 复制的异步和半同步复制;MySQL Group Replication NDB Cluster 内的自动同步复制;NDB 集群之间的异步复制,使用 MySQL 复制(不支持半同步复制)
读操作的扩展 是(MySQL 复制) 是(NDB Cluster 中的自动分区;NDB Cluster 复制)
写操作的扩展 需要应用级分区(分片) 是(NDB Cluster 中的自动分区对应用程序透明)
高可用性(HA) 内置,来自 InnoDB 集群 是(设计用于 99.999% 的正常运行时间)
节点故障恢复和故障转移 来自 MySQL Group Replication 自动(NDB 架构的关键元素)
节点故障恢复时间 30 秒或更长 通常< 1 秒
实时性能
内存表 是(一些数据可以选择性地存储在磁盘上;内存和磁盘数据存储都是持久的)
NoSQL 访问存储引擎 是(包括 Memcached、Node.js/JavaScript、Java、JPA、C++和 HTTP/REST 等多个 API)
并发和并行写入 最多 48 个写入者,优化并发写入
冲突检测和解决(多源) 是(MySQL 集群复制)
哈希索引
节点在线添加 使用 MySQL 集群复制的读/写副本 是(所有节点类型)
在线升级 是(使用复制)
在线模式修改 是,作为 MySQL 8.0 的一部分
特性 InnoDB(MySQL 8.0) NDB 8.0

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndb-innodb-workloads.html

25.2.6.2 NDB 和 InnoDB 工作负载

NDB Cluster  具有一系列独特属性,使其非常适合提供需要高可用性、快速故障转移、高吞吐量和低延迟的应用程序。由于其分布式架构和多节点实现,NDB Cluster  还具有特定的约束条件,可能会导致某些工作负载性能不佳。关于一些常见类型的基于数据库驱动的应用程序工作负载,NDBInnoDB存储引擎之间行为上的一些主要差异显示在以下表格中:

表 25.3 InnoDB 和 NDB 存储引擎之间的差异,常见类型的数据驱动应用程序工作负载。

工作负载 InnoDB NDB Cluster(NDB
高交易量 OLTP 应用程序
DSS 应用程序(数据集市、分析) 有限(跨 OLTP 数据集的连接操作不超过 3TB)
自定义应用程序
打包应用程序 有限(应主要使用主键访问);NDB Cluster 8.0 支持外键
网络电信应用(HLR、HSS、SDP)
会话管理和缓存
电子商务应用程序
用户配置文件管理,AAA 协议

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-ndb-innodb-usage.html

25.2.6.3 NDB 和 InnoDB 特性使用摘要

当将应用程序特性要求与InnoDBNDB的能力进行比较时,有些特性显然与一个存储引擎更兼容。

下表列出了根据每个特性通常更适合的存储引擎支持的应用程序特性。

表 25.4 根据每个特性通常更适合的存储引擎支持的应用程序特性

InnoDB 的首选应用程序要求 NDB 的首选应用程序要求

|

  • 外键
    注意
    NDB Cluster 8.0 支持外键
  • 完整表扫描
  • 非常大的数据库、行或事务
  • 除了READ COMMITTED之外的事务

|

  • 写扩展
  • 99.999% 的正常运行时间
  • 节点的在线添加和在线模式操作
  • 多个 SQL 和 NoSQL API(参见 NDB 集群 API:概述和概念)
  • 实时性能
  • 有限使用BLOB
  • 支持外键,尽管它们的使用可能会对高吞吐量的性能产生影响

|

25.2.7 NDB Cluster 的已知限制

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations.html

25.2.7.1 NDB Cluster 中与 SQL 语法不符的限制

25.2.7.2 NDB Cluster 与标准 MySQL 限制的限制和差异

25.2.7.3 NDB Cluster 中与事务处理相关的限制

25.2.7.4 NDB Cluster 错误处理

25.2.7.5 NDB Cluster 中与数据库对象相关的限制

25.2.7.6 NDB Cluster 中不支持或缺失的功能

25.2.7.7 NDB Cluster 中与性能相关的限制

25.2.7.8 仅限于 NDB Cluster 的问���

25.2.7.9 NDB Cluster 磁盘数据存储相关的限制

25.2.7.10 与多个 NDB Cluster 节点相关的限制

25.2.7.11 在 NDB Cluster 8.0 中已解决的以前的 NDB Cluster 问题

在接下来的章节中,我们将讨论当前 NDB Cluster 版本中已知的限制,与使用 MyISAMInnoDB 存储引擎时可用功能的比较。如果您在 MySQL bugs 数据库的“Cluster”类别中检查 bugs.mysql.com,您可以找到以下类别下的已知 bug:“MySQL Server:”,我们打算在即将发布的 NDB Cluster 版本中进行修正:

  • NDB Cluster
  • Cluster 直接 API (NDBAPI)
  • Cluster 磁盘数据
  • Cluster 复制
  • ClusterJ

此信息旨在完整地描述刚刚设置的条件。您可以按照 第 1.5 节, “如何报告错误或问题” 中给出的说明,将您遇到的任何差异报告给 MySQL bugs 数据库。我们不打算在 NDB Cluster 8.0 中修复的任何问题都将添加到列表中。

查看 第 25.2.7.11 节, “在 NDB Cluster 8.0 中已解决的以前的 NDB Cluster 问题”,列出了在 NDB Cluster 8.0 中已解决的早期版本中的问题。

注意

NDB Cluster 复制特定的限制和其他问题在 第 25.7.3 节, “NDB Cluster 复制中已知问题” 中有描述。

原文:dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-syntax.html

25.2.7.1 NDB Cluster 中与 SQL 语法不符

与某些 MySQL 功能相关的某些 SQL 语句在与NDB表一起使用时会产生错误,如下列表所述:

  • 临时表。 不支持临时表。尝试创建使用NDB存储引擎的临时表或更改现有临时表以使用NDB都会失败,并显示错误消息表存储引擎’ndbcluster’不支持创建选项’TEMPORARY’。
  • NDB 表中的索引和键。 NDB Cluster 表上的键和索引受以下限制:
  • 列宽。 尝试在宽度大于 3072 字节的NDB表列上创建索引会成功,但实际上只有前 3072 字节用于索引。在这种情况下,会发出警告 Specified key was too long; max key length is 3072 bytes,并且SHOW CREATE TABLE语句显示索引的长度为 3072。
  • TEXT 和 BLOB 列。 你不能在使用NDB表列的TEXTBLOB数据类型上创建索引。
  • FULLTEXT 索引。 NDB存储引擎不支持FULLTEXT索引,这仅适用于MyISAMInnoDB表。
    但是,你可以在NDB表的VARCHAR列上创建索引。
  • 使用 HASH 键和 NULL。 在唯一键和主键中使用可空列意味着使用这些列的查询将被处理为全表扫描。要解决此问题,请使列NOT NULL,或重新创建索引而不使用USING HASH选项。
  • 前缀。 没有前缀索引;只能对整个列进行索引。(NDB列索引的大小始终与列的宽度相同,以字节为单位,最多为 3072 字节,如本节前面描述的那样。另请参阅 Section 25.2.7.6, “Unsupported or Missing Features in NDB Cluster”,获取更多信息。)
  • BIT 列。 BIT列不能作为主键、唯一键或索引,也不能成为复合主键、唯一键或索引的一部分。
  • AUTO_INCREMENT 列。 与其他 MySQL 存储引擎一样,NDB存储引擎每个表最多只能处理一个AUTO_INCREMENT列,并且这个列必须被索引。然而,在没有显式主键的 NDB 表中,一个AUTO_INCREMENT列会被自动定义并用作“隐藏”主键。因此,你不能创建一个具有AUTO_INCREMENT列但没有显式主键的NDB表。
    下面的CREATE TABLE语句不起作用,如下所示:
# No index on AUTO_INCREMENT column; table has no primary key
# Raises ER_WRONG_AUTO_KEY
mysql> CREATE TABLE n (
 ->     a INT,
 ->     b INT AUTO_INCREMENT
 ->     )
 -> ENGINE=NDB;
ERROR 1075 (42000): Incorrect table definition; there can be only one auto
column and it must be defined as a key 
# Index on AUTO_INCREMENT column; table has no primary key
# Raises NDB error 4335
mysql> CREATE TABLE n (
 ->     a INT,
 ->     b INT AUTO_INCREMENT,
 ->     KEY k (b)
 ->     )
 -> ENGINE=NDB;
ERROR 1296 (HY000): Got error 4335 'Only one autoincrement column allowed per
table. Having a table without primary key uses an autoincr' from NDBCLUSTER
  • 下面的语句创建了一个具有主键、一个AUTO_INCREMENT列以及对该列的索引的表,并成功:
# Index on AUTO_INCREMENT column; table has a primary key
mysql> CREATE TABLE n (
 ->     a INT PRIMARY KEY,
 ->     b INT AUTO_INCREMENT,
 ->     KEY k (b)
 ->     )
 -> ENGINE=NDB;
Query OK, 0 rows affected (0.38 sec)
  • 外键的限制。 NDB 8.0 中对外键约束的支持与InnoDB提供的相似,但受以下限制:
  • 每个作为外键引用的列都需要一个显式的唯一键,如果它不是表的主键。
  • 当引用是指向父表的主键时,不支持ON UPDATE CASCADE
    这是因为对主键的更新被实现为删除旧行(包含旧主键的行)以及插入新行(带有新主键)。这对于NDB内核来说是不可见的,它将这两行视为相同,因此无法知道应该级联执行此更新。
  • 当子表包含一个或多个TEXTBLOB类型的列时,也不支持ON DELETE CASCADE。(Bug #89511, Bug #27484882)
  • 不支持SET DEFAULT。(InnoDB也不支持。)
  • NO ACTION关键字被接受但被视为RESTRICTNO ACTION是标准 SQL 关键字,在 MySQL 8.0 中是默认的。(与InnoDB相同。)
  • 在早期版本的  NDB Cluster  中,当创建一个具有外键引用另一张表中索引的表时,有时似乎可以创建外键,即使索引中列的顺序不匹配,这是因为并不总是返回适当的错误。对于这个问题的部分修复改进了内部使用的错误以在大多数情况下工作;然而,在父索引是唯一索引的情况下,仍然可能发生这种情况。(Bug  #18094360)
  • 有关更多信息,请参见第 15.1.20.5 节,“外键约束”和第 1.6.3.2 节,“外键约束”。
  • NDB 集群和几何数据类型。 几何数据类型(WKTWKB)支持NDB表。但是,不支持空间索引。
  • 字符集和二进制日志文件。 目前,ndb_apply_statusndb_binlog_index表使用latin1(ASCII)字符集创建。由于二进制日志的名称记录在此表中,因此使用非拉丁字符命名的二进制日志文件在这些表中无法正确引用。这是一个已知问题,我们正在努力解决。(Bug #50226)
    要解决此问题,请在命名二进制日志文件或设置--basedir--log-bin--log-bin-index选项时仅使用 Latin-1 字符。
  • 使用用户定义的分区创建 NDB 表。 NDB 集群中对用户定义的分区的支持仅限于[LINEAR] KEY分区。在CREATE TABLE语句中使用ENGINE=NDBENGINE=NDBCLUSTER与任何其他分区类型会导致错误。可以覆盖此限制,但不支持在生产环境中使用。有关详细信息,请参见用户定义的分区和 NDB 存储引擎(NDB 集群)")。默认分区方案。 所有 NDB 集群表默认通过使用表的主键作为分区键进行KEY分区。如果未为表明确设置主键,则由NDB存储引擎自动创建的“隐藏”主键将被使用。有关这些和相关问题的更多讨论,请参见第 26.2.5 节,“KEY 分区”。CREATE TABLEALTER TABLE语句如果导致用户分区的NDBCLUSTER表不满足以下两个要求中的任何一个或两个都不允许,并将失败并显示错误:
  1. 表必须有显式的主键。
  2. 表中分区表达式中列出的所有列必须是主键的一部分。
  • 例外。 如果使用空列列表(即使用PARTITION BY [LINEAR] KEY())创建用户分区的NDBCLUSTER表,则不需要显式主键。
    NDBCLUSTER 表的最大分区数。 当使用用户定义的分区时,NDBCLUSTER表可以定义的最大分区数为每个节点组 8 个。(有关 NDB Cluster 节点组的更多信息,请参见第 25.2.2 节,“NDB Cluster 节点、节点组、片段副本和分区”)。
    不支持 DROP PARTITION。 无法使用ALTER TABLE ... DROP PARTITIONNDB表中删除分区。对于 NDB 表,支持其他分区扩展——ADD PARTITIONREORGANIZE PARTITIONCOALESCE PARTITION,但使用复制,因此不是优化的。请参见第 26.3.1 节,“RANGE 和 LIST 分区的管理”和第 15.1.9 节,“ALTER TABLE 语句”。
    分区选择。 不支持为NDB表选择分区。有关更多信息,请参见第 26.5 节,“分区选择”。
  • JSON 数据类型。 MySQL 中的JSON数据类型在 NDB 8.0 中的mysqld中支持NDB表。一个NDB表最多可以有 3 个JSON列。NDB API 没有专门用于处理JSON数据的功能,它将其简单地视为BLOB数据。处理数据为JSON必须由应用程序执行。
这是因为对主键的更新被实现为删除旧行(包含旧主键的行)以及插入新行(带有新主键)。这对于`NDB`内核来说是不可见的,它将这两行视为相同,因此无法知道应该级联执行此更新。
  • 当子表包含一个或多个TEXTBLOB类型的列时,也不支持ON DELETE CASCADE。(Bug #89511, Bug #27484882)
  • 不支持SET DEFAULT。(InnoDB也不支持。)
  • NO ACTION关键字被接受但被视为RESTRICTNO ACTION是标准 SQL 关键字,在 MySQL 8.0 中是默认的。(与InnoDB相同。)
  • 在早期版本的  NDB Cluster  中,当创建一个具有外键引用另一张表中索引的表时,有时似乎可以创建外键,即使索引中列的顺序不匹配,这是因为并不总是返回适当的错误。对于这个问题的部分修复改进了内部使用的错误以在大多数情况下工作;然而,在父索引是唯一索引的情况下,仍然可能发生这种情况。(Bug  #18094360)
  • 有关更多信息,请参见第 15.1.20.5 节,“外键约束”和第 1.6.3.2 节,“外键约束”。
  • NDB 集群和几何数据类型。 几何数据类型(WKTWKB)支持NDB表。但是,不支持空间索引。
  • 字符集和二进制日志文件。 目前,ndb_apply_statusndb_binlog_index表使用latin1(ASCII)字符集创建。由于二进制日志的名称记录在此表中,因此使用非拉丁字符命名的二进制日志文件在这些表中无法正确引用。这是一个已知问题,我们正在努力解决。(Bug #50226)
    要解决此问题,请在命名二进制日志文件或设置--basedir--log-bin--log-bin-index选项时仅使用 Latin-1 字符。
  • 使用用户定义的分区创建 NDB 表。 NDB 集群中对用户定义的分区的支持仅限于[LINEAR] KEY分区。在CREATE TABLE语句中使用ENGINE=NDBENGINE=NDBCLUSTER与任何其他分区类型会导致错误。可以覆盖此限制,但不支持在生产环境中使用。有关详细信息,请参见用户定义的分区和 NDB 存储引擎(NDB 集群)")。默认分区方案。 所有 NDB 集群表默认通过使用表的主键作为分区键进行KEY分区。如果未为表明确设置主键,则由NDB存储引擎自动创建的“隐藏”主键将被使用。有关这些和相关问题的更多讨论,请参见第 26.2.5 节,“KEY 分区”。CREATE TABLEALTER TABLE语句如果导致用户分区的NDBCLUSTER表不满足以下两个要求中的任何一个或两个都不允许,并将失败并显示错误:
  1. 表必须有显式的主键。
  2. 表中分区表达式中列出的所有列必须是主键的一部分。
  • 例外。 如果使用空列列表(即使用PARTITION BY [LINEAR] KEY())创建用户分区的NDBCLUSTER表,则不需要显式主键。
    NDBCLUSTER 表的最大分区数。 当使用用户定义的分区时,NDBCLUSTER表可以定义的最大分区数为每个节点组 8 个。(有关 NDB Cluster 节点组的更多信息,请参见第 25.2.2 节,“NDB Cluster 节点、节点组、片段副本和分区”)。
    不支持 DROP PARTITION。 无法使用ALTER TABLE ... DROP PARTITIONNDB表中删除分区。对于 NDB 表,支持其他分区扩展——ADD PARTITIONREORGANIZE PARTITIONCOALESCE PARTITION,但使用复制,因此不是优化的。请参见第 26.3.1 节,“RANGE 和 LIST 分区的管理”和第 15.1.9 节,“ALTER TABLE 语句”。
    分区选择。 不支持为NDB表选择分区。有关更多信息,请参见第 26.5 节,“分区选择”。
  • JSON 数据类型。 MySQL 中的JSON数据类型在 NDB 8.0 中的mysqld中支持NDB表。
    一个NDB表最多可以有 3 个JSON列。
    NDB API 没有专门用于处理JSON数据的功能,它将其简单地视为BLOB数据。处理数据为JSON必须由应用程序执行。
相关实践学习
如何快速连接云数据库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