先週、本番環境で発生した問題を診断しようとしています。簡単に言うと、データベース接続プールは ASP.NET 3.5 アプリからのアクティブな接続でいっぱいのようで、アプリケーション プールと IIS を再起動してもクリアされませんでした。
上級 DBA によると、ネットワーク接続はオペレーティング システム レベルで発生するため、アプリと IIS をリサイクルしても実際のネットワーク接続は切断されず、SQL Server はデータベース接続を切断して実行を継続し、アプリはまだデータベースに到達できませんでした。 .
データベース接続プールを強制的にリセットする方法を調べたところ、 static メソッド が見つかりました。SqlConnection.ClearAllPools()
ドキュメントには、それが何を行うのかが説明されていますが、いつ呼び出すかについてはほとんど説明されていません。私のglobal.asax.csの最初Application_Start
と最後でそれを呼び出すことは、アプリを汚染された接続プールから保護するための優れた安全対策のようですが、もちろん起動/シャットダウン時にパフォーマンスが低下します.Application_End
私が説明したことは良い習慣ですか?より良いものはありますか?目標は、他の多くのアプリに影響を与える OS や SQL Server サービスを再起動することなく、簡単なアプリの再起動でアプリの破損した接続プールをリセットできるようにすることです。
どんなガイダンスも大歓迎です。