迁移至Azure App Service与MySQL灵活服务器后WordPress站点极慢如何排查
问题排查与优化步骤
- 拆解admin-ajax.php的耗时构成
首先在WordPress配置文件wp-config.php中开启查询统计:添加define( 'SAVEQUERIES', true );,配合Query Monitor插件可直接查看单个admin-ajax请求中PHP执行耗时、数据库查询总耗时、每条查询的执行时间,定位是逻辑执行慢还是数据库查询慢。同时在Azure Database for MySQL Flexible Server控制台开启慢查询日志,设置慢查询阈值为1秒,匹配是否有未优化的慢SQL拖慢请求。 - 验证App Service到MySQL的实际网络链路
不要默认同区域就没有网络问题,首先确认MySQL的网络访问规则:如果MySQL开启了VNet访问限制,检查App Service是否已配置同VNet集成,避免流量绕公网传输导致延迟升高。之后登录App Service的SSH控制台,用mysql客户端直连数据库执行SELECT 1;测试单次请求的往返耗时,同时用mtr工具测试3306端口的链路抖动情况。另外检查是否开启了MySQL持久化连接,避免每次admin-ajax请求都重新建立数据库连接产生额外握手开销。 - 检查Azure服务配置是否存在性能瓶颈
- MySQL侧确认
innodb_buffer_pool_size参数配置,建议设置为实例内存的50%~70%,保证常用表数据能缓存在内存中,避免频繁读磁盘; - App Service侧确认是否开启PHP OPcache扩展,未开启会导致每次PHP请求都重新编译脚本,产生不必要的耗时;
- 对比原虚拟机的磁盘IO性能,App Service默认使用网络存储,若站点有频繁的本地文件读写(如缓存文件生成、日志写入),会比本地磁盘有更高的延迟,可考虑将缓存、日志类操作迁移到Redis等内存存储中。
- MySQL侧确认
- 针对性优化admin-ajax调用逻辑
定位到admin-ajax对应的业务逻辑后,如果是高频且非实时的查询,可接入同区域的Azure Cache for Redis作为WordPress对象缓存,缓存查询结果避免每次请求都访问数据库;对于面向访客的无身份校验admin-ajax接口,可改为调用WordPress REST API并配置CDN/服务端缓存规则,直接返回缓存结果无需打到PHP后端。
内容的提问来源于stack exchange,提问作者Faye
相关产品推荐
相关产品推荐

