我在 Linux Azure 应用服务(计划 P1v2)上托管一个使用 CodeIgniter 3 框架编写的 PHP 7.2 网站。该数据库是在禁用 SSL 的 Azure Database for MySQL(通用、2vCore、5GB 存储)上运行的 MySQL 5.7。
当我浏览我的网站时,实际上需要大约 8-9 秒来加载浏览器将停留在白页并在完成加载后立即显示所有内容的位置。(大部分网站内容都是从数据库中提取的)
我一直在监控 App Service 和 MySQL DB,平均 %CPU 从未达到其分配资源的 50%,因此规格似乎不是问题。
我的外包开发团队有自己的测试环境(不在 Azure 上),他们说它几乎可以立即加载到他们的环境中,所以他们指责 Azure。
然后我注意到 Azure 顾问告诉我关于这个数据库的两件事,其中影响很大
改善 MySQL 连接延迟 我们的内部遥测表明您连接到 MySQL 服务器的应用程序可能无法有效地管理连接。这可能会导致更高的应用程序延迟。为了改善连接延迟,我们建议您启用连接重定向。这可以通过启用 PHP 驱动程序的连接重定向功能来完成。
改进 MySQL 连接管理 我们的内部遥测表明您连接到 MySQL 服务器的应用程序可能无法有效地管理连接。这可能会导致不必要的资源消耗和整体更高的应用程序延迟。为了改进连接管理,我们建议您减少短期连接的数量并消除不必要的空闲连接。这可以通过配置服务器端连接池来完成,例如 ProxySQL。
我现在正在努力启用连接重定向以减少延迟,但由于我对 CodeIgniter 不熟悉,所以仍然没有成功,所以我需要等待开发人员修复它。
我的问题是:这个性能问题的原因是什么?这两个建议真的是这个问题的原因吗?
应用服务和数据库都在同一个区域。他们是否像某种 LAN 连接一样在本地进行通信?我希望来自 App Service 的连接不会通过 Internet 再返回 Azure DB,从而导致性能下降。
谢谢。