KB4488809 - 수정: SQL Server 2014, 2016 및 2017의 Filestream 테이블에서 병렬 쿼리가 삭제될 때 어설션이 발생합니다.

적용 대상
SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use)

증상

다음 시나리오를 고려하세요.

  • 매우 큰 Filestream 테이블이 있습니다.
  • 파일 스트림 테이블의 행 삭제 쿼리를 실행하여 시스템의 다른 큰 테이블에 대한 내부 조인으로 필터링되는 쿼리 계획과 같이 비용이 많이 드는 쿼리 계획을 만듭니다.
  • 쿼리 최적화 프로그램은 병렬 실행 계획을 선택합니다.

이 시나리오에서는 어설션이 발생하고 SQL Server 오류 로그에서 다음과 유사한 오류 메시지를 받을 수 있습니다.

DateTimespid SpidNumber 오류: 5553, 심각도: 20, 상태: 6.

DateTime spid SpidNumber SQL Server 내부 오류입니다. FILESTREAM 관리자는 현재 명령을 계속할 수 없습니다.
      

상태

Microsoft에서 이는 "적용 대상" 섹션에 나열된 Microsoft 제품에서의 문제임을 확인했습니다.

해결 방법

이 문제는 SQL Server 대한 다음 누적 업데이트에서 해결되었습니다.

SQL Server 대한 누적 업데이트 정보:

SQL Server 대한 각각의 새로운 누적 업데이트에는 이전 누적 업데이트에 포함된 모든 핫픽스 및 모든 보안 수정 사항이 포함됩니다. SQL Server 대한 최신 누적 업데이트를 확인하세요.

해결 방법

이 문제를 해결하려면 다음 방법을 사용할 수 있습니다.

내부 조인 쿼리를 별도의 문으로 이동하고 결과를 임시 테이블에 저장합니다. 그런 다음 임시 테이블의 항목으로 필터링되는 삭제 쿼리를 실행합니다. 또한 병렬 처리에 대한 비용 임계값을 늘려 최적화 프로그램이 쿼리 계획을 직렬화하도록 강제할 수 있습니다.

예를 들면 다음과 같습니다.

SELECT RefTable.Alias INTO #T FROM DB.dbo.OuterTable INNER JOIN DB.dbo.RefTable ON RefTable.Alias = OuterTable.Alias

WHERE OuterTable.Alias > 30006 and OuterTable.Alias < 30010

DB.dbo에서 삭제합니다. [표] WHERE 별칭 IN(SELECT * from #T)

참조 자료

Microsoft에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어에 대해 알아보세요.