증상
Windows의 Microsoft SQL Server 2016 또는 SQL Server 2017에서는 다음 조건에서 성능이 저하될 수 있습니다.
-
여러 개의 동시 INSERTSELECT 작업을 임시 테이블로 실행하는 경우
-
sys.dm_os_waiting_tasks 쿼리하는 경우 이 경우 resource_description 열에는 여러 요청에 대한 PFS(페이지 사용 가능한 공간) 페이지에서 대기가 표시됩니다.
원인
INSERTSELECT 작업에 대한 INSERT 병렬 처리는 windows에서 2016년 SQL Server 또는 SQL Server 2017년에 도입되었습니다. 로컬 임시 테이블로의 INSERT(#접두사로 식별된 테이블만, ## 접두사로 식별된 전역 임시 테이블은 아님)는 이제 비 임시 테이블에 필요한 TABLOCK 힌트를 지정하지 않고도 병렬 처리에 대해 자동으로 사용하도록 설정됩니다.
INSERT 병렬 처리는 일반적으로 쿼리 성능을 향상하지만, 많은 수의 동시 임시 테이블 INSERTSELECT 작업이 있는 경우 PFS 페이지에 대한 경합이 중요할 수 있습니다. 경우에 따라 이로 인해 전반적인 성능이 저하될 수 있습니다.
해결 방법
이 문제는 SQL Server 2016 서비스 팩 1에서 처음 해결되었습니다. SQL Server 2016 SP1을 적용한 후 INSERT에서 병렬 INSERT를 적용합니다. 로컬 임시 테이블에 대한 SELECT는 기본적으로 비활성화되어 PFS 페이지의 경합을 줄이고 동시 워크로드의 전반적인 성능을 향상시킵니다. 로컬 임시 테이블에 대한 병렬 INSERT가 필요한 경우 사용자는 로컬 임시 테이블에 삽입하는 동안 TABLOCK 힌트를 사용해야 합니다.
해결 방법 섹션에서 언급한 추적 플래그 9495를 사용하도록 설정한 경우 추적 플래그 9495로 SQL Server 2016 SP1을 적용한 후 TABLOCK 힌트에 관계없이 병렬 삽입을 사용하지 않도록 설정한 후 추적 플래그를 사용하지 않도록 설정하고 제거하는 것이 좋습니다.
누적 업데이트 정보
이 문제는 SQL Server 2016에 대한 다음 누적 업데이트에서 해결되었습니다.
SQL Server 대한 누적 업데이트 정보