在 Ubuntu 上优化 MariaDB,通常可以从系统层面、MariaDB 配置、Schema 与 SQL、监控几个方面入手。下面给你一份比较实用、可落地的优化指南(适用于 Ubuntu 20.04/22.04 + MariaDB 10.5/10.6/10.11)。
swapon --show
建议保留少量 swap(防止 OOM)ext4xfs(更好)noatime,nodiratime
编辑 /etc/sysctl.conf:
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
应用:
sysctl -p
配置文件位置(Ubuntu):
/etc/mysql/mariadb.conf.d/50-server.cnf
[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
max_connections = 200
thread_cache_size = 50
wait_timeout = 600
interactive_timeout = 600
MariaDB 10.1+ 已移除 Query Cache
→ 不要配置 query_cache_*
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
InnoDBINT 不用 BIGINT)TEXT/BLOB 过多EXPLAIN SELECT * FROM user WHERE name = 'tom';
建议:
WHERE / JOIN / ORDER BY 字段建索引SELECT *WHERE id > ? ORDER BY id LIMIT 20
OPTIMIZE TABLE table_name;
ANALYZE TABLE table_name;
SHOW PROCESSLIST;
SHOW STATUS LIKE 'Threads%';
SHOW ENGINE INNODB STATUS;
mytoppt-query-digestPrometheus + Grafana[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你可以直接贴:
Ubuntu 版本 + MariaDB 版本 + 内存大小 + 主要业务类型