MariaDB在Ubuntu上的性能调优需结合硬件配置、配置文件优化、索引设计、查询优化、定期维护及监控等多方面协同调整,以下是具体技巧:
编辑MariaDB配置文件(/etc/mysql/mariadb.conf.d/50-server.cnf或/etc/my.cnf),重点调整以下参数:
innodb_buffer_pool_size:设置为系统内存的50%-70%(如4G内存可设为2.5G-3G),用于缓存InnoDB表的数据和索引,是提升性能的关键参数。innodb_log_file_size:增大重做日志文件大小(如256M-512M),减少日志刷盘频率,提高写入性能。innodb_flush_log_at_trx_commit:设为2(默认为1),牺牲部分数据安全性(如系统崩溃可能丢失1秒内的事务)以换取更高性能(适用于对数据一致性要求不高的场景)。max_connections:根据应用并发需求调整(如500-1000),避免过多连接导致资源耗尽;同时配合thread_cache_size(如16-32)缓存线程,减少线程创建/销毁的开销。tmp_table_size和max_heap_table_size:增加临时表大小(如256M-512M),避免大查询因临时表溢出到磁盘而变慢。CREATE INDEX idx_column ON table_name(column_name)),避免全表扫描。INDEX idx_name (column_name(10))),减小索引体积。INDEX idx_name_age (name, age)),遵循最左前缀原则(如查询条件包含name时会用到索引)。OPTIMIZE TABLE命令整理表碎片,恢复索引效率(尤其适用于频繁更新的表)。EXPLAIN分析查询:通过EXPLAIN SELECT ...查看查询执行计划,识别全表扫描、临时表、文件排序等问题(如type列为ALL表示全表扫描)。SELECT *:只查询需要的列(如SELECT id, name FROM users),减少数据传输量和内存消耗。JOIN替代)、减少函数调用(如WHERE DATE(create_time) = '2025-01-01'会导致索引失效,可改为WHERE create_time >= '2025-01-01' AND create_time < '2025-01-02')。LIMIT分页:对于海量数据分页,使用LIMIT offset, size(如LIMIT 1000, 20),避免OFFSET过大导致的性能下降。OPTIMIZE TABLE table_name命令整理表碎片,恢复存储空间(适用于频繁更新的InnoDB表)。mysqlbinlog)、慢查询日志(slow_query_log),避免日志文件过大占用磁盘空间。ANALYZE TABLE table_name命令更新表的统计信息,帮助查询优化器生成更优的执行计划。mysqldump或mariabackup备份数据库,确保数据安全(建议每日增量备份+每周全量备份)。slow_query_log = ON,long_query_time = 1),定期分析执行时间超过阈值的查询,针对性优化。top、htop、iostat、vmstat等命令监控系统资源使用情况(如CPU负载、内存剩余、磁盘读写速度),判断是否需要升级硬件。以上技巧需根据实际业务场景(如读多写少、高并发写入)和硬件配置(如内存大小、磁盘类型)灵活调整,建议在修改配置后重启MariaDB服务(systemctl restart mariadb)使更改生效。