증상
다음 시나리오를 고려하세요.
- 매우 큰 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에서 소프트웨어 업데이트를 설명하는 데 사용하는 용어에 대해 알아보세요.