レポートを実行し、90 秒以内に SQL サーバーに対して約 100 万の SQL クエリを実行する PHP アプリケーションを取得しました。この期間中、誰もこの 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 がより多くの同時要求を処理できるように微調整できるものがあるはずです。
誰か知っていますか?助けてください!