KB4517771 - 修正: 孤立した CLR セッションによって SQL Server でブロックが発生する

適用先
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2019 on Windows

現象

共通言語ランタイム (CLR) ストアド プロシージャを呼び出すセッション ("呼び出し元セッション") を使用して Microsoft SQL Server のデータにアクセスし、そのプロシージャがコンテキスト接続ではなく同じサーバーへの別の接続 ("2 番目のセッション") を確立するとします。 その後、タイムアウトまたはキャンセルによって呼び出し元セッションが終了した場合、2 つ目のセッションは孤立状態になり、 KILL コマンドを使用して手動で終了するまでシステムに存在します。 孤立したセッションがいずれかのロックを保持している場合、ロックが解放されるのを待つ間、他のセッションはブロックされることがあります。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。

解決策

この問題は、次の SQL Server の累積的な更新プログラムで修正されています。

SQL Server の累積的な更新プログラムについて:

SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認する

注釈既定では、SQL Server での CLR スレッドの従来の動作を維持する必要があるため、この修正プログラムはオフになっています。 システムで前述の症状が発生した場合にのみオンにする必要があります。 修正プログラムを有効にするには、 データベース エンジン サービスのスタートアップ オプションを使用して、トレース フラグ 6559 をサーバーに追加する必要があります。 このトレース フラグは、SQL Server スタートアップ オプションとの組み合わせでのみ使用できることに注意してください。 DBCC TRACEON コマンドを使用して設定することはできません。

参考資料

マイクロソフトでソフトウェア更新プログラムの説明に使用する用語集を参照してください。