使用 PHP (Wordpress) 的 Azure 应用服务上的 mysql 速度非常慢

使用 PHP (Wordpress) 的 Azure 应用服务上的 mysql 速度非常慢

我正在尝试修复 Azure 应用服务与 Azure 数据库连接速度非常慢的问题。

从廉价的 OVH 托管服务器迁移 Wordpress 后,我注意到 TTFB 非常长:从 300-400 毫秒增加到 1500-3000 毫秒。

我将问题缩小到应用服务 - 数据库连接问题。为了查明问题,我创建了干净的 Wordpress 安装。根据 P3 - 插件性能分析器,干净的 WP 安装会创建 38 个数据库查询。

使用 PHP/MySQL CPU 性能统计插件我运行了 MySql 测试:

  • Azure 应用服务:每秒 20-50 个数据库查询
  • 廉价 OVH 托管:每秒 200+ 数据库查询

我认为,如果 200 美元/月的 Azure stack 比 10 美元的 OVH 慢大约 20 倍,那么问题就非常明显了(但是:我发现即使每秒约 40 db 查询也会导致 TTFB 达到 300ms 左右,这正是我的目标)。

为了解决这个问题,我尝试了以下测试/更改:

  • 不同的应用服务计划(从 dev 到 P2v3)
  • 不同的 Azure 数据库服务器(从最便宜的到约 300 美元/月)
  • PHP 7.4 和 PHP 8.0
  • Apache 和 nginx(php 7/8 更改后自动出现)
  • Azure 数据库单一服务器和灵活服务器
  • Azure Database for MySQL 和 MariaDB
  • 应用服务通过公共 IP 和 vnet 集成连接到数据库
  • 将数据库置于完全相同的可用区域
  • SSL 和非 SSL 应用程序/数据库连接
  • 数据库重定向mysqlnd_azure
  • 尝试连接持久性
  • App Service docker 容器中的 Wordpress

以上都不是对性能没有任何重大改变。唯一“有效”的“修复”是启用缓存。如果命中缓存,TTFB 预计约为 100 毫秒。

我还对 AWS Elastic Beanstalk/RDS 和 Google App Engine/CloudSQL 进行了基准测试,它们运行完美(开箱即用,TTFB 时间约为 250 毫秒)。连接到同一 Azure 数据库的 Azure VM(PHP+ Apache)运行良好(TTFB 时间小于 300 毫秒)。

我没什么主意了。我错过了什么?需要说明的是:我并不是想实现个位数的响应时间或终极性能 - 对于干净的 WP 安装,300 毫秒是可以接受的。

答案1

由于问题中没有提及,因此有几件事需要查看。

  1. 确保 Web 应用和数据库位于同一区域。这看似简单,但我之前也见过。
  2. 使能够始终开启在 Azure 应用服务的设置中。 始终开启:即使没有流量,应用也会保持加载状态。当 Always On 未开启(默认)时,应用会在 20 分钟内无任何传入请求后卸载。卸载的应用可能会因为预热时间而导致新请求延迟过高。当始终开启开启后,前端负载均衡器每五分钟向应用程序根发送一次 GET 请求。持续的 ping 可防止应用程序被卸载。
  3. 审查应用服务最佳实践

答案2

我也遇到了同样的问题。Azure 非常非常慢,而且什么都不起作用?

PP_1,您说的启用缓存是什么意思?您是指 WP Rocket 之类的插件吗?

答案3

这里有同样的问题。我已经通过 web ssh 连接到容器实例进行了一些测试,我发现它需要 php仅加载插件就需要 200-300 毫秒.h所以我的最终结论是azure的php有问题。

我很好奇,是否有人在没有缓存的情况下(在 Linux 上使用 php)在 Azure 上达到了良好的性能。

我们最终使用启动脚本配置了应用程序,该脚本重新配置了 NGIX 以积极缓存页面,这对我们的一些网站来说效果很好,但远非理想。对于缓存页面,我们现在的 TTFB 为 50ms。

答案4

问题在于 Azure 应用服务使用存储的方式。这就是插件加载时间如此之长的原因。

简而言之,应用服务无法托管 Wordpress!

相关内容