MySQL8 中文参考(八十八)(2)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介: MySQL8 中文参考(八十八)

MySQL8 中文参考(八十八)(1)https://developer.aliyun.com/article/1565892


  • 通过使用 EXPLAIN 可以查看给定连接是否可以被推送;当连接可以被推送时,可以在输出的 Extra 列中看到对 pushed join 的引用,如下例所示:
mysql> EXPLAIN
 ->     SELECT e.first_name, e.last_name, t.title, d.dept_name
 ->         FROM employees e
 ->         JOIN dept_emp de ON e.emp_no=de.emp_no
 ->         JOIN departments d ON d.dept_no=de.dept_no
 ->         JOIN titles t ON e.emp_no=t.emp_no\G
*************************** 1\. row ***************************
           id: 1
  select_type: SIMPLE
        table: d
         type: ALL
possible_keys: PRIMARY
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 9
        Extra: Parent of 4 pushed join@1
*************************** 2\. row ***************************
           id: 1
  select_type: SIMPLE
        table: de
         type: ref
possible_keys: PRIMARY,emp_no,dept_no
          key: dept_no
      key_len: 4
          ref: employees.d.dept_no
         rows: 5305
        Extra: Child of 'd' in pushed join@1
*************************** 3\. row ***************************
           id: 1
  select_type: SIMPLE
        table: e
         type: eq_ref
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: employees.de.emp_no
         rows: 1
        Extra: Child of 'de' in pushed join@1
*************************** 4\. row ***************************
           id: 1
  select_type: SIMPLE
        table: t
         type: ref
possible_keys: PRIMARY,emp_no
          key: emp_no
      key_len: 4
          ref: employees.de.emp_no
         rows: 19
        Extra: Child of 'e' in pushed join@1 4 rows in set (0.00 sec)
  • 注意
    如果内连接的子表通过 ref 连接,并且结果按排序索引排序或分组,该索引无法提供排序行,这将强制写入到排序临时文件。
    还有两个关于推送连接性能的额外信息来源:
  1. 状态变量 Ndb_pushed_queries_definedNdb_pushed_queries_droppedNdb_pushed_queries_executedNdb_pushed_reads
  2. 属于 DBSPJ 内核块的 ndbinfo.counters 表中的计数器。
  • ndb_log_apply_status
命令行格式 --ndb-log-apply-status[={OFF|ON}]
系统变量 ndb_log_apply_status
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 OFF
  • 一个只读变量,显示服务器是否使用 --ndb-log-apply-status 选项启动。
  • ndb_log_bin
命令行格式 --ndb-log-bin[={OFF|ON}]
系统变量 ndb_log_bin
范围 全局,会话
动态
SET_VAR 提示适用
类型 布尔值
默认值(≥ 8.0.16-ndb-8.0.16) OFF
默认值(≤ 8.0.15-ndb-8.0.15) ON
  • 导致NDB表的更新写入二进制日志。如果服务器尚未使用log_bin启用二进制日志记录,则此变量的设置不起作用。在 NDB 8.0 中,ndb_log_bin默认为 0(FALSE)。
  • ndb_log_binlog_index
命令行格式 --ndb-log-binlog-index[={OFF|ON}]
系统变量 ndb_log_binlog_index
作用域 全局
动态
SET_VAR提示适用
类型 布尔值
默认值 ON
  • 导致将时代映射到二进制日志中的位置插入ndb_binlog_index表中。如果服务器尚未使用log_bin启用二进制日志记录,则设置此变量不起作用。(此外,ndb_log_bin不能被禁用。)ndb_log_binlog_index默认为1ON);通常,在生产环境中永远不需要更改此值。
  • ndb_log_empty_epochs
命令行格式 --ndb-log-empty-epochs[={OFF|ON}]
系统变量 ndb_log_empty_epochs
作用域 全局
动态
SET_VAR提示适用
类型 布尔值
默认值 OFF
  • 当此变量设置为 0 时,没有更改的时代事务不会写入二进制日志,尽管在ndb_binlog_index中仍会为空时代写入一行。
  • ndb_log_empty_update
命令行格式 --ndb-log-empty-update[={OFF|ON}]
系统变量 ndb_log_empty_update
作用域 全局
动态
SET_VAR提示适用
类型 布尔值
默认值 OFF
  • 当此变量设置为ON1)时,即使启用了log_replica_updateslog_slave_updates,没有更改的更新事务也会写入二进制日志。
  • ndb_log_exclusive_reads
命令行格式 --ndb-log-exclusive-reads[={OFF|ON}]
系统变量 ndb_log_exclusive_reads
范围 全局,会话
动态
SET_VAR 提示适用
类型 布尔
默认值 0
  • 此变量确定是否使用独占锁记录主键读取,从而允许基于读取冲突的 NDB 集群复制冲突检测和解决。要启用这些锁,请将 ndb_log_exclusive_reads 的值设置为 1。默认情况下,禁用此类锁定的值为 0。
    有关更多信息,请参见 读取冲突检测和解决。
  • ndb_log_orig
