MySQL 9.1.0 新特性与系统变量变化

MySQL 9.1.0 新特性与系统变量变化

ShawnYan Lv.6

前文详细介绍了 MySQL 9.1.0 创新版本发布的主要特性及其源码编译方法。

本文将继续讨论 MySQL 9.1.0 系统变量 (Server System Variables) 的变化,相较于 MySQL 8.4,MySQL 9.1.0 默认值变更参数 1 个,新增 6 个参数。

变更

  1. innodb_log_writer_threads

MySQL 提供专用的日志写入线程 (Dedicated log writer threads),用于将重做日志记录 (InnoDB Redo Logging) 从日志缓冲区写入系统缓冲区,并将系统缓冲区刷新到重做日志文件。你可以使用 innodb_log_writer_threads 变量启用或禁用日志写入线程。专用日志写入线程可以提高高并发系统的性能,但对于低并发系统,禁用专用日志写入线程可以提供更好的性能。

专用的日志写入线程引入自 MySQL 8.0.11,参数 innodb_log_writer_threads 引入自 MySQL 8.0.22,从 MySQL 9.1.0 开始,在逻辑处理器少于 32 个的系统上,innodb_log_writer_threads 的默认值为 OFF,之前的版本中,默认值为 ON。(WL #16396)

新增

内存控制相关

  1. connection_memory_status_limit

connection_memory_status_limit 是 Count_hit_query_past_connection_memory_status_limit 递增之前任何一个用户连接可以消耗的最大内存量。默认值与最大值均为 18446744073709551615 字节。

  1. global_connection_memory_status_limit

global_connection_memory_status_limit 与 connection_memory_status_limit 作用相似,但这里表述全部用户连接可以消耗的最大内存量。

遥测相关

  1. performance_schema_logger

performance-schema-logger:定义记录器的默认值

  1. performance_schema_max_logger_classes

该值指示可以创建的记录器客户端工具的最大数量。修改此设置需要重新启动服务器。

上面两个参数是为实现 MySQL 服务器遥测日志接口而增加的。(WL#15201)

需要注意的是,该接口不提供日志记录功能。你必须使用 MySQL Enterprise Edition、MySQL HeatWave 或开发自己的组件来提供日志记录。

在 MySQL 9 中,新增表 setup_loggers,该表列出了已注册的记录器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> show create table setup_loggers\G
*************************** 1. row ***************************
Table: setup_loggers
Create Table: CREATE TABLE `setup_loggers` (
`NAME` varchar(128) NOT NULL,
`LEVEL` enum('none','error','warn','info','debug') NOT NULL,
`DESCRIPTION` varchar(1023) DEFAULT NULL
) ENGINE=PERFORMANCE_SCHEMA DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

mysql> table setup_loggers;
+------------------------+-------+--------------------+
| NAME | LEVEL | DESCRIPTION |
+------------------------+-------+--------------------+
| logger/error/error_log | info | MySQL error logger |
+------------------------+-------+--------------------+
1 row in set (0.00 sec)
  1. performance_schema_meter

该参数可用于设置 performance_schema.setup_meters 表中列出的仪表的初始值,其属性值可配置为 enabledfrequency

例如,重启 MySQL 服务器,并设置参数。

1
mysqld --performance_schema_meter='mysql.x=enabled:yes,frequency:30'

连接到数据库,确认修改生效。

1
2
3
4
5
6
7
mysql> SELECT name, enabled, frequency FROM performance_schema.setup_meters where name = 'mysql.x';
+---------+---------+-----------+
| name | enabled | frequency |
+---------+---------+-----------+
| mysql.x | YES | 30 |
+---------+---------+-----------+
1 row in set (0.00 sec)

触发器性能改进

  1. table_open_cache_triggers

从 MySQL 9.1.0 开始,只读操作不再加载触发器。

解析和加载触发器的过程分为两个阶段:在第一阶段,只从数据字典中读取触发器元数据,因为元数据可以存储一次并在同一触发器的不同实例之间共享。触发器的解析和执行在第二阶段完成。前一项所述的第二阶段仅针对修改表数据的语句执行。这样可以消除解析和缓存未实际使用的触发器所消耗的资源。通过将触发器错误的静态缓冲区分配替换为按需分配的可变大小缓冲区,内存使用率得到进一步改善。

此功能通过分别跟踪表缓存中具有触发器的表和不具有触发器的表来实现。在任何给定时间,具有触发器且保存在表缓存中的打开表的最大数量由服务器系统变量 table_open_cache_triggers 的值决定。

table_open_cache_triggers 与 table_open_cache 类似,但专门针对具有完全加载触发器的表控制驱逐机制。table_open_cache_triggers 的默认值与最大值相同;设置小于此值的值将激活特定于具有完全加载触发器的表的驱逐逻辑。将 table_open_cache_triggers 保留为默认值意味着不会根据表是否具有任何完全加载的触发器而从缓存中驱逐任何表,这与 MySQL 9.1 之前的版本中的行为相同。

每个缓存实例具有触发器的缓存表的最大数量由 table_open_cache_triggers / table_open_cache_instances 确定。当允许这些系统变量保留其默认值时,此值为 32768。

此版本还添加了以下跟踪具有触发器的表的缓存使用情况的服务器状态变量:

  • Table_open_cache_triggers_hits:具有完全加载的触发器的打开表的缓存命中次数。
  • Table_open_cache_triggers_misses:具有完全加载的触发器的打开表的缓存未命中次数。
  • Table_open_cache_triggers_overflows:具有完全加载的触发器的打开表的缓存溢出次数。

Have a nice day ~

– / END / –

  • Title: MySQL 9.1.0 新特性与系统变量变化
  • Author: ShawnYan
  • Created at: 2024-11-06 21:00:00
  • Updated at: 2024-11-06 21:00:00
  • Link: https://shawnyan.cn/2024/mysql/mysql-9-1-0-change-sys-vars/
  • License: This work is licensed under CC BY-NC-SA 4.0.
if (hexo-config('comment.enable') == true && hexo-config('comment.system') != "") { if (hexo-config('comment.system') == "waline") { @require "./waline.styl" } else if (hexo-config('comment.system') == "gitalk") { @require "./gitalk.styl" } else if (hexo-config('comment.system') == "twikoo") { @require "./twikoo.styl" } } .comments-container display inline-block margin-top $spacing-unit width 100% #comment-anchor width 100% height 10px .comment-area-title width 100% margin 10px 0 font-size 1.38rem color var(--default-text-color) font-family 'Consolas', '宋体', sans-serif font-weight bold i color var(--default-text-color) +redefine-tablet() margin 5px 0 font-size 1.2rem