現象
たとえば次のようなシナリオを考えてみます。
- Microsoft SQL Server 2012、2014、または 2016 AlwaysOn 可用性グループを使用します。
- フェールオーバーが発生し、プライマリ レプリカが新しいセカンダリ レプリカになります。
- LSN の一部は、新しいセカンダリ レプリカで元に戻す必要があります。
- 元に戻す処理中にデッドロックが発生し、フェールオーバーに関連付けられたトランザクションが SQL ロック マネージャーによってデッドロックの対象として選択されます。
このシナリオでは、新しいセカンダリ レプリカは、インスタンスが再起動されるまでトランザクション ログ レコードの受け入れを停止します。 さらに、次のようなラッチ タイムアウト エラー メッセージが数分おきに SQL Server エラー ログに記録されます。
注
バッファー ラッチの待機中にタイムアウトが発生しました -- タイプ 3、bp 0000003CE3093CC0、ページ 1:0、統計0x9、データベース ID: 11、割り当て単位 ID: 6488064、タスク 0x0000001436F2A558: 0、待機時間 300 秒、フラグ 0x100000001a、所有タスク 0x0000001436F2A558。 待機を続けます。
'dbghelp.dll' バージョン '4.0.5' を使用
**ダンプ スレッド - spid = 0、EC = 0x0000001038514B90
file_path に送信されているスタック ダンプ
* *******************************************************************************
* スタック ダンプの開始:
*
日時 SPID SPID
* ラッチタイムアウト
* *******************************************************************************
解決策
この問題は、SQL Server 用の次の累積的な更新プログラムで解決されています。
SQL Server 2016 RTM の累積的な更新プログラム 5
SQL Server 2016 SP1 の累積的な更新プログラム 2
SQL Server 2014 Service Pack 2 の累積的な更新プログラム 3
SQL Server 2014 SP1 の累積的な更新プログラム 11
SQL Server 2012 SP3 の累積的な更新プログラム 7
SQL Server 用の累積的な更新プログラムについて
SQL Server 用の累積的な更新プログラムについて
SQL Server 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
SQL Server 2016 の最新の累積的な更新プログラム
SQL Server 2014 の最新の累積的な更新プログラム
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。
参考資料
Microsoft がソフトウェア更新プログラムについて説明するために使用する 用語について説明します 。