在 Linux 上 MariaDB 占用过高(CPU、内存或磁盘 IO)通常不是单一原因,而是配置、负载和架构问题叠加。下面按「常见原因 → 排查方法 → 解决建议」说明。
innodb_buffer_pool_size 设置过大这是 最容易导致内存爆掉 的参数。
查看:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
建议:
max_connections)每个连接都会占用内存。
SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';
如果 Threads_connected 接近 max_connections,说明:
解决:
wait_timeoutSET GLOBAL wait_timeout=300;
复杂 SQL 会:
SHOW STATUS LIKE 'Created_tmp_tables';
SHOW STATUS LIKE 'Sort_merge_passes';
这是 CPU 高的主要原因。
开启慢查询日志:
SET GLOBAL slow_query_log=1;
SET GLOBAL long_query_time=1;
查看慢 SQL:
mysqldumpslow -s t /var/log/mariadb/slow.log
解决:
SELECT *LIKE '%xx%'EXPLAIN SELECT * FROM table WHERE xxx;
如果 type=ALL,就是全表扫描。
SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
1:最安全,但 IO 高2:性能更好(有丢数据风险)SHOW STATUS LIKE 'Created_tmp_disk_tables';
如果远大于 Created_tmp_tables,说明 SQL 写得太重。
top
htop
iotop
free -h
df -h
看是:
你可以贴出:
top 输出SHOW PROCESSLIST;my.cnf 配置我可以直接帮你判断 是配置问题还是 SQL 问题。