在 Linux 上 MariaDB 响应变慢通常不是单一原因,而是“资源、配置、SQL、架构”中某一环出了问题。下面按最常见原因 → 排查方法 → 解决思路来系统说明。
可能是:
可能是:
MariaDB 极度依赖内存。
free -h
如果 Swap 被大量使用:
swapon --show
✅ 解决:
innodb_buffer_pool_size尤其是:
iostat -x 1
关注:
%util 接近 100%await 很高✅ 解决:
innodb_io_capacitytop
看 mysqld 是否占满 CPU。
✅ 可能原因:
查看:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
经验值:
修改:
[mysqld]
innodb_buffer_pool_size = 4G
开启慢日志:
slow_query_log = 1
slow_query_log_file = /var/log/mariadb/slow.log
long_query_time = 1
分析:
mysqldumpslow -s t /var/log/mariadb/slow.log
✅ 常见索引问题:
WHERE 字段没索引WHERE DATE(create_time)=...查看当前锁:
SHOW PROCESSLIST;
或:
SELECT * FROM information_schema.innodb_trx;
✅ 原因:
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
✅ 解决:
很多 Linux 发行版 MariaDB 默认配置极低。
重点参数:
innodb_buffer_pool_size
innodb_log_file_size
innodb_io_capacity
query_cache_type = 0 # MariaDB 10.2+ 建议关闭
SHOW VARIABLES LIKE 'query_cache_type';
✅ 建议:
例如:
SELECT * FROM orders WHERE DATE(created_at) = '2024-01-01';
应该:
WHERE created_at >= '2024-01-01'
AND created_at < '2024-01-02'
每次请求都新建连接 → 极慢。
free -h
top
iostat -x 1
SHOW PROCESSLIST;
SHOW GLOBAL STATUS LIKE 'Slow_queries';
你可以补充:
我可以直接帮你 看配置 + 优化 SQL + 给参数模板。