§ 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可以记录更多日志信息,便于问题分析排查。

  • slave_parallel_type = LOGICAL_CLOCK
  • replica_parallel_workers = 16

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

  • binlog_transaction_dependency_tracking = WRITESET

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

  • slave_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_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类查询较多,可以适当提高。

  • loose-rapid_hash_table_memory_limit = 10

设置Rapid引擎运行过程中hash table最大可使用memory_limit的比例,默认值为10。如果JOIN时的表数量较多,该选项不应设置太大,避免内存耗尽。

扫码关注微信公众号

greatsql-wx