温馨提示×

Ubuntu PHP日志中慢查询怎么解决

小樊
56
2025-08-29 03:38:11
栏目: 编程语言

解决Ubuntu PHP日志中的慢查询需从数据库、PHP代码、系统配置等多方面优化,具体步骤如下:

  1. 启用并分析数据库慢查询日志

    • 在MySQL配置文件(/etc/mysql/my.cnf)中开启慢查询日志:
      [mysqld]
      slow_query_log = 1
      slow_query_log_file = /var/log/mysql/slow.log
      long_query_time = 2  # 设置慢查询阈值(秒)
      
      重启MySQL使配置生效:sudo systemctl restart mysql
    • 使用工具分析日志:
      • mysqldumpslow -s t /var/log/mysql/slow.log:按执行时间排序查看慢查询。
      • pt-query-digest /var/log/mysql/slow.log:生成详细分析报告。
  2. 优化数据库查询

    • 添加索引:为查询条件字段(如WHERE、JOIN子句)添加索引,避免全表扫描。
    • 优化SQL语句:重写复杂查询,减少子查询、冗余字段,使用EXPLAIN分析执行计划。
    • 定期维护:清理碎片、优化表结构,对大表考虑分区。
  3. 优化PHP代码

    • 减少数据库交互:使用预处理语句(PDO/MySQLi)批量查询,避免循环中频繁访问数据库。
    • 启用缓存:对不常变化的数据使用OPcache、Memcached或Redis缓存查询结果。
    • 代码剖析:用Xdebug定位性能瓶颈,优化循环和递归逻辑。
  4. 调整PHP-FPM配置

    • 编辑配置文件(/etc/php/7.x/fpm/pool.d/www.conf):
      pm = dynamic
      pm.max_children = 50  # 根据服务器资源调整
      request_slowlog_timeout = 5s  # 记录执行超时的请求
      slowlog = /var/log/php-fpm/www-slow.log
      
      重启PHP-FPM:sudo systemctl restart php7.x-fpm
  5. 系统级优化

    • 升级硬件:增加内存、使用SSD存储提升I/O性能。
    • 监控工具:部署Prometheus+Grafana或New Relic,实时监控服务器负载和数据库性能。

关键操作优先级:先通过慢查询日志定位具体低效SQL,针对性优化数据库索引和查询;再调整PHP代码和配置减少不必要的计算与请求。

0