現象
2016 年と 2017 年SQL ServerにAlways On可用性グループ (AG) があることを前提としています。 セカンダリ レプリカで読み取りクエリを処理すると、DIRTY_PAGE_TABLE_LOCKが頻繁に待機するため、プライマリ レプリカよりもはるかにパフォーマンスが低下する可能性があります。
原因
この問題は、読み取りクエリと再実行スレッドの間の競合と、テーブルがロックされているために発生します。
解決方法
この修正プログラムは、SQL Serverの次の更新プログラムに含まれています。
SQL Server 2017 の累積的な更新プログラム 8
SQL Server 2016 Service Pack 2 の累積的な更新プログラム 1
SQL Server 2016 Service Pack 1 の累積的な更新プログラム 9
ビルドSQL Serverについて
SQL Serverの各新しいビルドには、前のビルドにあったすべての修正プログラムとセキュリティ修正プログラムが含まれています。 SQL Serverのバージョンの最新のビルドをインストールすることをお勧めします。
回避策
この問題を回避するには、トレース フラグ 3459 を有効にすることで、並列再実行スレッドの代わりに 1 つの再実行スレッドを使用できます。
詳細情報
読み取り専用クエリが読み取り可能なセカンダリ レプリカで実行されている場合、クエリ スレッドは保留中のログ再実行操作の適用を試み、 DIRTY_PAGE_TABLE_LOCK 待機を使用してやり直しワーカー スレッドと共同作業する必要があります。これは、頻繁に生成され、再実行ワークロードとクエリパフォーマンスの両方が低下する可能性があります。 DIRTY_PAGE_TABLE_LOCK待機に関連するパフォーマンスの問題は、この記事で説明SQL Server 2016 SP および SQL Server 2017 の累積的な更新プログラム リリースで解決されます。
詳細については、可用性グループのセカンダリ レプリカの再実行モデルとパフォーマンスに関する次のブログを参照してください。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
関連情報
Microsoft がソフトウェア更新プログラムの説明に使用する 用語 について説明します。