当数据库与 PHP 代码不在同一台机器上时,为什么 PHP -> MSSQL 速度很慢

当数据库与 PHP 代码不在同一台机器上时,为什么 PHP -> MSSQL 速度很慢

在尝试将我们的网站迁移到 Azure 的过程中,我们发现 PHP 代码与 MSSQL 通信存在问题。

在当前的专用主机(同时托管 PHP 和 DB)上,访问一个页面通常需要不到 2 秒的时间。我还通过 SMS 运行了必要的查询,它们需要不到 1 秒的时间。查询返回的数据量非常小 - 10-20 条记录,总共肯定少于 100kb。

如果网站托管在 Azure 上(连接到 Azure SQL 数据库),则同一页面需要大约 40 秒才能加载。进一步调查显示,这可能是由于数据库与 PHP 不在同一台机器上造成的 - 当原始网站指向远程数据库(另一台专用机器或 Azure SQL 实例)时,页面加载时间会上升到 40 秒左右。

在 Azure 案例中,网站和数据库都位于同一地区(北欧)。使用我们的机器进行测试时,两者都位于英国。

当前网络托管计算机运行的是 PHP 5.4 和 Microsoft SQL Server Express Edition。Azure 网站运行的是 PHP 5.4。

在这两种情况下,我们都使用 3.0.1 Microsoft SQLSRV 驱动程序

我们如何提高连接远程 SQL DB 时的性能?

我已在此处交叉发布了此内容,以回答 stackoverflow 上的同一问题: https://stackoverflow.com/questions/15835623/why-is-php-mssql-very-slow-when-the-db-is-not-on-the-same-machine-as-the-php

答案1

有很多原因可能导致这种情况。诀窍是缩小范围,找到正确的原因。最可能的原因是网络问题、连接问题或数据库问题。顺序如下:

我首先要尝试排除网络问题:尝试从 Web 服务器 ping DB 服务器。连接字符串使用的是 dns 还是 ip?ping dns 和 ip 有什么区别吗?

如果 ping 时间正常且快速,这可能是数据库登录问题吗?您可以从 SSMS 连接到数据库服务器吗?速度快吗?

如果一切正常,请使用 SSMS 运行网站运行的查询 - 它仍然很快吗?如果不是,那就是数据库问题 - 新数据库可能与原始数据库不相同。也许某些索引/约束没有被复制过来。

相关内容