現象
次のような状況で問題が発生します。
-
Microsoft SQL Server 2016 Service Pack 2 (SP2) 累積更新プログラム 2 (CU2) 以降のバージョンを使用します。
-
多数のデータベース (通常は 200 を超える) をホストするインスタンスを実行しており、インスタンスはAlways On可用性グループ (AG) の一部です (通常はセカンダリ サーバーのロールを使用)。 注 すべてのユーザー データベースが AG に属している必要はありません。
-
ボリューム シャドウ コピー サービス (VSS) アプリケーションを実行して、SQL Server インスタンスのすべてまたは一部のデータベースのバックアップを要求します。
このシナリオでは、SQL ライター サービスはデッドロック状態に達し、マスターの内部システム テーブル (object_id 28 を使用した sys.sysdbreg) に対するロックを無期限に保持できます。 さらに、これらのロックにより、sys.dm_hadr_database_replica_statesなどのシステム動的管理ビュー (DMV) からの読み取 りが妨げられるので、インスタンス内で大規模なセカンダリ ブロックが発生する可能性があります。 さらに、ブロック チェーン分析では、SQL Server VSS ライターから発信された次のステートメントがヘッド ブロッカーとして返されます。
"名前、recovery_model_desc、state_desc、CONVERT(整数、is_in_standby)、ISNULL(source_database_id,0) from master.sys.databases"
その後、SQL ServerはASYNC_NETWORK_IOの待機状態になります。
注 ASYNC_NETWORK_IO待機が実装されているため、それに対するwait_timeは 2 秒 (2,000 ミリ秒) を超えることはありません。 ただし、待機の種類は無期限に保持され、この状況ではブロックが解除されることはありません。 状況のブロックを解除するには、SQL ライター サービスを強制終了する必要があります。
このヘッド ブロッカーによってブロックされた SPID のうち、多くの場合、DBSTARTUP SPID (alwayson Secondary DB 再実行) が存在します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
解決方法
この問題は、次のSQL Serverの累積的な更新プログラムで修正されています。
SQL Serverの累積的な更新プログラムについて:
SQL Serverの各新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Serverの最新の累積的な更新プログラムを確認してください。
参考資料
Microsoft がソフトウェア更新プログラムの説明に使用する用語について説明します。