WindowsAzureとSQLAzureで実行されている5つのオンラインオークションシステムのセットがあります。各システムは、単一のWebワーカーと1つ以上のWebロールで構成されます。各システムは、ASP.NET MVC 3とエンティティフレームワーク、リポジトリパターン、およびStructureMapを使用しています。
ワーカーの役割はハウスキーピングを担当し、2つのグループのプロセスを実行します。1つのグループは10秒ごとに実行され、もう1つのグループは1秒ごとに実行されます。各プロセスは、データベースクエリまたはストアドプロシージャを実行する可能性があります。これらはQuartz.netでスケジュールされています
Webの役割は、パブリックインターフェイスとバックオフィスに役立ちます。他の基本的なクラッド機能の中でも、これらは両方とも、開いたときにコントローラーメソッドを繰り返し呼び出す画面を提供し、その結果、ストアドプロシージャの読み取り専用クエリが実行されます。繰り返しの頻度は、クライアントごとに約2〜3秒です。典型的な使用例は、5つのバックオフィスウィンドウが開いており、25のエンドユーザーウィンドウが開いていることです。これらはすべてシステムに繰り返しアクセスします。
長い間、断続的なSQLタイムアウトエラーが発生しています。最も一般的なものの3つは次のとおりです。
System.Data.SqlClient.SqlException:サーバーから結果を受信するときにトランスポートレベルのエラーが発生しました。(プロバイダー:TCPプロバイダー、エラー:0-既存の接続がリモートホストによって強制的に閉じられました。)
System.Data.SqlClient.SqlException:サーバーから結果を受信するときにトランスポートレベルのエラーが発生しました。(プロバイダー:TCPプロバイダー、エラー:0-セマフォのタイムアウト期間が終了しました。)
System.Data.SqlClient.SqlException:タイムアウトが期限切れになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。
唯一の予測可能なシナリオは、特定のコントローラー-> sprocがイベント中にタイムアウトを開始するオークション中です(おそらく負荷が原因です)。それ以外の場合、エラーは完全にランダムであるように見え、ユーザーが非アクティブな期間でも、シングル、2、3などで発生します。たとえば、システムはエラーなしで18時間稼働し、その後、さまざまなハウスキーピング方法から5〜10のエラーが発生する可能性があります。または、ユーザーがログオンしてアカウントを表示した可能性があります。
他の情報:
ローカルSSMSとAzureWebベースのクエリツールの両方を使用して、影響を受けるクエリ/sprocをSQLAzureで実行しようとしましたが、すべて高速で、最大1秒で実行されるようです。私はSQLクエリのパフォーマンスの専門家ではなく、その他の種類の専門家でもありませんが、クエリプランにはあまり疑わしいものは表示されません。J
影響を受けるすべての領域をAzureSQLの一時的な障害処理ブロックでラップしましたが、ここで説明するようにhttp://social.msdn.microsoft.com/Forums/en-US/ssdsgetstarted/thread/7a50985d-92c2-472f-9464-a6591efec4b3、タイムアウトをキャッチしません。「ValeryM」によると、これには正当な理由があります。
asp.netメンバーシップ情報はデータベースに保存されていますが、セッション情報はデータベースに保存されていません。
5つのデータベースすべてをホストする1つの「SQLAzureサーバーインスタンス」を使用します。2つはステージング用、3つは本番用です。5つのシステムすべてが通常同時にアクティブになりますが、常に複数のシステムがライブ負荷使用の状態になる可能性はほとんどありません。すべてのWebロール、ワーカーロール、およびSQL Azureサーバーは、同じAzure地理的リージョンに存在します。
私たちがどこを見るべきかについて何か考えはありますか?各システムに独自のSQLAzureサーバーを提供するのに役立ちますか?...自分たちで解決策に失敗する-Microsoftにサポートチケットを開いて、アプリケーションで何が起こっているのかを内部で確認させることは可能ですか?これについてはどうすればよいですか?
前もって感謝します。
イラン