1

我目前有 2 个网站,它们托管在具有不同虚拟机的单个服务器上。每个网站都托管在其自己的具有 IIS 7.5、PHP Fast CGI 5.3 的虚拟机上,该虚拟机使用 SQL Server Native Client 2012 连接到 MS SQL Server 2012 DBMS。SQL Server 2012 驻留在单个专用 VM 上,该 VM 托管与两者相关的数据库网站,因为一些数据正在网站之间共享。

安装程序基于 Windows,因为我们几乎没有需要在 VM 上运行的 .NET 服务,并且我们为网站使用单独的 VM,主要用于隔离和安全性。

该服务器具有 Intel Xeon 2.4Ghz 6 核处理器 X 2,具有 32 GB RAM 和 10K RPM SAS 作为托管数据库的主存储,并且虚拟机托管在另一个 7.2K RPM SAS 上。性能方面,网站在平均负载下非常快。

我们的网站有一个后端登录,我们经常在其中执行大型查询以检查与网站及其操作有关的日志和其他内容。平均查询大约需要一分钟才能完成,因为它是针对非常大的记录集执行的。每当执行查询时,该主机上的网站就会变得非常缓慢。

如果问题出在 SQL Server 或网络服务器上,我们已经进行了一些测试以缩小范围。首先,我们直接在数据库服务器上执行了一些批量查询,并且在检查网站后,我们无法发现任何性能问题,这清楚地表明 SQL Server 没有瓶颈。接下来,我们想看看这个问题是由 Webserver 还是 PHP 或 SQL Server Native Client 引起的。我们在服务器上托管了一个 HTML 测试文件,并在执行批处理查询时尝试访问该文件,结果证明速度一样快。当从网站后端执行批量查询时,带有小型排序算法的普通 php 文件工作得很好。然而,当我们用一个小查询实际测试数据库连接时,查询运行时加载需要时间。

我知道 PHP 不太适合 MSSQL 服务器,但由于开发限制,我现在需要坚持使用 MSSQL。当大查询正在进行时,我不知道是什么降低了 SQL Server Native Client 的速度。我做了一些阅读,并尝试使用ConnectionPoolingMultipleActiveResultSets,但在当前情况下没有任何改进。该网站变得非常慢,连接到数据库的每个页面都需要 20 秒,而在后端没有运行任何查询的情况下,它只需一两秒即可加载。

这似乎仅限于特定主机。当我在网站 1 上运行繁重的查询时,网站 1 上的其他页面非常缓慢,而网站 2 根本没有显示任何性能问题。尝试检查 webhost 和数据库服务器上的 CPU 使用率。它们仅多出 5-10%,我认为这可能不是造成如此严重的性能问题的原因。

我在想,SQL Server Native Client 2012 可能存在导致此问题的错误,或者我错过了任何设置或案例?

先感谢您。

4

1 回答 1

2

首先停止更改随机设置(如启用 MARS),希望它有所改善。应用一种方法:测量、识别瓶颈、修复这些瓶颈。我建议您阅读Waits and Queues论文,它一次又一次地被证明是一种出色的性能故障排除方法。遵循性能故障排除图表。然后,您将能够正确识别根本原因(/cough 争用)并适当地解决它。

于 2012-10-10T05:46:42.740 回答