硬件优化
配置文件调优
innodb_buffer_pool_size
:设置为系统内存的60%-80%(InnoDB引擎核心参数,用于缓存数据和索引,直接影响查询性能)。key_buffer_size
:用于MyISAM索引缓存,若使用InnoDB可适当减小(如设置为16M-64M)。max_connections
:根据服务器资源(CPU、内存)调整最大连接数(如100-500),避免过多连接导致资源争抢。thread_cache_size
:设置为10-20,减少线程创建和销毁的开销(提升高并发下的连接处理效率)。innodb_log_file_size
:增大日志文件大小(如256M-512M),减少日志切换频率,提升写入性能。innodb_flush_log_at_trx_commit
:设置为2(平衡性能与数据安全性,牺牲少量持久性换取更高写入速度;若对数据安全性要求极高,建议保持1)。vm.swappiness
参数为0(或1-10),关闭swap功能,避免因内存不足导致数据交换引发的I/O负担。索引策略优化
WHERE
条件、JOIN
操作或排序的列创建索引(如主键、外键、高频查询字段),加速数据检索。SELECT name FROM users WHERE age > 18
,可为age
创建索引并包含name
),避免回表查询(减少磁盘I/O)。ALTER TABLE table_name ENGINE=InnoDB
或OPTIMIZE TABLE
命令重建索引,保持索引效率。查询语句优化
EXPLAIN SELECT ...
命令查看查询执行计划,识别全表扫描、未使用索引、临时表等问题(如type
列为ALL
表示全表扫描,需优化索引)。SELECT id, name FROM users
),减少数据传输量和内存占用(尤其适合大数据量查询)。JOIN
代替子查询)、避免使用OR
条件(可改用UNION
)、减少函数使用(如WHERE YEAR(create_time) = 2025
会导致索引失效,可改为WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31'
)。LIMIT
关键字控制返回记录数量(如SELECT * FROM orders LIMIT 10 OFFSET 20
),减小大数据量分页查询的数据传输压力。定期维护操作
OPTIMIZE TABLE
命令(如针对频繁更新的InnoDB表),整理表碎片,提升数据读取效率(注意:执行期间会锁表,建议在低峰期操作)。DELETE
语句或分区表自动归档实现)。binlog
,可通过expire_logs_days
参数设置保留天数)、慢查询日志(slow_query_log
,定期归档或删除),释放磁盘空间。ANALYZE TABLE
命令更新表的统计信息(如行数、索引基数),辅助优化器生成更优的执行计划(尤其适合数据变动频繁的表)。缓存机制应用
query_cache_size
为64M-256M(MariaDB 10.1.7及以上版本默认关闭,需手动开启),缓存重复查询结果(适合读多写少的场景;若写操作频繁,可能因缓存失效导致性能下降)。table_open_cache
参数(如设置为200-500),增加缓存表的数量,减少表打开和关闭的开销(适合频繁访问多个表的场景)。监控与分析工具
iostat
(监控磁盘I/O)、vmstat
(监控内存、CPU、I/O)、top
(监控进程资源占用)、sar
(系统活动报告)等工具,实时监控服务器资源使用情况(如磁盘I/O过高需优化存储,内存不足需增加内存)。SHOW STATUS
(查看数据库状态变量,如Queries
表示总查询数、Slow_queries
表示慢查询数)、SHOW PROCESSLIST
(查看当前执行的查询,识别长时间运行的查询)、慢查询日志
(记录执行时间超过阈值的查询,用于针对性优化)等命令,分析数据库性能瓶颈。