MariaDB 性能调优与并发优化教程|解决卡顿、慢查询、高并发卡死

默认安装的 MariaDB 配置极其保守,仅适合本地测试。一旦上线网站、API、小程序、商城系统,会出现:CPU 占用高、查询缓慢、并发连接超时、数据库卡死、502 报错等问题。

本文基于 Ubuntu 26.04 + MariaDB 11.8 环境,提供一套通用生产级调优方案,包含内存缓冲优化、并发连接调整、慢查询日志、IO 优化、超时优化、安全参数优化,中小服务器直接套用即可大幅提升性能。

先确定已经安装了Mariadb数据库,没有安装请参考:Ubuntu 26.04 安装配置 MariaDB 教程

一、调优前置:查看默认状态

先进入数据库查看当前运行状态,方便调优前后对比:

sudo mariadb

常用查看命令:

-- 查看最大连接数
show variables like 'max_connections';

-- 查看当前连接数
show status like 'Threads_connected';

-- 查看慢查询是否开启
show variables like 'slow_query%';

-- 查看缓存参数
show variables like 'innodb_buffer_pool_size';

二、核心配置文件介绍

MariaDB 主要配置文件路径:

/etc/mysql/mariadb.conf.d/50-server.cnf

所有性能优化均修改此文件,修改后重启数据库生效:

sudo systemctl restart mariadb

三、生产级全套性能优化参数

根据 1核2G~4核8G 通用云服务器 编写,90% 个人/企业项目通用。

打开配置文件:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

找到 [mysqld] 节点,清空原有自定义参数,添加以下全套优化配置:

# 基础字符集优化
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-name-resolve

# 最大并发连接数
max_connections = 800

# 超时优化,解决Sleep连接堆积
wait_timeout = 600
interactive_timeout = 600

# InnoDB核心内存缓冲(最重要)
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1

# 并发线程优化
innodb_thread_concurrency = 8
innodb_read_io_threads = 8
innodb_write_io_threads = 8

# 关闭不必要日志、提升IO性能
slow_query_log = ON
slow_query_log_file = /var/log/mariadb/slow.log
long_query_time = 2

# 临时表优化
tmp_table_size = 64M
max_heap_table_size = 64M

# 排序与分组优化
sort_buffer_size = 2M
join_buffer_size = 2M

四、关键参数详细讲解(看懂才算会调优)

1、innodb_buffer_pool_size(最核心)

这是 MariaDB 最重要参数,决定数据库读取速度。

  • 2G 内存服务器:设置 1G
  • 4G 内存服务器:设置 2G
  • 8G 内存服务器:设置 4G

原则:服务器内存的 50%~60% 分配给数据库。

2、max_connections 最大并发

默认仅 151,高并发瞬间爆满,导致网站 503/卡死。

中小项目设置 800~1000 足够使用。

3、超时时间 wait_timeout

默认 8小时,大量闲置 Sleep 连接占满连接池。优化为 10分钟自动释放无效连接。

4、慢查询日志

自动记录 执行超过2秒 的 SQL,方便后期排查网站卡顿原因。

五、针对不同配置服务器的适配方案

1、1核2G 低配机器(博客、小型站点)

innodb_buffer_pool_size = 512M
max_connections = 500

2、2核4G 主流机器(企业站、商城、API)

innodb_buffer_pool_size = 2G
max_connections = 800

3、4核8G 高配机器(高并发项目)

innodb_buffer_pool_size = 4G
max_connections = 1200

六、重启服务并验证调优效果

sudo systemctl restart mariadb

进入数据库验证参数是否生效:

show variables like '%max_connections%';
show variables like '%innodb_buffer_pool_size%';

七、日常运维:如何排查数据库卡顿

1、查看当前实时连接

show processlist;

2、查看慢查询日志

tail -f /var/log/mariadb/slow.log

3、清理卡死连接

找到异常 ID 执行 kill:

kill 连接ID;

八、生产环境最佳实践

  • 禁止默认配置上线,低配参数会导致后期频繁卡顿
  • 内存缓冲务必根据服务器内存调整,过大导致内存溢出
  • 开启慢查询日志,定期优化低效 SQL
  • 配合定时备份策略,性能与数据安全双重保障
  • 高并发项目禁止频繁大事务、全表查询、无索引查询

九、常见问题解决

1、重启数据库失败 多半是内存设置过大,超出服务器承载,适当调小 innodb_buffer_pool_size。

2、网站偶尔超时 调整 wait_timeout,清理堆积睡眠连接,优化慢 SQL。

3、CPU 占用持续很高 90% 是 SQL 无索引、全表扫描,通过慢查询日志定位优化。


至此,本站完成了 MariaDB 完整运维专栏三部曲:安装部署、自动备份、性能调优。三套教程组合,可直接搭建一套安全、稳定、高性能、可自动容错的生产数据库环境,完全满足个人建站、企业项目、API 服务、中小型商城系统使用。

后续可配合索引优化、主从复制、读写分离进一步提升项目承载能力。

本文首发于 58Linux技术博客,专注Ubuntu桌面使用、Linux服务器运维与网站搭建实战。

发表评论

粤ICP备10052831号 | © 2026 58Linux 技术笔记. All Rights Reserved. | 联系我们 | 关于本站
本站内容开放共享,仅供学习交流 | 专注 Ubuntu & Linux 实战教程
Built with GeneratePress