1. 确认慢查询来源
Debian Apache本身不直接记录数据库慢查询,慢查询通常来自后端数据库(如MySQL、PostgreSQL)。需先明确慢查询的来源:若为数据库查询慢,需配置数据库慢查询日志;若为Apache处理请求慢(如静态资源加载慢、脚本执行慢),则需分析Apache日志。
2. 配置数据库慢查询日志(以MySQL为例)
若慢查询源于数据库,需开启MySQL慢查询日志并设置阈值:
SET GLOBAL slow_query_log = ON;开启慢查询日志;SET GLOBAL long_query_time = 1;(线上业务建议设为1秒,关键业务可设为0.1秒);SHOW VARIABLES LIKE 'slow_query_log_file';(默认在MySQL数据目录,文件名为主机名.log)。3. 优化Apache日志以记录请求处理时间
为精准定位Apache处理慢的请求,需修改Apache日志格式,包含请求处理时间:
/etc/apache2/apache2.conf或虚拟主机配置文件),修改LogFormat指令,添加%{ms}T(记录处理时间,单位:毫秒),例如:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{ms}T" combined_with_time;CustomLog使用新格式(如CustomLog /var/log/apache2/access_log combined_with_time);sudo systemctl restart apache2。4. 分析慢查询日志/请求
mysqldumpslow工具分析MySQL慢查询日志,例如获取返回记录最多的10条慢查询:mysqldumpslow -s r -t 10 /var/lib/mysql/slow.log;或使用EXPLAIN命令分析具体查询的执行计划(如EXPLAIN SELECT * FROM users WHERE id = 1;),查看是否命中索引、是否存在全表扫描。awk命令筛选出处理时间超过阈值的请求(如超过500毫秒):awk '$NF > 500 {print $0}' /var/log/apache2/access_log(假设最后一列为处理时间);或使用日志分析工具(如GoAccess、ELK Stack)可视化请求时间分布,快速定位高频慢请求。5. 针对性优化措施
EXPLAIN结果优化SQL(如添加缺失的索引、优化查询条件、分批处理大查询);调整数据库配置(如增大InnoDB缓冲池大小innodb_buffer_pool_size、优化表引擎)。mod_deflate)减少传输时间;配置缓存(mod_cache、mod_disk_cache)减少对数据库的直接访问;调整MPM(多路复用模块)设置(如event模式适用于高并发场景);禁用不必要的模块(如mod_autoindex若不需要目录列表)。display_errors = Off);压缩静态资源(如图片、CSS、JS);使用CDN分发静态内容,减少服务器负载。6. 监控与持续优化