温馨提示×

如何优化debian mysql性能

小樊
44
2026-09-01 21:21:44
栏目: 云计算

在 Debian 上优化 MySQL(通常是 MySQL 或 MariaDB)性能,可以从系统层、MySQL 配置、Schema 与查询、监控四个方面入手。下面给出一个相对实用、循序渐进的优化清单。


一、系统层优化(Debian)

1. 内存与 Swap

  • 保证物理内存充足,避免频繁使用 swap
  • 查看 swap 使用:
    free -h
    swapon --show
    
  • 如必须保留 swap,建议:
    vm.swappiness=10
    
    写入 /etc/sysctl.conf 后执行:
    sysctl -p
    

2. 文件系统与磁盘

  • 使用 ext4 / xfs
  • 挂载选项建议(示例):
    noatime,nodiratime
    
  • 如用 SSD:
    • 启用 TRIM
    • 避免 RAID5(写性能差)

3. 内核参数(高并发场景)

net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

二、MySQL 配置优化(重点)

配置文件位置(Debian):

/etc/mysql/mysql.conf.d/mysqld.cnf
# 或
/etc/mysql/mariadb.conf.d/50-server.cnf

1. 内存相关(最重要)

innodb_buffer_pool_size = 物理内存的 60%~75%
innodb_buffer_pool_instances = 4~8

示例(8G 内存):

innodb_buffer_pool_size = 6G

2. InnoDB 优化

innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2   # 性能优先
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON

⚠️ trx_commit=2 有极小数据丢失风险,金融场景慎用

3. 连接与线程

max_connections = 300~500
thread_cache_size = 50
wait_timeout = 300
interactive_timeout = 300

4. 查询缓存(MySQL 5.7 及以前)

query_cache_type = 0   # 8.0 已移除

高并发写场景建议关闭


三、Schema 与 SQL 优化

1. 索引优化

  • 合理使用:
    • 联合索引(最左前缀)
    • 覆盖索引
  • 避免:
    WHERE DATE(create_time) = ...
    LIKE '%abc'
    

2. 慢查询分析

开启慢查询日志:

slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

分析工具:

mysqldumpslow -s t /var/log/mysql/slow.log
# 或
pt-query-digest

3. 表结构

  • 使用合适类型(INT 而非 VARCHAR)
  • 避免 TEXT/BLOB 滥用
  • 大表考虑分区

四、监控与维护

1. 状态查看

SHOW GLOBAL STATUS;
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;

2. 定期维护

OPTIMIZE TABLE xxx;  -- 谨慎使用
ANALYZE TABLE xxx;

3. 工具推荐

  • htop, iostat
  • mytop
  • Prometheus + Grafana
  • Percona Toolkit

五、快速检查清单(入门)

✅ innodb_buffer_pool_size 是否合理
✅ 是否开启慢查询日志
✅ 是否存在全表扫描
✅ swap 是否频繁
✅ 磁盘 IO 是否瓶颈


如果你愿意,可以告诉我:

  • Debian 版本
  • MySQL / MariaDB 版本
  • 内存大小
  • 主要业务类型(Web / 报表 / 高并发写)

我可以给你针对性配置示例。

0 踩