为什么当PHP与PHP代码不在同一台机器上时,PHP – > MSSQL非常慢

在尝试将我们的网站移动到Azure的过程中,我们发现我们的PHP代码与MSSQL交谈时出现问题。

在当前的专用主机上(托pipePHP和数据库),进入页面通常不到2秒。 我也运行通过SMS所需的查询,他们不到1秒。 查询返回的数据量非常小 – 10-20条logging,总共不到100kb。

通过Azure托pipe的网站(连接到Azure SQL数据库),同一页面需要大约40秒才能加载。 进一步的调查显示,这可能是由于数据库与PHP不在同一台机器上导致的 – 当原始网站指向远程数据库(另一台专用机器或Azure SQL实例)时,页面加载时间会上升到40秒的范围。

在Azure的情况下,网站和数据库位于同一地区(N欧洲)。 使用我们的机器进行testing时,都位于英国。

目前的虚拟主机运行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 -酮的-相同-机-作为最PHP

有很多事情可能导致这一点。 诀窍是把它缩小到正确的一个。 最可能的原因是networking问题,连接问题或数据库问题。 按此顺序:

我会尝试的第一件事是排除networking问题:尝试从Web服务器ping数据库服务器。 连接string使用DNS或IP? ping的dns与ip有什么不同?

如果ping时间正常和快速,是否可能是数据库login问题? 你能从SSMS连接到数据库服务器吗? 它快吗?

如果仍然一切正常,运行使用SSMS网站运行的查询 – 它仍然是快速? 如果没有,这是一个数据库问题 – 新的DB可能不是原来的相同。 也许某些索引/约束没有被复制。