开启慢查询日志
在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监控服务器负载,及时调整资源。读写分离
将读操作和写操作分离到不同数据库实例,减轻主库压力。
分库分表
对大表数据进行分片存储,降低单表查询压力。