我有一个 PHP 应用程序运行报告并在 90 秒内向 SQL 服务器发出大约 100 万个 SQL 查询。在这段时间内,没有其他人可以使用这个基于 Web 的应用程序 - 鸡蛋计时器正在滚动,但在报告超时或完成之前不会加载任何内容。我在一个只有我自己的隔离环境中测试了这个问题,在浏览器中运行报告,然后从其他浏览器窗口到该应用程序站点的任何操作都挂起。
关于测试环境的一些细节:
Windows 2008 R2 x64 - IIS 7.5 - PHP 5.3.8 via FastCGI
Windows 2008 R2 x64 - SQL Server 2008 R2 x64
IIS 中的 FastCGI 设置:
Instance MaxRequests = 200
Max Instances = 16
Activity Timeout = 70
Idle Timeout = 300
Queue Length = 1000
Rapid Fails PerMin = 10
Request Timeout = 90
每个 SQL 请求在 SQL 服务器端完成的时间不到 60 毫秒。Web 服务器和 SQL 服务器的 CPU 负载均小于 10%。Web 服务器有 16GB RAM,运行报告时大约有 60% 的 RAM 可用。
似乎,PHP 已经向 SQL 服务器发出了太多请求,并且变得太忙而无法处理其他请求。如果是这种情况,那么我应该可以进行一些调整以使 PHP 处理更多并发请求。
有人知道吗?请帮忙!