命令行格式 --ndb-log-orig[={OFF|ON}]
系统变量 ndb_log_orig
范围 全局
动态
SET_VAR 提示适用
类型 布尔
默认值 OFF
  • 显示原始服务器 ID 和时代是否记录在 ndb_binlog_index 表中。使用 --ndb-log-orig 服务器选项设置。
  • ndb_log_transaction_id
系统变量 ndb_log_transaction_id
范围 全局
动态
SET_VAR 提示适用
类型 布尔
默认值 OFF
  • 此只读的布尔系统变量显示一个副本 mysqld 是否在二进制日志中写入 NDB 事务 ID(使用 NDB$EPOCH_TRANS() 冲突检测来使用“主动-主动”NDB 集群复制所需)。要更改设置,请使用 --ndb-log-transaction-id 选项。
    ndb_log_transaction_id 在主流 MySQL Server 8.0 中不受支持。
    有关更多信息,请参见 第 25.7.12 节,“NDB 集群复制冲突解决”。
  • ndb_log_transaction_compression
命令行格式 --ndb-log-transaction-compression
引入 8.0.31-ndb-8.0.31
系统变量 ndb_log_transaction_compression
范围 全局
动态
SET_VAR提示适用
类型 布尔值
默认值 OFF
  • 副本mysqld是否在二进制日志中写入压缩事务;仅在mysqld编译支持NDB时存在。
    使用--binlog-transaction-compression启动 MySQL 服务器会强制启用此变量(ON),这将覆盖在命令行或my.cnf文件中设置的--ndb-log-transaction-compression,如下所示:
$> mysqld_safe --ndbcluster --ndb-connectstring=127.0.0.1 \
  --binlog-transaction-compression=ON --ndb-log-transaction-compression=OFF &
[1] 27667
$> 2022-07-07T12:29:20.459937Z mysqld_safe Logging to '/usr/local/mysql/data/myhost.err'.
2022-07-07T12:29:20.509873Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
$> mysql -e 'SHOW VARIABLES LIKE "%transaction_compression%"'
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| binlog_transaction_compression             | ON    |
| binlog_transaction_compression_level_zstd  | 3     |
| ndb_log_transaction_compression            | ON    |
| ndb_log_transaction_compression_level_zstd | 3     |
+--------------------------------------------+-------+
  • 要仅为NDB表禁用二进制日志事务压缩,请在启动mysqld后在mysql或其他客户端会话中将ndb_log_transaction_compression系统变量设置为OFF
    在启动后设置binlog_transaction_compression变量对ndb_log_transaction_compression的值没有影响。
    有关二进制日志事务压缩的更多信息,例如哪些事件被压缩或未压缩以及在使用此功能时需要注意的行为更改,请参阅第 7.4.4.5 节,“二进制日志事务压缩”。
  • ndb_log_transaction_compression_level_zstd
命令行格式 --ndb-log-transaction-compression-level-zstd=#
引入 8.0.31-ndb-8.0.31
系统变量 ndb_log_transaction_compression_level_zstd
范围 全局
动态
SET_VAR提示适用
类型 整数
默认值 3
最小值 1
最大值 22
  • 如果由ndb_log_transaction_compression启用,则用于将压缩事务写入副本二进制日志的ZSTD压缩级别。如果mysqld未编译支持NDB存储引擎,则不支持。
    更多信息请参阅第 7.4.4.5 节,“二进制日志事务压缩”。
  • ndb_metadata_check
命令行格式 --ndb-metadata-check[={OFF|ON}]
引入 8.0.16-ndb-8.0.16
系统变量 ndb_metadata_check
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 ON
  • NDB 使用一个后台线程每隔 ndb_metadata_check_interval 秒检查一次元数据更改,与 MySQL 数据字典进行比较。可以通过将 ndb_metadata_check 设置为 OFF 来禁用此元数据更改检测线程。该线程默认情况下是启用的。
  • ndb_metadata_check_interval
命令行格式 --ndb-metadata-check-interval=#
引入版本 8.0.16-ndb-8.0.16
系统变量 ndb_metadata_check_interval
范围 全局
动态
SET_VAR 提示适用
类型 整数
默认值 60
最小值 0
最大值 31536000
单位
  • NDB 在后台运行一个元数据更改检测线程,以确定 NDB 字典相对于 MySQL 数据字典的更改。默认情况下,这些检查之间的间隔为 60 秒;可以通过设置 ndb_metadata_check_interval 的值来调整。要启用或禁用线程,请使用 ndb_metadata_check
  • ndb_metadata_sync
