WebAPI Webサービスがボトルネックに陥っている。長時間実行されているデータベース操作が1回発生するという要求が多くなると、タスクスレッドがブロックされているかどうかをチェックする方法
次のようにWebサービスは、各エンドポイントを有する:
_coordinatorは、データベースからデータをフェッチするサービス(非Webサービス)(長時間実行を呼び出すコンストラクタを介して注入されたクラスである var result = await Task.Run(() =>
{
return _coordinator.GetValue(key);
});
return Request.CreateResponse(HttpStatusCode.OK, result);
)。 _coordinatorは、データベースからフェッチするいくつかの長期実行サービス呼び出しを呼び出すことがあります。
私の理解から、Task.Runは、スレッドプールからスレッドで実行されるタスクを作成します。しかし、それらのスレッドが解放されたときにブロックされているかどうかはわかりません。
コーディネータコードを実行しているスレッドを取得し、ブロックされているか、マシンサービスが返るまでスレッドプールに解放されているかどうかを確認したいと思います。
スレッドは十分なリソースです。あなたがスレッドの数に制限されていることはほとんどありません。あなたのデータベースのような音は、単に過負荷になります。クエリを最適化します。 – usr
'_coordiantor'はサードパーティーですか、それともあなたのものですか? –
_coordinatorは私たち自身のクラスです。パススルーです。 Oracle DBからフェッチするためにMiddleware Serviceを呼び出します。 – abug