SQL Server 2019에서 동기 통계 업데이트시 발생하는 쿼리 Blocking 확인
SQL Server 2019에서 동기 통계 업데이트시 발생하는 쿼리 Blocking 확인
· Version : SQL Server 2019
SQL Server에서 통계정보는 옵티마이저가 실행 계획을 생성할 때 참고하는 중요한 지표이다. 통계 자동 업데이트가 true 로 설정된 경우, 데이터의 변경이 특정 임계치 이상되면 자동으로 통계 정보를 업데이트 한다.
· SQL Server Statistics : http://sqlmvp.kr/140165557766
이때 통계 정보를 업데이트하면서 블럭킹이 발생하는데 이전까지는 블럭킹이 발생한것에 대해서 확인할 방법이 없었다. SQL Server 2019 부터는 이러한 문제를 해결하기 위해 새로운 진단 데이터가 도입되었다. 통계 업데이트시 블럭킹을 발생하는 것을 재현하기 위해 아래와 같은 시나리오를 만들었다.
· 자동 통계 업데이트를 트리거하는 SELECT 쿼리를 실행한다.
· 동기 통계 업데이트가 실행을 시작하고 새 통계가 생성될때 까지 쿼리가 대기한다. (기본적으로 차단됨)
· 동기 통계 업데이트 조작이 완료 될 때 까지 쿼리 컴파일 및 실행이 재개되지 않는다.
이 시간 동안 쿼리는 동기화 통계 업데이트 작업이 완료될 때 까지 대기하고 있으며, 이 문제를 확인하기 어려웠다. 대용량 테이블또는 사용량이 많은 시스템등 통계 업데이트에 시간이 오래 걸리는 경우 원인을 쉽게 확인할 수 있는 방법이 없다.
SQL Server 2019에서는 동기화 통계 업데이트로 인해 쿼리가 차단되면 sys.dm_exec_requests에서‘command’컬럼에 (STATMAN)가 표시된다. 그리고 통계 업데이트 작업이 완료되면 초기 명령이름으로 돌아간다.
또한 새로운 WAIT_ON_SYNC_STATISTICS_REFRESH 대기 유형은 동기 통계 업데이트에서 집계된 대기 시간(블럭)을 측정한다. 이 대기시간 누적은 sys.dm_os_wait_stats 동적 관리뷰에서 확인할 수 있다.
[참고자료]
2019-09-20/ Sungwook Kang / http://sungwookkang.com
SQL Server2019, SQL Statistics, WAIT_ON_SYNC_STATISTICS_REFRESH, sys.dm_os_wait_stats, sys.dm_exec_requests