提升 Debian 上 MySQL(或 MariaDB)性能,一般从 系统、MySQL 配置、表结构、SQL、硬件 这几个层面入手。下面给你一套 实用、可落地 的优化建议(适用于 Debian 10/11/12)。
编辑:
sudo nano /etc/sysctl.conf
建议添加:
vm.swappiness = 10
net.core.somaxconn = 1024
net.ipv4.tcp_max_syn_backlog = 1024
生效:
sudo sysctl -p
✅ 推荐
ext4 或 xfs查看调度器:
cat /sys/block/sda/queue/scheduler
减少系统资源占用:
systemctl disable bluetooth
systemctl disable cups
Debian 常见路径:
/etc/mysql/mysql.conf.d/mysqld.cnf
或
/etc/mysql/mariadb.conf.d/50-server.cnf
innodb_buffer_pool_size = 60% ~ 70% 内存
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
示例(4GB 内存服务器):
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
⚠️ innodb_flush_log_at_trx_commit=2 会提升性能,但宕机可能丢 1 秒数据(非金融系统推荐)
max_connections = 200
thread_cache_size = 50
table_open_cache = 2000
⚠️ MySQL 8 已移除查询缓存
query_cache_type = 0
query_cache_size = 0
sudo systemctl restart mysql
SHOW TABLE STATUS;
如不是 InnoDB:
ALTER TABLE 表名 ENGINE=InnoDB;
✅ 给常用查询字段加索引
✅ 避免重复索引
✅ 联合索引注意顺序
CREATE INDEX idx_user_status ON users(status, created_at);
SELECT id, name FROM users;
EXPLAIN SELECT * FROM orders WHERE user_id = 10;
关注:
常见慢查询:
LIKE '%xxx%'LIMIT 100000, 20优化分页:
SELECT * FROM orders WHERE id > 100000 ORDER BY id LIMIT 20;
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
查看慢 SQL:
mysqldumpslow /var/log/mysql/slow.log
避免 Debian 自带版本过旧:
sudo apt install mariadb-server
OPTIMIZE TABLE 表名;
ANALYZE TABLE 表名;
mysqladmin -u root -p status
mytoppt-query-digesthtopiotop| 现象 | 原因 | 解决 |
|---|---|---|
| CPU 高 | 慢 SQL | EXPLAIN |
| 内存不足 | buffer_pool 小 | 调大 |
| 磁盘 IO 高 | 大量写 | 调 innodb_flush |
| 连接数满 | max_connections 小 | 调大 |
| 查询慢 | 无索引 | 加索引 |
✅ 帮你 分析具体 my.cnf
✅ 优化 某条慢 SQL
✅ 根据 服务器配置(内存/CPU)给出最优参数
你可以直接贴:
free -hmysqld.cnf