开启慢查询日志
在MySQL配置文件(my.cnf
)中设置:
[mysqld]
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2 # 超过2秒的查询会被记录
重启MySQL生效:systemctl restart mysqld
。
分析慢查询日志
使用工具(如mysqldumpslow
或pt-query-digest
)分析日志,定位低效SQL:
mysqldumpslow -s t /var/log/mysql/slow.log # 按执行时间排序
```。
优化SQL语句
SELECT *
,只查询必要字段。JOIN
替代子查询,减少查询次数。LIMIT
分页,避免返回大量数据。调整数据库参数
innodb_buffer_pool_size
(建议设置为服务器内存的50%~70%),提升缓存效率。max_connections
,避免连接数过多导致性能下降。启用OPcache
在php.ini
中配置:
[opcache]
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=10000
重启PHP-FPM生效:systemctl restart php-fpm
。
减少数据库查询
优化代码逻辑
调整PHP-FPM参数
编辑/etc/php-fpm.d/www.conf
:
pm.max_children
:根据服务器内存调整(建议设置为CPU核心数的2~4倍)。request_terminate_timeout
:设置超时时间(如30秒),避免长时间占用资源。启用缓存机制
监控与调优
top
/htop
监控服务器负载,及时调整资源。读写分离
将读操作和写操作分离到不同数据库实例,减轻主库压力。
分库分表
对大表数据进行分片存储,降低单表查询压力。