温馨提示×

ubuntu mariadb怎样优化

小樊
50
2026-09-25 20:42:10
栏目: 云计算

在 Ubuntu 上优化 MariaDB,通常可以从系统层面、MariaDB 配置、Schema 与 SQL、监控几个方面入手。下面给你一份比较实用、可落地的优化指南(适用于 Ubuntu 20.04/22.04 + MariaDB 10.5/10.6/10.11)。


一、系统层面优化(Ubuntu)

1. 内存与 Swap

  • 物理内存:MariaDB 很吃内存,尽量保证足够内存
  • Swap:
    swapon --show
    
    建议保留少量 swap(防止 OOM)

2. 文件系统

  • 推荐使用:
    • ext4
    • xfs(更好)
  • 挂载参数(示例):
    noatime,nodiratime
    

3. 内核参数优化

编辑 /etc/sysctl.conf:

vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

应用:

sysctl -p

二、MariaDB 核心配置优化

配置文件位置(Ubuntu):

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

1. 基础内存配置(最重要)

InnoDB(默认引擎)

[mysqld]
innodb_buffer_pool_size = 4G      # 物理内存的 60%~70%
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

⚠️ 修改 innodb_log_file_size 需要:

systemctl stop mariadb
rm -f /var/lib/mysql/ib_logfile*
systemctl start mariadb

2. 连接与线程

max_connections = 200
thread_cache_size = 50
wait_timeout = 600
interactive_timeout = 600

3. 查询缓存(注意)

MariaDB 10.1+ 已移除 Query Cache → 不要配置 query_cache_*

4. 日志与慢查询

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

三、数据库 Schema 与 SQL 优化

1. 表结构

  • 使用 InnoDB
  • 合理选择字段类型(如 INT 不用 BIGINT)
  • 避免 TEXT/BLOB 过多

2. 索引优化

EXPLAIN SELECT * FROM user WHERE name = 'tom';

建议:

  • 高频 WHERE / JOIN / ORDER BY 字段建索引
  • 复合索引注意最左前缀
  • 避免索引失效(函数、隐式转换)

3. 避免全表扫描

  • 不要 SELECT *
  • 分页用:
    WHERE id > ? ORDER BY id LIMIT 20
    

四、日常维护

1. 表优化

OPTIMIZE TABLE table_name;

2. 统计信息

ANALYZE TABLE table_name;

3. 定期清理

  • binlog
  • 慢日志
  • 临时表

五、监控与诊断工具

1. 自带

SHOW PROCESSLIST;
SHOW STATUS LIKE 'Threads%';
SHOW ENGINE INNODB STATUS;

2. 第三方

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

六、示例:典型优化配置(8G 内存服务器)

[mysqld]
innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 4
innodb_log_file_size = 512M
innodb_flush_method = O_DIRECT
max_connections = 200
slow_query_log = 1
long_query_time = 1

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

  • ✅ 根据你的 内存 / 业务类型 给一份定制配置
  • ✅ 分析你的 my.cnf
  • ✅ 帮你优化某条慢 SQL
  • ✅ 对比 MySQL vs MariaDB 优化差异

你可以直接贴:

Ubuntu 版本 + MariaDB 版本 + 内存大小 + 主要业务类型

0 踩