硬件优化
配置优化
innodb_buffer_pool_size是InnoDB存储引擎的核心配置,建议设置为系统内存的50%-80%,用于缓存数据和索引,减少磁盘访问;key_buffer_size用于MyISAM表的索引缓存,若使用InnoDB可适当减小。max_connections根据应用实际并发需求调整(如500-1000),避免过多连接导致资源耗尽;thread_cache_size设置为100-200,缓存空闲线程,减少线程创建和销毁的开销。innodb_log_file_size设置为256M-512M,增大日志文件大小可减少日志切换频率,提升写入性能;innodb_flush_log_at_trx_commit设置为2(牺牲少量数据安全性换取性能),适用于对性能要求高的场景;查询缓存(query_cache_size)在MariaDB 10.0后移除,建议使用Redis或Memcached替代。/etc/sysctl.conf中的vm.swappiness=10(减少内存交换)、fs.aio-max-nr=65536(提升异步I/O性能),优化系统资源调度。索引优化
WHERE子句、JOIN条件或排序的列创建索引(如CREATE INDEX idx_user_id ON users(user_id)),避免全表扫描。WHERE user_id=1 AND status=1),创建复合索引(CREATE INDEX idx_user_status ON users(user_id, status)),提高多列查询效率。OPTIMIZE TABLE或ALTER TABLE ... REBUILD INDEX,保持索引高效性。查询优化
EXPLAIN SELECT ...命令查看查询执行计划,识别全表扫描、临时表、文件排序等性能瓶颈,针对性优化查询语句。SELECT id, name FROM users),减少数据传输量和内存占用,提升查询效率。JOIN替代)、避免在WHERE子句中对字段进行函数操作(如WHERE DATE(create_time)=...),减少索引失效的情况。LIMIT offset, size分页,避免一次性返回过多数据,减少网络传输和内存消耗。定期维护
OPTIMIZE TABLE命令(如每月一次),整理表碎片,回收未使用的空间,提升表访问效率。slow_query_log)、错误日志和二进制日志(binlog),释放磁盘空间,避免日志文件过大影响性能。ANALYZE TABLE命令更新表的统计信息,帮助查询优化器生成更优的执行计划,提升查询准确性。监控与调优
slow_query_log=1(记录执行时间超过long_query_time的查询),通过pt-query-digest或mysqldumpslow工具分析慢查询,定位性能瓶颈并优化。top、htop、iostat、vmstat等命令,定期检查系统资源使用情况,识别CPU、内存、磁盘I/O的瓶颈,提前调整配置。