温馨提示×

ubuntu mariadb如何性能调优

小樊
55
2026-10-28 13:21:59
栏目: 云计算

在 Ubuntu 上针对 MariaDB 做性能调优,通常分为 系统层、数据库配置层、SQL 与索引层、监控层 四个方向。下面给你一套实用、可落地的调优思路(适用于 10.3+ 版本,Ubuntu 20.04/22.04)。


一、系统层调优(Ubuntu)

1. 内存与 Swap

free -h
swapon -s
  • 物理内存 ≥ 4G 时,尽量 减少 swap 使用
  • 修改 swappiness:
sudo sysctl vm.swappiness=10

永久生效:

echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf

2. 文件描述符限制

ulimit -n

建议 ≥ 65535
编辑:

sudo nano /etc/security/limits.conf
mysql soft nofile 65535
mysql hard nofile 65535

3. 磁盘 I/O(非常重要)

  • 使用 SSD / NVMe
  • 文件系统推荐 ext4 或 xfs
  • 挂载选项:
noatime,nodiratime

二、MariaDB 核心配置调优

配置文件位置:

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

1. 内存相关(最关键)

InnoDB Buffer Pool(占物理内存 60%~70%)

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 提高性能但略降安全性(可接受场景)


2. 连接与线程

max_connections = 500
thread_cache_size = 100

查看当前连接:

SHOW STATUS LIKE 'Threads_connected';

3. 查询缓存(MariaDB 10.1+ 已不推荐)

query_cache_type = 0
query_cache_size = 0

4. 临时表与排序

tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
read_buffer_size = 2M

三、SQL 与索引优化(见效最快)

1. 慢查询日志

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

2. 索引原则

  • WHERE / JOIN / ORDER BY 字段建索引
  • 避免:
SELECT *
LIKE '%xx%'
函数包裹字段

3. EXPLAIN 必看

EXPLAIN SELECT * FROM orders WHERE user_id = 1;

关注:

  • type(ALL 最差,ref/index 好)
  • rows(越小越好)
  • Extra(Using filesort / temporary 要优化)

四、维护与监控

1. 表优化

OPTIMIZE TABLE table_name;

2. 定期分析

ANALYZE TABLE table_name;

3. 监控工具

  • mytop
  • pt-query-digest
  • Prometheus + Grafana
  • SHOW GLOBAL STATUS;

五、快速一键检查(推荐)

sudo mysqladmin status
mysql -e "SHOW ENGINE INNODB STATUS\G"

六、常见性能问题对照表

现象 原因 解决
CPU 高 慢 SQL 加索引
磁盘 IO 高 buffer pool 小 调大
连接满 max_connections 调大
写慢 sync 强 trx_commit=2

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • MariaDB 版本
  • 内存大小
  • 主要业务(Web / API / 报表)

我可以 直接帮你写一份最优 my.cnf 配置。

0 踩