centos

CentOS PHP日志中慢查询优化建议

小樊
33
2025-08-22 21:21:04
栏目: 编程语言

一、数据库层面优化

  1. 开启慢查询日志
    在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

  2. 分析慢查询日志
    使用工具(如mysqldumpslowpt-query-digest)分析日志,定位低效SQL:

    mysqldumpslow -s t /var/log/mysql/slow.log  # 按执行时间排序
    ```。  
    
    
  3. 优化SQL语句

    • 为查询条件字段添加索引,避免全表扫描。
    • 避免SELECT *,只查询必要字段。
    • JOIN替代子查询,减少查询次数。
    • 使用LIMIT分页,避免返回大量数据。
  4. 调整数据库参数

    • 增加innodb_buffer_pool_size(建议设置为服务器内存的50%~70%),提升缓存效率。
    • 优化max_connections,避免连接数过多导致性能下降。

二、PHP代码层面优化

  1. 启用OPcache
    php.ini中配置:

    [opcache]
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.max_accelerated_files=10000
    

    重启PHP-FPM生效:systemctl restart php-fpm

  2. 减少数据库查询

    • 合并多次查询为批量操作,避免循环中执行SQL。
    • 使用预处理语句(PDO/MySQLi)防止SQL注入并提升性能。
  3. 优化代码逻辑

    • 避免在循环中使用全局变量或复杂计算,将计算移至循环外。
    • 使用高效的数据结构(如数组替代对象)和算法。

三、服务器配置优化

  1. 调整PHP-FPM参数
    编辑/etc/php-fpm.d/www.conf

    • pm.max_children:根据服务器内存调整(建议设置为CPU核心数的2~4倍)。
    • request_terminate_timeout:设置超时时间(如30秒),避免长时间占用资源。
  2. 启用缓存机制

    • 使用Redis或Memcached缓存频繁访问的数据,减少数据库压力。
    • 配置Nginx静态资源缓存,减轻PHP处理压力。
  3. 监控与调优

    • 使用top/htop监控服务器负载,及时调整资源。
    • 定期更新系统和软件包,修复性能漏洞。

四、架构级优化

  1. 读写分离
    将读操作和写操作分离到不同数据库实例,减轻主库压力。

  2. 分库分表
    对大表数据进行分片存储,降低单表查询压力。

0
看了该问题的人还看了