在修改MariaDB内存配置前,需完成以下基础工作:
/etc/mysql/mariadb.conf.d/50-server.cnf(或/etc/my.cnf),防止配置错误导致服务无法启动;SHOW ENGINES;命令确认当前使用的存储引擎(如InnoDB或MyISAM),不同引擎的核心内存参数不同;free -m命令查看系统可用内存,确保调整后不会因内存占用过高导致系统OOM(Out of Memory)。MariaDB内存使用主要由存储引擎缓冲池、临时表、线程内存等参数决定,以下是关键参数的调整逻辑与建议:
innodb_buffer_pool_size = 4G(适用于4GB内存服务器)。Key_reads/Key_read_requests状态值优化,理想比例≤1:1000)。ORDER BY、GROUP BY或DISTINCT操作,可适当增大该值(如256M);tmp_table_size = max_heap_table_size(避免临时表在内存与磁盘间频繁切换);tmp_table_size = 256M; max_heap_table_size = 256M。thread_cache_size(缓存空闲线程,减少线程创建开销);max_connections = 100(需结合thread_cache_size优化)。除核心参数外,以下参数可进一步提升内存使用效率:
query_cache_type = OFF),建议保持关闭;query_cache_size = 64M(需测试性能影响)。innodb_log_files_in_group(默认2)使用,总日志大小不超过512GB;mysql_upgrade(若版本支持)。1(默认):每次事务提交都刷新日志到磁盘(最安全,但性能最差);2:每次提交写入日志文件,每秒刷新到磁盘(性能较好,但系统崩溃可能丢失1秒数据);0:每秒写入并刷新日志(性能最好,但系统崩溃可能丢失1秒数据);1(若对数据安全性要求不高,可设为2提升性能)。max_connections受系统文件描述符限制(默认1024),需提高限制以避免连接失败。ulimit -n 65535;/etc/security/limits.conf,添加* soft nofile 65535; * hard nofile 65535。vm.swappiness = 10(降低系统使用交换分区的倾向,优先使用物理内存);vm.vfs_cache_pressure = 50(加快系统回收目录和inode缓存的速度);/etc/sysctl.conf,添加上述参数后执行sysctl -p生效。buff/cache占用过高时,手动或自动清理缓存以释放内存(不影响MariaDB运行)。echo 3 > /proc/sys/vm/drop_caches(清理pagecache、dentries、inodes);clean.sh),添加sync; echo 3 > /proc/sys/vm/drop_caches,并通过crontab每2小时执行一次(需root权限)。调整后需通过以下方式验证效果并持续监控:
systemctl restart mariadb.service(使配置生效);SHOW ENGINE INNODB STATUS\G、SHOW GLOBAL STATUS LIKE 'Memory%'或free -m命令查看内存占用情况;slow_query_log = ON),通过mysqldumpslow或pt-query-digest分析慢查询,针对性优化SQL;