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

时间:2013-04-05 13:47:10

标签: php sql-server azure

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

在当前的专用主机(托管PHP和数据库)上,转到页面通常只需不到2秒。我还通过SSMS运行必要的查询,它们只需不到1秒钟。查询返回的数据量非常小--10-20条记录,总共少于100kb。

在Azure上托管网站(连接到Azure SQL数据库),同一页面加载大约需要40秒。进一步调查显示,这可能是因为数据库与PHP不在同一台机器上 - 当原始网站指向远程数据库(另一台专用机器或Azure SQL实例)时,页面加载时间会进入40秒范围。

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

当前的虚拟主机运行PHP 5.4和Microsoft SQL Server Express Edition。 Azure网站在PHP 5.4上运行。

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

如何在连接到远程SQL DB时提高性能?

此问题已在https://serverfault.com/questions/496505/why-is-php-mssql-very-slow-when-the-db-is-not-on-the-same-machine-as-the-php

交叉发布到服务器故障

2 个答案:

答案 0 :(得分:1)

不知道为什么你的响应时间从2秒跳到40秒,但......需要考虑的一些事项:

  • 如果您的SQL数据库实例位于另一个数据中心,您将看到延迟和带宽费用。如果数据中心由大陆隔开(例如美国西部的一个,香港的一个),那么你会看到比美国西部的数据中心更多的延迟 - < - >美国东部)。
  • 如果您因查询而传输大量数据,则会受到网络管道大小的限制。每个内核可获得100Mbps,但超小型(XS)实例仅具有5Mbps带宽。

您提到在SQL Server Management Studio中测试查询(至少我假设SMS实际上是SSMS)。在针对SQL数据库进行测试时,查询性能如何?如果它接近40秒标记,很可能从数据从本地数据库移植到SQL数据库实例时缺少索引。

答案 1 :(得分:1)

在我的情况下,它是缓慢的DNS解析,在放入IP而不是MSSQL名称之后一切正常