为了提升MySQL服务器的性能与稳定性,调整配置参数是至关重要的。这些参数主要包括操作系统配置和MySQL数据库配置,下面是一些建议。
操作系统配置
-
在BIOS及内核层面禁用NUMA功能。
-
在BIOS中将CPU和内存设置为最大性能模式。
-
在BIOS中关闭CPU节能模式。
-
修改IO调度器为deadline或noop,机械硬盘设置为deadline,SSD设置为noop。可通过以下命令检查当前设置:
grep deadline /sys/block/sd*/queue/scheduler -
使用XFS文件系统,并在挂载时添加选项:noatime、nodiratime、nobarrier。
-
在内核层面设置以下参数:
vm.swappiness <= 5vm.dirty_ratio <= 10vm.dirty_background_ratio <= 5fs.file_max = 65536# 指定能够打开的文件句柄数net.core.somaxconn = 65536# 指定socket监听的TCP协议连接数的上限net.core.netdev_max_backlog = 65536net.ipv4.tcp_max_sync_backlog = 65536net.ipv4.tcp_fin_timeout = 10net.ipv4.tcp_tw_reuse = 0# 建议关闭net.ipv4.tcp_tw_recycle = 0# 建议关闭
-
在内核层面将用户可打开文件数和线程数设置为65535:
vi /etc/security/limits.conf # 添加以下内容 * - nofile 65535 * - nproc 65535
MySQL配置
- 调整排序、连接、读取缓冲区大小:
sort_buffer_size = 4Mjoin_buffer_size = 4Mread_buffer_size = 8Mread_rnd_buffer_size = 4M
- 临时表和堆表的大小设置:
tmp_table_size = 32Mmax_heap_table_size = 32M
- 设置二进制日志同步和InnoDB日志刷新:
sync_binlog = 1innodb_flush_log_at_trx_commit = 1
- 设置长查询时间:
long_query_time = 0.1# 建议在0.01-0.1之间
- 记录未使用索引的查询:
log_queries_not_using_indexes = 1log_throttle_queries_not_using_indexes = 60
- 设置交互超时时间和等待超时时间:
interactive_timeout = 600wait_timeout = 600
- 设定锁等待超时时间:
lock_wait_timeout = 3600
- 设置默认时区:
default_time_zone = "+8:00"# 固定值可降低CPU使用率
- 线程处理设置(适用于企业版或Percona版本)。
- InnoDB缓冲池大小:
innodb_buffer_pool_size = 2G
- InnoDB最大脏页百分比:
innodb_max_dirty_pages_pct = 50# 对于IO较快的情况
- InnoDB线程并发:
innodb_thread_concurrency = 0# 建议设置为0
- 行锁等待时间:
innodb_lock_wait_timeout = 10
- InnoDB日志文件大小:
innodb_log_file_size = 2Ginnodb_log_files_in_group = 3
- 根据IOPS能力调整:
innodb_io_capacity = 4000innodb_io_capacity_max = 8000
- InnoDB状态输出设置:
innodb_status_output = OFFinnodb_status_output_locks = ON# 监控锁信息
- 禁用DNS解析:
skip_name_resolve = ON# 内网生产建议开启
- 设置二进制日志保留时间:
expire_logs_days = 7或binlog_expire_logs_seconds = 604800
- SQL模式设置:
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 最大允许数据包大小:
max_allowed_packet = 64M
- 打印所有死锁信息:
innodb_print_all_deadlocks = 1# 建议开启
通过合理的配置调整,可以显著提升MySQL数据库的性能与稳定性。