§ GreatSQL 优化


本文主要介绍从 GreatSQL 数据库的几个优化参考。

§ GreatSQL 优化配置参考

通常情况下,运行 GreatSQL 数据库时,采用 这份 my.cnf (opens new window) 参考就足够了。

下面针对其中的几个关键参数选项稍作解读:

  • no-auto-rehash

MySQL 客户端登录时,不读取全部 metadata,避免影响性能以及产生 MDL 等待。

  • skip_name_resolve=ON

不进行 DNS 反解析,提高用户端连接性能。

  • default_time_zone="+8:00"

显示指定时区,避免频繁调用时区转换函数,提升性能。请务必根据实际情况调整本参数。

  • lock_wait_timeout=3600

限制表级锁、MDL 锁、备份锁等最大等待时长。

  • log_error_verbosity=3

设置为 3 可以记录更多日志信息,便于问题分析排查。

  • replica_parallel_type=LOGICAL_CLOCK
  • replica_parallel_workers=16

采用 LOGICAL_CLOCK 模式,并行复制线程数最高可以设置为逻辑 CPU 数量的 2 倍,提高 SQL 线程应用事务的并行效率。

  • binlog_transaction_dependency_tracking=WRITESET

采用 WRITESET 模式提高从节点事务并行回放度。

  • replica_preserve_commit_order=ON

从节点回放事务时,要保证事务顺序,避免和主节点数据不一致。

  • loose-group_replication_flow_control_mode="DISABLED"

关闭 MySQL 原生的 MGR 流控模式,因为其作用不大。

  • loose-group_replication_majority_after_mode=ON

在 AFTER 模式下,当发生个别节点异常时,只要多数派达成一致即可,不会导致整个 MGR 都被 hang 住。

  • loose-group_replication_communication_max_message_size=10M

设置 MGR 通信消息分片,避免一次性发送消息太大,导致网络拥塞,影响 MGR 性能。

  • loose-group_replication_single_primary_fast_mode=1

启用快速单主模式。

  • loose-group_replication_request_time_threshold=100

记录因 MGR 通信超过阈值的事件,便于后续检查确认 MGR 通信性能是否存在瓶颈。

  • loose-group_replication_primary_election_mode=GTID_FIRST

设置 MGR 选主模式为 GTID_FIRST,在发生主节点切换时,会优先选择事务应用效率最高的那个节点。

  • innodb_buffer_pool_size=96G

如果是专用的数据库服务器,则可以先设置为物理内存的 50%。例如物理内存是 128GB,则设置innodb_buffer_pool_size=64G

  • innodb_log_buffer_size=64M

设置为 32-64MB 就能满足大部分业务场景。

  • innodb_redo_log_capacity=4G

InnoDB Redo Log 一般设置为 4GB 起步。

  • innodb_doublewrite_pages=128

默认值为 2,不足以应对大部分业务场景,建议调大到 128。

  • innodb_io_capacity=20000
  • innodb_io_capacity_max=40000

配置高端 PCIe SSD 卡的话,则可以调整的更高,比如 50000 - 80000

  • innodb_read_io_threads=16
  • innodb_write_io_threads=16

设置 InnoDB I/O 读写线程数,默认值均为 4,在高 I/O 负载场景下可以适当调大。

  • innodb_thread_concurrency=0

不限制 InnoDB 并行线程数,使其发挥最大性能。但如果业务端发起的业务请求并行度总是超过服务器逻辑 CPU 数,则可能导致 CPU 调度频繁等待,此时可以考虑将本选项设置为逻辑 CPU 的数量。

  • innodb_spin_wait_delay=20

调整 InnoDB 自旋延迟等待为 20 微秒(默认 6 微秒),在高负载场景下不要设置太低。

  • loose-rapid_memory_limit=1G

设置 Rapid 引擎运行过程中可使用的内存,默认值 1G。如果数据量较大,也应适当提高,一般可以设置为 InnoDB 表空间文件总大小的 10% ~ 30%。

  • loose-rapid_worker_threads=8

设置 Rapid 引擎运行过程中可使用的线程数,默认值为 4,如果 OLAP 类查询较多,可以适当提高。

扫码关注微信公众号

greatsql-wx