MySQL:参数是否合理&计算公式

Summary

Below is a comparison of your current settings against MySQL 8.0 defaults, with guidance on whether those defaults are reasonable and how to calculate optimal values based on your environment:

  • innodb_buffer_pool_instances: Default is 8 (when innodb_buffer_pool_size ≥ 1 GB), but you’ve set 3. Aim for each instance to manage at least 1 GB of buffer pool to avoid contention.
  • innodb_page_cleaners: Default is 4 (since MySQL 5.7.8) and auto-adjusts to match innodb_buffer_pool_instances if it exceeds it; you’ve set 2. In general, use at least as many cleaners as pool instances.
  • innodb_write_io_threads: Default is 4; you’ve increased to 16. Tune this toward the number of physical I/O channels (disks/SSDs) or CPU cores handling I/O for your workload.
  • log_bin_trust_function_creators: Default is OFF (0); switching to ON (1) relaxes strict binary-logging checks on stored routines, but should only be done if you trust creators to declare functions deterministic or read-only.
  • slave_parallel_workers: Default is 0 (parallel replication disabled); you’ve set 16. A good starting point is min(CPU_cores−1, number_of_concurrent_replicated_ddl_transactions).

1. innodb_buffer_pool_instances

1.1 默认值

  • innodb_buffer_pool_size ≥ 1 GB 时,默认实例数为 8。
  • 更早版本(或在特殊平台)会按 innodb_buffer_pool_size / 128 MB 四舍五入决定实例数;若池大小 < 1.3 GB,则实例数为 1。

1.2 是否合理 & 调优计算

  • 原则:每个实例至少管理 1 GB 缓冲池,以减少内部争用和锁开销。

  • 计算方法

    innodb_buffer_pool_instances ≈ FLOOR(innodb_buffer_pool_size / 1 GB)
    
  • 对于 32 GB 缓冲池,建议实例数 ≈ 32;对于 8 GB 池,实例数 ≈ 8。


2. innodb_page_cleaners

2.1 默认值

  • 自 MySQL 5.7.8 起,默认值由 1 提升至 4;若该值超过 innodb_buffer_pool_instances,则自动下调至与实例数相同。
  • 官方文档说明,页清理器线程数默认与缓冲池实例数相同(即通常 8),但早期文档中仍列出默认 4。

2.2 是否合理 & 调优计算

  • 原则:页清理器数量应 ≥ 缓冲池实例数,以确保每个实例都有专属后台线程来刷新脏页。

  • 计算方法

    innodb_page_cleaners = innodb_buffer_pool_instances
    
  • 如果你只有 3 个池实例,将清理器设为 3 或更高,避免某些实例缺乏刷盘线程。


3. innodb_write_io_threads

3.1 默认值

  • MySQL 8.0 默认为 4,覆盖读写双向 IO 线程各 4 条。

3.2 是否合理 & 调优计算

  • 原则:依据底层存储设备并行 I/O 能力(磁盘通道或 NVMe 队列深度)及 CPU 核心数,适当提升线程数。

  • 计算方法

    innodb_write_io_threads ≈ MIN(innodb_read_io_threads, physical_IO_channels)
    
  • 在多 SSD 或高端存储阵列上,可将其提升至 8–16,以匹配并行度。


4. log_bin_trust_function_creators

4.1 默认值

  • 默认值为 OFF(0),即创建存储函数时必须具有 SUPER 权限,且函数需声明为 DETERMINISTIC 或不修改数据。

4.2 是否可以设置为 ON

  • 可行性:若你信任开发者创建的函数均满足安全及幂等性,可将其设为 ON(1),以省去额外权限或声明检查。设为 ON 后,写入二进制日志时便不再强制要求函数必须是 DETERMINISTIC 或不修改数据。
  • 风险:若函数非幂等且修改数据,崩溃恢复或复制时可能产生不一致。

5. slave_parallel_workers

5.1 默认值

  • 在 MySQL 8.0 中,默认值为 0,表示并行复制功能关闭;你查到的“默认 4”可能是某些云服务(如阿里云 RDS)的自定义模板值。
  • 本地 MySQL 8.0.25+ 已弃用此变量并改由 Group Replication 机制管理;在 8.3.0 以后完全移除。

5.2 是否合理 & 调优计算

  • 原则:并行复制线程数不要超过从库 CPU 核心数减 1,同时结合复制事务的类型及数量。

  • 计算方法

    slave_parallel_workers ≈ LEAST(CPU_cores − 1, avg_concurrent_transactions)
    
  • 如果你有 16 个核心且平均有 8 个并发事务,则可将其设为 8–12,视复制滞后情况再做微调。


参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值