증상
컴퓨터에 Microsoft SQL Server 2012 서비스 팩 2(sp2)가 적용 되었다고 가정 합니다. Sp_executesql 저장 프로시저에서 capture_instance> 데이터 캡처 (cdc) 쿼리를 CDC.FN_CDC_GET_NET_CHANGES_<를 호출 하며, SQL server Management STUDIO Server (SSMS), Cdc 자체 또는 SSIS (sql server Integration Services) 패키지 등의 응용 프로그램 원본에서 얻을 수 있습니다. 이러한 상황에서는 SQL Server 2012의 성능이 저하 됩니다.참고성능이 크게 저하 될 수 있습니다. 예를 들어 쿼리는 SQL Server 2012 SP1에서 몇 초 후에 완료 될 수 있습니다. 그러나 SQL Server 2012 SP2에서는 동일한 쿼리를 실행 하는 데 몇 시간이 걸릴 수 있습니다. 또한 통계 업데이트는 문제를 해결 하는 데 도움이 되지 않습니다.
원인
이 문제는 cdc.fn_cdc_get_net_changes_<capture_instance> 쿼리의 성능에 심각한 영향을 주는 카디널리티 추정의 문제로 인해 발생 합니다.
해결 방법
이 문제는 다음 SQL Server 누적 업데이트에서 처음 수정 되었습니다.
SQL Server 2012 SP2에 대 한 누적 업데이트 3 /en-us/help/3002049
각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
해결 방법
이 문제를 해결 하려면 쿼리에 옵션 (재컴파일) 쿼리 힌트를 사용 합니다. SSIS CDC 구성 요소에서 쿼리를 트리거한 경우 다음 예제와 같이 계획 지침을 만들어 옵션 (재컴파일) 힌트를 강제로 적용할 수 있습니다.Exec sp_create_plan_guide @name = N'CDC_Query1_PlanGuide', @stmt = N'select [__$start_lsn],[__$operation],[__$update_mask],[Column1],[Column2],[Column3] from [cdc].[fn_cdc_get_net_changes_dbo_Table1](CONVERT(binary(10), @cs, 1), CONVERT(binary(10), @ce, 1), @mode)',@type = N'SQL',@module_or_batch = NULL, @params = N'@ce nvarchar(22),@mode nvarchar(14),@cs nvarchar(22)', @hints = N'OPTION (RECOMPILE)'; 참고예제 쿼리를 문제를 직면 하는 쿼리로 바꿔야 합니다. 이는 Profiler (프로필러 ) 추적에서 grabbed 수 있으므로 추가 문자는 실수로 추가 되지 않습니다. 또한 계획 가이드가 성공적으로 작동할 수 있도록 선택 쿼리가 한 줄 (예: 캐리지 리턴이나 줄 바꿈이 없어야 함)에 포함 되어 있는지 확인 합니다. DBCC FREEPROCCACHE 를 사용 하 여 캐시에서 이전 계획을 녹아웃 해야 할 수도 있습니다.
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.