在 Ubuntu 上针对 MariaDB 做性能调优,通常分为 系统层、数据库配置层、SQL 与索引层、监控层 四个方向。下面给你一套实用、可落地的调优思路(适用于 10.3+ 版本,Ubuntu 20.04/22.04)。
free -h
swapon -s
sudo sysctl vm.swappiness=10
永久生效:
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
ulimit -n
建议 ≥ 65535
编辑:
sudo nano /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535
ext4 或 xfsnoatime,nodiratime
配置文件位置:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
innodb_buffer_pool_size = 4G
(8G 内存 → 5G,16G → 10G)
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
⚠️
trx_commit=2提高性能但略降安全性(可接受场景)
max_connections = 500
thread_cache_size = 100
查看当前连接:
SHOW STATUS LIKE 'Threads_connected';
query_cache_type = 0
query_cache_size = 0
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
read_buffer_size = 2M
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
分析:
sudo mysqldumpslow -s t /var/log/mysql/slow.log
SELECT *
LIKE '%xx%'
函数包裹字段
EXPLAIN SELECT * FROM orders WHERE user_id = 1;
关注:
OPTIMIZE TABLE table_name;
ANALYZE TABLE table_name;
mytoppt-query-digestPrometheus + GrafanaSHOW GLOBAL STATUS;sudo mysqladmin status
mysql -e "SHOW ENGINE INNODB STATUS\G"
| 现象 | 原因 | 解决 |
|---|---|---|
| CPU 高 | 慢 SQL | 加索引 |
| 磁盘 IO 高 | buffer pool 小 | 调大 |
| 连接满 | max_connections | 调大 |
| 写慢 | sync 强 | trx_commit=2 |
如果你愿意,可以告诉我:
我可以 直接帮你写一份最优 my.cnf 配置。