综合 MySQL 9.7:innodb_log_writer_threads 默认值改为按 log_bin 和逻辑 CPU 数判断

2026-09-26 21:04:03

MySQL 9.7:innodb_log_writer_threads 默认值改为按 log_bin 和逻辑 CPU 数判断

参考文档:MySQL 9.7 New Features(nutshell)

innodb_log_writer_threads 默认值逻辑

innodb_log_writer_threads 的默认值不再是一个固定值,而是部分取决于服务器上是否启用了 binlog:

if (log_bin = OFF) {
  if ([number of logical CPUs] <= 4) {
    innodb_log_writer_threads = OFF
  } else {
    innodb_log_writer_threads = ON
  }
} else {
  /* Same as in MySQL 9.4 and earlier: */
  if ([number of logical CPUs] < 32) {
    innodb_log_writer_threads = OFF
  } else {
    innodb_log_writer_threads = ON
  }
}

换成文字描述:

  • 启用 binlog(log_bin = ON)且可用逻辑 CPU 数 ≥ 32:默认 ON;
  • 关闭 binlog 且可用 CPU 数 > 4:默认 ON;
  • 其余情况:默认 OFF。

这里改的是默认值,不影响已经显式配置过的值——如果这个变量被设置过,仍然按设置值生效。相关参数说明见手册第 10.5.4 节 “Optimizing InnoDB Redo Logging”。

受影响的情况

  • 低核数机器:binlog 关闭时,逻辑 CPU ≤ 4 的实例默认 OFF,即不再起独立的 redo log 写入线程。
  • 开着 binlog 的实例:判断逻辑与 MySQL 9.4 及更早版本一致(以 32 核为界),这部分行为不变。
  • 从 9.4/9.6 升级:没显式设置 innodb_log_writer_threads 的实例,升级后默认值可能变化;设置过的实例不受影响。

binlog_transaction_dependency_history_size 默认值上调

MySQL 9.5.0 起,binlog_transaction_dependency_history_size 的默认值从 25000 提高到 1000000(一百万),同时最大值从 1000000 提高到 10000000(一千万)。

该变更不影响变量当前已设置的值,因此对现有部署没有影响。

MySQL 9.7 中弃用的功能

SASL LDAP 认证的 SCRAM-SHA-1 认证方式自 MySQL 9.5.0 起弃用,改用 SCRAM-SHA-256;后者现在也是 authentication_ldap_sasl_auth_method_name 的默认值。

MySQL 9.7 中移除的功能

被移除的系统变量和状态变量包括:

  • group_replication_allow_local_lower_version_join
  • replica_parallel_type

9.7 的其它变化

  • cpuset cgroup 感知:MySQL Server 会遵循 cpuset-cpus cgroup controller 的限制,正确判断可用的逻辑 CPU 数量。
  • replica_allow_higher_version_source:新增变量,用于启用或禁用从更高版本的源端复制到更低版本的副本。
  • Hypergraph Optimizer 进入 Community Edition:SET GLOBAL optimizer_switch='hypergraph_optimizer=on|off'。
  • Community Edition 支持 JSON Duality Views 上的 DML。
  • caching_sha2_password 的 PBKDF2 存储格式。

相关文档:MySQL 9.7 Features Added, Deprecated, Removed

复制全文 生成海报 MySQL InnoDB 配置 升级 运维

推荐文章

程序员茄子在线接单