2

MVC Webアプリケーションを継承しました。これは、ADO.NET上でDapperを使用してControllerアクションメソッドでDB呼び出しを行います。これはすべて標準的なものです。コントローラーの多くはasyncではなく、すべてのデータベース呼び出しは完全同期のrepositoryです。私のコントローラのDBを非同期に呼び出す

これをAzureに移しています。データベースのバックエンドにSQL Azureを使用しています。私はロードがかなり標準的であると予想しています - 例えば、1分あたり500 - 1000ヒット

私はこのコードを使ってすべてのdbを非同期に呼び出す必要がありますので、コントローラでawaitを実行できるようにしてください。これを行うと、スレッドを解放して他のリクエストを処理することになりますが、改善が見られるかどうかは本当に不思議です。

これまでのところ、been notedということはわかっています。私が行っているように1台のDBサーバーを使用している場合、ボトルネックはすべてデータベース上にあるため、大幅な改善は見られません。この価値がある - しかし、SQL Azureではわずかに異なる獣、およびAzureの状態を使用すると、source

だから、SQLデータベースとしてAzureのサービスにアクセスするだけで、非同期技術を使用し

グッドプラクティスの需要があることです努力?

答えて

2

確かに、どんな種類の決定的な回答もここにはありません。 Azureが述べているように、リモートデータベースのクエリなどのI/Oバインド操作で非同期を使用することをお勧めします。あなたが最初からこのアプリケーションを起動していたのであれば、今日はデータベース呼び出しに非同期を使用することを明言します。

しかし、これは新しいアプリケーションではなく、asyncを使用すると現時点でかなりの手術が必要になるようです。あなたが得る負荷に応じて、あなたは仕事の利益を見ることに終わらないかもしれませんが、あなたはまた大きな利益を見るかもしれません。私の推薦は小さいから始めることです。私はあなたが作るより長期的なクエリや、データベースに大きく依存するアクションをいくつか取り上げ、それらのアクションから始めます。そうすれば、非同期のビットを導入し、それを追求する価値があるかどうかを自分で判断することができます。とにかく、アプリケーションのボトルネックとなる可能性が高いため、潜在的に最も重要な部分で非同期の利点を得ることができます。

追加する新しい機能は、最初から非同期でなければなりません。時間と傾きがある場合は、アプリケーション全体をゆっくりと変換してください。

1

私が学んだこと(そしてテストを通じて検証済み)は、比較的長いSQL呼び出しで大きな改善が見られないことです。しかし、SQLとSQL以外の関連する短い応答が並行して改善されます。これは、スレッドを初期化するために多大なコストがかかるためです。 SQLを待っている休止スレッドを再利用すると、パフォーマンスが向上します。

asyncを使用すると、IISの「スレッドごとのプロセッサ制限」設定を回避することもできます。それが起こると、あなたの要求は待ち行列に入れられます。デフォルト値25を増やしてみました。これは高負荷でのパフォーマンスを向上させましたが、すべてのコントローラを非同期に変更することで改善が見られました。

私はあなたの質問に対する答えは、それが依存していると思います。 SQL呼び出し以外に多数の同時要求がある場合は、それらの同時要求の応答時間が大幅に改善されるはずです。しかし、比較的長いSQLコールの改善はほとんど見られません。

関連する問題