증상
SQL Server 2016 및 2017에 Always On AG(가용성 그룹)가 있다고 가정합니다. 보조 복제본(replica)에서 읽기 쿼리를 처리할 때 빈번한 DIRTY_PAGE_TABLE_LOCK 대기 때문에 성능이 기본 복제본(replica)보다 훨씬 느려질 수 있습니다.
원인
이 문제는 읽기 쿼리와 다시 실행 스레드 간의 경합과 테이블이 잠겨 있기 때문에 발생합니다.
해결 방법
이 수정 사항은 SQL Server에 대한 다음 업데이트에 포함되어 있습니다.
SQL Server 2016 서비스 팩 2용 누적 업데이트 1
SQL Server 2016 서비스 팩 1용 누적 업데이트 9
SQL Server 빌드 정보
SQL Server의 각 새 빌드에는 이전 빌드의 모든 핫픽스 및 보안 수정 사항이 포함되어 있습니다. 사용 중인 SQL Server 버전에 맞는 최신 빌드를 설치하는 것이 좋습니다.
해결 방법
이 문제를 해결하려면 추적 플래그 3459를 사용하도록 설정하여 병렬 다시 실행 스레드 대신 단일 다시 실행 스레드를 사용할 수 있습니다.
추가 정보
읽기 전용 쿼리가 읽기 가능한 보조 복제본(replica)에서 실행되는 경우 쿼리 스레드는 보류 중인 로그 다시 실행 작업을 적용하려고 시도하고 DIRTY_PAGE_TABLE_LOCK 대기가 있는 다시 실행 작업자 스레드와 협력해야 합니다. 이 대기는 자주 생성될 수 있으며 동시 다시 실행 워크로드가 있는 경우 다시 실행 및 쿼리 성능이 모두 느려질 수 있습니다. DIRTY_PAGE_TABLE_LOCK 대기와 관련된 성능 문제는 이 문서에 언급된 SQL Server 2016 SP 및 SQL Server 2017의 누적 업데이트 릴리스에서 해결되었습니다.
자세한 내용은 가용성 그룹 보조 복제본(replica) 다시 실행 모델 및 성능에 대한 다음 블로그를 참조하세요.
상태
Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.
참조 자료
Microsoft에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어 에 대해 알아보세요.