引入版本 8.0.19-ndb-8.0.19
系统变量 ndb_metadata_sync
范围 全局
动态
SET_VAR 提示适用
类型 布尔值
默认值 false
  • 设置此变量会导致更改监视线程覆盖为 ndb_metadata_checkndb_metadata_check_interval 设置的任何值,并进入持续更改检测期。当线程确定没有更多要检测的更改时,它会停滞���直到二进制日志线程完成所有检测到的对象的同步。然后 ndb_metadata_sync 设置为 false,更改监视线程将恢复到由 ndb_metadata_checkndb_metadata_check_interval 设置确定的行为。
    在 NDB 8.0.22 及更高版本中,将此变量设置为 true 会导致排除对象列表被清除,将其设置为 false 会清除要重试的对象列表。
  • ndb_optimized_node_selection
命令行格式 --ndb-optimized-node-selection=#
系统变量 ndb_optimized_node_selection
范围 全局
动态
SET_VAR提示适用
类型 整数
默认值 3
最小值 0
最大值 3
  • 优化节点选择有两种形式,如下所述:
  1. SQL 节点使用接近性来确定事务协调器;也就是说,SQL 节点“最近”的数据节点被选择为事务协调器。为此,具有与 SQL 节点共享内存连接的数据节点被认为是与 SQL 节点“最近”的;接下来最接近的(按照减少接近性的顺序)是:从localhost的 TCP 连接,然后是从localhost以外的主机的 TCP 连接。
  2. SQL 线程使用分布感知来选择数据节点。也就是说,由给定事务的第一个语句访问的集群分区所在的数据节点被用作整个事务的事务协调器。(仅当事务的第一个语句访问不超过一个集群分区时有效。)
  • 此选项接受整数值0123中的一个。3是默认值。这些值影响节点选择如下:
  • 0:节点选择未经优化。在 SQL 线程继续到下一个数据节点之前,每个数据节点被用作事务协调器 8 次。
  • 1:接近 SQL 节点用于确定事务协调器。
  • 2:使用分布感知来选择事务协调器。但是,如果事务的第一个语句访问多个集群分区,则 SQL 节点会在将此选项设置为0时恢复到循环轮询行为。
  • 3:如果可以使用分布感知来确定事务协调器,则使用它;否则使用接近性来选择事务协调器。(这是默认行为。)
  • 接近性的确定如下:
  1. 从为Group参数设置的值开始(默认为 55)。
  2. 对于与其他 API 节点共享同一主机的 API 节点,将值减 1。假设Group的默认值,与 API 节点在同一主机上的数据节点的有效值为 54,远程数据节点为 55。
  3. 设置ndb_data_node_neighbour会进一步减少有效的Group值 50,使得这个节点被视为最近的节点。只有当所有数据节点都在与 API 节点不同的主机上,并且希望将其中一个专用于 API 节点时才需要这样做。在正常情况下,前面描述的默认调整已经足够。
  • 频繁更改ndb_data_node_neighbour是不明智的,因为这会改变集群连接的状态,从而可能破坏每个线程对新事务的选择算法,直到它稳定下来。
  • ndb_read_backup
命令行格式 --ndb-read-backup[={OFF|ON}]
系统变量 ndb_read_backup
作用范围 全局
动态
SET_VAR Hint Applies
类型 布尔值
默认值 (≥ 8.0.19-ndb-8.0.19) ON
默认值 (≤ 8.0.18-ndb-8.0.18) OFF
  • 启用随后创建的任何NDB表的任何片段副本读取;这样做可以极大地提高表的读取性能,对写入的成本相对较小。
    如果 SQL 节点和数据节点使用相同的主机名或 IP 地址,则会自动检测到这一事实,因此首选将读取发送到同一主机。如果这些节点位于同一主机上但使用不同的 IP 地址,则可以通过将 SQL 节点上的ndb_data_node_neighbour的值��置为数据节点的节点 ID 来告诉 SQL 节点使用正确的数据节点。
    要为单个表启用或禁用从任何片段副本读取,您可以相应地为表设置NDB_TABLE选项READ_BACKUP,在CREATE TABLEALTER TABLE语句中;有关更多信息,请参见第 15.1.20.12 节,“设置 NDB 注释选项”。
  • ndb_recv_thread_activation_threshold
命令行格式 --ndb-recv-thread-activation-threshold=#
系统变量 ndb_recv_thread_activation_threshold
作用范围 全局
动态
SET_VAR Hint Applies
类型 整数
默认值 8
最小值 0 (MIN_ACTIVATION_THRESHOLD)
最大值 16 (MAX_ACTIVATION_THRESHOLD)


MySQL8 中文参考(八十八)(3)https://developer.aliyun.com/article/1565894

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