MySql 运维性能优化

发布于:2025-07-23 ⋅ 阅读:(27) ⋅ 点赞:(0)
  1. 内存相关配置
    innodb_buffer_pool_size:这是 InnoDB 存储引擎最重要的参数,用于缓存数据和索引。建议设置为服务器可用内存的 50%-70%(对于专用数据库服务器)。
innodb_buffer_pool_size = 8G  # 根据服务器内存调整

innodb_log_buffer_size:用于缓存 InnoDB 日志。对于写入频繁的系统,可适当调大(默认 16M):

innodb_log_buffer_size = 64M

key_buffer_size:用于 MyISAM 表的索引缓存(如果使用 MyISAM):

key_buffer_size = 256M

query_cache_size:注意 MySQL 8.0 已移除查询缓存,对于 5.7 及以下版本,如果查询重复率高可开启:

query_cache_size = 64M
query_cache_type = 1
  1. 连接与线程配置
    max_connections:最大并发连接数,根据业务需求调整:
max_connections = 1000

thread_cache_size:线程缓存大小,减少创建新线程的开销:

thread_cache_size = 64

wait_timeout 和 interactive_timeout:控制空闲连接超时时间,避免连接泄露:

wait_timeout = 600
interactive_timeout = 600
  1. InnoDB 存储引擎优化
    innodb_flush_log_at_trx_commit:控制事务日志刷新策略:
    1(默认):每次事务提交都刷新到磁盘,最安全但性能较低
    0:每秒刷新一次,性能好但可能丢失 1 秒数据
    2:提交时写入日志文件但不立即刷新到磁盘
innodb_flush_log_at_trx_commit = 1  # 对数据安全性要求高时使用

innodb_file_per_table:为每个表创建独立的表空间,便于管理:

innodb_file_per_table = 1

innodb_log_file_size 和 innodb_log_files_in_group:日志文件大小和数量:

innodb_log_file_size = 1G
innodb_log_files_in_group = 2

innodb_flush_method:控制 InnoDB 如何刷新数据到磁盘,建议在 Linux 下使用 O_DIRECT:

innodb_flush_method = O_DIRECT
  1. 查询优化相关
    slow_query_log:开启慢查询日志,便于定位性能问题:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2  # 超过2秒的查询记录为慢查询

join_buffer_size:表连接缓存,不宜过大(默认 256K):

join_buffer_size = 256K

sort_buffer_size:排序缓存,每个连接独占,不宜过大:

sort_buffer_size = 2M
  1. 其他重要配置
    max_allowed_packet:控制最大数据包大小,对于大字段(如 TEXT)需要调大:
max_allowed_packet = 64M

table_open_cache:表缓存数量,根据数据库表数量调整:

table_open_cache = 2048

innodb_read_io_threads 和 innodb_write_io_threads:IO 线程数量,多核服务器可增加:

innodb_read_io_threads = 8
innodb_write_io_threads = 8

优化建议
根据工作负载调整:OLTP(事务处理)和 OLAP(分析处理) workload 需要不同的配置
逐步调整:每次只修改少数参数,测试性能变化
监控效果:使用SHOW STATUS、SHOW VARIABLES和EXPLAIN等工具监控优化效果
定期更新统计信息:执行ANALYZE TABLE或开启innodb_stats_auto_recalc
考虑硬件因素:配置应与服务器硬件(CPU、内存、磁盘类型)相匹配
配置优化后,需要重启 MySQL 服务使更改生效,并通过实际负载测试验证优化效果。


网站公告

今日签到

点亮在社区的每一天
去签到