在 Debian 上调优 MySQL(通常为 MySQL 或 MariaDB)性能,可以从系统层、MySQL 配置、Schema 与 SQL、监控四个方面入手。下面是一套比较实用、可落地的调优思路。
lsb_release -a
mysql -V
# 或
mariadb -V
确认是 MySQL 还是 MariaDB,二者参数略有差异。
swappiness 可降低sysctl vm.swappiness=10
写入 /etc/sysctl.conf:
vm.swappiness=10
/dev/sdb /var/lib/mysql ext4 defaults,noatime 0 2
atime 可减少磁盘写fs.file-max = 655350
net.core.somaxconn = 65535
配置文件位置:
/etc/mysql/my.cnf
/etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 4G # 物理内存的 60%~70%
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # 性能优先(可接受少量丢失)
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000 # SSD 可更高
⚠️ 修改
innodb_log_file_size需干净关闭 MySQL
max_connections = 500
thread_cache_size = 50
wait_timeout = 300
interactive_timeout = 300
避免:
max_connections 过大导致内存爆掉query_cache_type = 0
query_cache_size = 0
MySQL 8 已移除查询缓存
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
分析:
mysqldumpslow -s t /var/log/mysql/slow.log
SELECT *LIKE '%xxx%'LIMIT 100000,10SHOW GLOBAL STATUS;
SHOW ENGINE INNODB STATUS;
mysqltunerpt-query-digestapt install mysqltuner
mysqltuner
sysbench oltp_read_write --threads=16 run
| 场景 | 建议 |
|---|---|
| 读多写少 | 加大 buffer pool,考虑只读从库 |
| 写密集 | 调整 redo log,使用 SSD |
| 高并发 | 优化连接池,减少短连接 |
| 内存小 | 降低 buffer pool,避免 swap |
systemctl restart mysql
如修改关键参数失败:
journalctl -u mysql
如果你能提供:
我可以给你一套针对性的 my.cnf 示例配置。