温馨提示×

ubuntu mariadb如何优化

小樊
42
2026-09-22 21:15:04
栏目: 云计算

下面从系统层、MariaDB 配置层、SQL 与索引、监控与维护四个维度,给你一份在 Ubuntu + MariaDB 上比较实用的优化指南(适用于 10.3+,也适合 MySQL 思路)。


一、系统层优化(Ubuntu)

1. 使用合适的文件系统

  • 推荐:ext4xfs
  • 挂载选项(示例):
defaults,noatime,nodiratime,barrier=0

(生产环境谨慎关闭 barrier)

2. 调整内核参数

# 提高文件句柄
fs.file-max = 1000000

# TCP 优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

3. 关闭 Swap(或降低使用)

sysctl vm.swappiness=10

4. 使用 SSD / NVMe

对数据库性能提升最大。


二、MariaDB 核心配置优化(my.cnf)

配置文件位置:

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

1. 内存相关(最重要)

假设 服务器 8G 内存,专用数据库

innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 5

经验:

  • 专用 DB:buffer_pool ≈ 70%~80% 内存
  • 混合环境:50%

2. InnoDB 优化

innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1

trx_commit=2 提高性能,但崩溃可能丢 1 秒数据(看业务)

3. 连接与线程

max_connections = 500
thread_cache_size = 100

避免:

max_connections = 2000  # 没内存直接崩

4. 查询缓存(MariaDB 10.6+ 已移除)

  • 10.1~10.5:
query_cache_type = 0

(高并发几乎必关)


三、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

分析:

mysqldumpslow -s t /var/log/mysql/slow.log

2. 索引原则

  • WHERE / JOIN / ORDER BY 字段建索引
  • 不要在索引列上使用函数
-- 错误
WHERE DATE(create_time) = '2024-01-01'

-- 正确
WHERE create_time >= '2024-01-01'

3. 避免 SELECT *

SELECT id, name FROM user;

4. 使用 EXPLAIN

EXPLAIN SELECT * FROM orders WHERE user_id = 10;

关注:

  • type(ALL 最差)
  • rows(越大越慢)
  • key(是否用索引)

四、日常维护与监控

1. 表优化

OPTIMIZE TABLE table_name;

(InnoDB 可定期做)

2. 统计信息

ANALYZE TABLE table_name;

3. 监控工具

  • htop
  • iotop
  • mytop
  • pt-query-digest
  • Prometheus + Grafana

五、常见性能问题速查

现象 可能原因
CPU 高 慢 SQL / 缺索引
IO 高 buffer pool 小
连接爆 max_connections 低
写慢 刷盘策略 / 磁盘差

六、如果你愿意,我可以:

  • ✅ 根据你的 内存 / 并发量 给一份 my.cnf
  • ✅ 分析你的 慢查询 SQL
  • ✅ 对比 MariaDB vs MySQL
  • ✅ 给你 高并发 / 电商 / 日志型 专项方案

你可以直接贴:

Ubuntu 版本 + MariaDB 版本 + 内存 + 业务类型

0