Linux环境下MariaDB性能优化策略
/etc/mysql/mariadb.conf.d/50-server.cnf或/etc/my.cnf),重点优化以下参数:
innodb_buffer_pool_size:设置为系统内存的50%-80%(InnoDB引擎的核心缓存,直接影响数据读取效率,是性能优化的首要参数);innodb_log_file_size:增大重做日志文件大小(如256M-1G),减少日志切换频率,提升写入性能;max_connections:根据应用并发需求调整(如500-1000),避免过多连接导致资源耗尽;tmp_table_size与max_heap_table_size:增加临时表大小(如256M),减少磁盘临时表的使用(降低I/O开销);innodb_flush_log_at_trx_commit:设置为2(平衡性能与数据安全性,牺牲少量持久性以提升写入速度,适用于对性能要求高的场景)。WHERE、JOIN、ORDER BY的列创建索引(如主键、唯一键、普通索引);避免过度索引(过多索引会增加写操作的开销,如INSERT、UPDATE);INDEX idx_name (column_name(10))),减小索引体积;对多列联合查询使用组合索引(遵循最左前缀原则,如INDEX idx_name_age (name, age));ANALYZE TABLE更新索引统计信息(帮助优化器选择更优的执行计划);使用OPTIMIZE TABLE重建碎片化索引(提升索引查询效率)。EXPLAIN SELECT ...命令查看查询执行计划,识别全表扫描、临时表、文件排序等性能瓶颈(如type列为ALL表示全表扫描,需优化索引);SELECT *(仅选择需要的列,减少数据传输量);用JOIN代替子查询(子查询可能导致临时表创建,JOIN效率更高);合理使用LIMIT(分页查询时避免OFFSET过大,如LIMIT 10000, 10改为WHERE id > 10000 LIMIT 10);WHERE子句中对列使用函数或计算(如WHERE YEAR(create_time) = 2025),会导致索引失效,改用范围查询(如WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31')。OPTIMIZE TABLE命令(针对InnoDB表,整理碎片、回收空间,提升查询效率);mysqldump或专业工具(如Percona XtraBackup)定期备份数据,同时归档慢查询日志、错误日志(避免日志文件过大占用磁盘空间)。slow_query_log = ON,设置long_query_time阈值,如1秒),使用pt-query-digest或mysqldumpslow工具分析慢查询,定位性能瓶颈并针对性优化。query_cache_size(如64M-256M),开启查询缓存(适用于读多写少的场景,减少重复查询的开销);