Linux 下 MariaDB 性能调优通常从 硬件/OS、MariaDB 参数、表结构/SQL、监控与维护 四个层面进行。下面是一套实用、可操作的调优思路。
vm.swappiness = 1
mount -o noatime,nodiratime /dev/sdb /var/lib/mysql
ulimit -n
建议:
/etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535
配置文件一般在:
/etc/my.cnf
或
/etc/mysql/my.cnf
[mysqld]
innodb_buffer_pool_size = 60%~70% 内存
innodb_buffer_pool_instances = 4~16
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
说明:
| 参数 | 建议 |
|---|---|
| buffer_pool_size | 越大越好(但别超内存) |
| log_file_size | 减少 checkpoint |
| flush_log_at_trx_commit | 2 性能高,1 最安全 |
| O_DIRECT | 避免双缓存 |
max_connections = 200~500
thread_cache_size = 50
table_open_cache = 4000
避免:
MariaDB 10.6+ 不推荐
query_cache_type = 0
query_cache_size = 0
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M
⚠️ 不要盲目调大,否则并发高时内存爆炸。
EXPLAIN SELECT ...
重点关注:
TEXT / BLOB 滥用❌
SELECT *
❌
WHERE DATE(create_time) = '2024-01-01'
✅
WHERE create_time >= '2024-01-01'
AND create_time < '2024-01-02'
SHOW GLOBAL STATUS;
SHOW ENGINE INNODB STATUS\G
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
分析:
mysqldumpslow slow.log
pt-query-digestmytopinnotopANALYZE TABLE✅ 内存是否够
✅ buffer_pool_size 是否合理
✅ 是否存在全表扫描
✅ 是否开启慢查询
✅ 磁盘 IO 是否瓶颈
如果你愿意,可以告诉我:
my.cnf我可以 直接帮你给出一份定制化的调优配置。