web-dev-qa-db-ja.com

.NETフレームワークを更新するとSQLタイムアウトが発生する

.NET 4.5.1をターゲットとするアプリがあり、これは変更されていません。

ただし、サーバーの.NETフレームワークを4.5.1-> 4.7.1からアップグレードすると、数時間後にSQLタイムアウトが発生し始めました(アプリターゲットは4.5.1のままでした)。

"Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached."

同じ処理を行った他のサーバーでも問題が発生したため、.NETに重大な変更を加えたところ、次の記事が見つかりました: https://blogs.msdn.Microsoft.com/dataaccesstechnologies/2016/05/ 07/connection-timeout-issue-with-net-framework-4-6-1-transparentnetworkipresolution /

その記事は別の例外タイプを引用していますが、多少関連があるかもしれません。しかし、DNSルックアップに500ミリ秒以上かかった場合、私は驚かれることでしょう。また、この接続文字列構成の多くのケースが報告され、使用されることを期待しています。

私たちのアプリはトラフィックが多いですが、.NETフレームワークを更新するまでこれが何年も問題にならなかったので、接続がリークされていないと確信しています。

この修正を適用してみます(結果が表示されるまで24時間以上待ちます)が、他に見逃していたことはありますか?これが解決策であるとは確信していません。

編集:.NETを4.5.1にロールバックしてすべてのサーバーを再起動した後でも、まだ問題が発生しています。コードベースでは他に何も変更されていませんが、「SchUseStrongCrypto」を有効にするレジストリの変更はまだロールバックしていません。それが原因である可能性がある場合は、

26
FBryant87

私はこれを経験していませんが、リンク https://docs.Microsoft.com/en-us/dotnet/framework/migration-guide/runtime/4.0-4.7.1 は、 SQL接続プール。壊れた接続をはるかに長く再試行します。このリンクは、新しい動作をバイパスするための設定も提供します。

 ConnectRetryCount = 0

この動作の副作用または意図された機能が変更されたため、プール内の接続が以前よりも長く存続し、接続が「デッドだが再試行中の接続」で詰まっている可能性はありますか?

その少し投機的です。しかし、正しい道にあなたを導くかもしれません。

3
PhillipH