1. 升级内存:MySQL依赖内存缓存数据和索引,建议将物理内存分配70%-80%给innodb_buffer_pool_size(如32GB内存服务器可设置为22-25GB),以减少磁盘I/O。
2. 使用SSD存储:SSD的随机读写速度远快于传统HDD,能显著降低数据库操作的延迟,尤其适合高并发场景。
3. 优化CPU配置:选择多核心、高主频的CPU(如Intel Xeon或AMD EPYC系列),提升并发处理能力,满足多线程查询需求。
1. 调整内核参数:修改/etc/sysctl.conf文件,增加TCP连接数限制和系统打开文件数上限,避免高并发时资源耗尽。关键参数如下:
net.ipv4.ip_local_port_range = 1024 65000 # 扩大本地端口范围
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT状态的连接
net.ipv4.tcp_fin_timeout = 30 # 缩短TIME_WAIT状态的超时时间(秒)
fs.file-max = 65535 # 增加系统最大打开文件数
执行sysctl -p使配置生效。
2. 选择高性能文件系统:推荐使用ext4(支持大文件和高并发)或XFS(适合大容量存储),并进行挂载优化(如noatime选项减少文件访问时间记录)。
3. 关闭Swap分区:Swap会强制将内存数据写入磁盘,严重影响性能。可通过swapoff -a临时关闭,或在/etc/fstab中注释Swap条目永久禁用。
1. InnoDB引擎调优:
innodb_buffer_pool_size:设置为服务器总内存的50%-80%(如8GB内存设为4-6GB),用于缓存数据和索引,是InnoDB性能的核心参数。innodb_log_file_size:设置为innodb_buffer_pool_size的25%-50%(如4GB缓冲池设为1-2GB),增大日志文件可减少日志切换频率,提升写性能。innodb_flush_log_at_trx_commit:设为2(每秒刷新日志到磁盘),平衡性能与数据安全性(若对数据一致性要求极高,设为1)。innodb_thread_concurrency:设置为CPU核心数的2倍(如8核CPU设为16),优化并发线程处理。2. 连接与缓存优化:
max_connections:根据应用负载设置(如500-1000),避免过多连接导致内存溢出;同时调整thread_cache_size(如50),缓存空闲线程以减少创建开销。tmp_table_size和max_heap_table_size:设置为64MB-256MB,控制内存临时表的最大大小,避免大查询使用磁盘临时表。3. 日志与查询优化:
slow_query_log = 1:开启慢查询日志,记录执行时间超过long_query_time(如2秒)的查询。query_cache_size:MySQL 8.0及以上版本已移除查询缓存,无需设置;若使用5.7及以下版本,可设为64MB(仅适用于高重复率查询场景)。1. 使用EXPLAIN分析查询:通过EXPLAIN SELECT ...命令查看查询执行计划,识别全表扫描、索引失效等问题(如type列为ALL表示全表扫描)。
2. 优化SQL语句:
SELECT *:只查询需要的列,减少数据传输量和内存占用。LIMIT分页:避免深度分页(如LIMIT 10000, 10),可改用覆盖索引或延迟关联优化。WHERE子句中对字段使用函数(如WHERE DATE(create_time) = '2025-10-25')会导致索引失效,应改为WHERE create_time >= '2025-10-25' AND create_time < '2025-10-26'。3. 索引策略优化:
WHERE、JOIN、ORDER BY中的字段)创建索引,优先选择联合索引(遵循最左匹配原则,如(user_id, order_date))。INSERT、UPDATE),定期清理未使用的索引。SELECT user_id, order_date FROM orders WHERE user_id = 1),无需回查原表,提升查询速度。1. 优化表:使用OPTIMIZE TABLE命令整理表碎片,回收空间(适用于频繁更新的表,如日志表、订单表)。注意:该操作会锁表,建议在低峰期执行。
2. 更新统计信息:通过ANALYZE TABLE命令更新表的统计信息,帮助优化器生成更优的执行计划(如ANALYZE TABLE users)。
3. 清理日志:定期清理慢查询日志、错误日志(如使用logrotate工具),避免日志文件过大占用磁盘空间。
1. 使用监控工具:通过pt-query-digest(Percona Toolkit)分析慢查询日志,找出Top慢查询;使用Prometheus + Grafana搭建实时监控面板,跟踪QPS(每秒查询数)、TPS(每秒事务数)、InnoDB缓冲池命中率等指标。
2. 压力测试:使用sysbench或mysqlslap工具模拟高并发场景,测试数据库性能瓶颈(如连接数、磁盘I/O、CPU利用率),根据测试结果调整配置。