주제에 대한 검색으로 인해 여기에 왔으므로 주제에 대한 최근 경험을 공유하고 싶습니다.
나는 SQL 2014를 실행하고 있었으므로 4199에 대해 조금 신경 써야하는 것이 안전하다고 생각했습니다 ... 그러나 그것은 사실이 아닙니다 ...
4199가 필요한 경우 진단하는 방법
쿼리 가 제대로 실행 되지 않는 것처럼 보이는 경우 ( 특히, 그렇지 않아야한다고 생각 될 때) 다음을 추가하여 모든 문제를 해결하는지 확인하십시오. 4199 ( "Query Optimizer 수정 프로그램 사용") )
SELECT SomeColumn
FROM SomeTable
OPTION(QUERYTRACEON 4199)
내 상황에서, 나는 잘 작동하지 않는 쿼리를 날려 버린 상위 10 개의 조항을 가지고 있었는데, 이는 비린내가 일어나고 있다고 생각하게하고 4199가 도움이 될 수 있다고 생각했습니다.
약 4199
새로운 주 버전 릴리스 이후에 생성 된 모든 SQL Server 쿼리 최적화 프로그램 버그 / 성능 수정은 실제로 숨겨져 차단됩니다. 이것은 이론적으로 완벽하게 최적화 된 다른 프로그램에 실제로 해를 끼칠 수있는 경우입니다. 따라서 업데이트를 설치하십시오. 실제 쿼리 최적화 프로그램 변경 사항은 기본적으로 사용되지 않습니다. 따라서 단일 수정 또는 개선이 완료되면 4199를 활용해야합니다. 많은 수정 프로그램이 표시되면 결국 수정 사항 중 하나가 사용자에게 영향을 줄 때이 기능을 켜게됩니다. 이러한 수정 프로그램은 일반적으로 자체 추적 플래그에 연결되어 있지만 "모든 수정 프로그램 설정"마스터로 4199가 사용됩니다.
필요한 수정 프로그램을 알고 있으면 4199를 사용하지 않고 부분 식사를 사용할 수 있습니다. 모든 수정 프로그램을 사용하려면 4199를 사용하십시오.
자, 전 세계적으로 4199를 원합니다 ...
추적 플래그를 전역 적으로 사용하려면 매일 아침 다음 라인으로 실행되는 SQL 에이전트 작업을 작성하십시오. 이렇게하면 누군가 전원을 끄거나 다시 켜도됩니다. 이 작업 단계에는 매우 간단한 SQL이 있습니다.
DBCC TRACEON (4199, -1);
여기서 -1은 DBCC TRACEON에서 전역 부분을 지정합니다. 자세한 내용은 다음을 참조하십시오.
https://msdn.microsoft.com/en-us/library/ms187329.aspx?f=255&MSPPError=-2147217396
"재 컴파일"쿼리 계획
가장 최근의 시도에서 나는 전 세계적으로 4199를 활성화 하고 기존의 캐시 된 쿼리 계획을 제거해야했습니다 .
sp_recompile 'dbo.SomeTable'
https://msdn.microsoft.com/en-us/library/ms181647.aspx?f=255&MSPPError=-2147217396
다시 컴파일 저장 프로 시저가 데이터베이스 개체 (예 : 테이블)와 관련된 쿼리 계획을 찾아 해당 쿼리 계획을 삭제하면 다음에 비슷한 쿼리를 실행하여 컴파일해야합니다.
따라서 필자의 경우 4199는 잘못된 쿼리 계획이 생성되지 않도록했지만 sp_recompile을 통해 여전히 캐시 된 계획을 제거해야했습니다. 영향을받는 알려진 쿼리에서 테이블을 선택하십시오. 이제 전 세계적으로 4199를 사용 가능하게하고 문제가있는 캐시 된 쿼리 계획을 지운다 고 가정하면 해당 쿼리를 다시 시도하는 것이 좋습니다.
4199에 대한 결론
인덱스를 사용할 때 스마트 인덱스 계획 최적화는 실제로 해당 인덱스를 지능적으로 사용하는 데 중요 해지고 시간이 지남에 따라 쿼리 최적화 프로세스에 대한 일부 수정 사항이 릴리스된다고 가정하면 일반적으로 전 세계적으로 4199를 사용하여 안전하게 실행할 수 있습니다. 새로운 수정 사항이 실제로 이전 수정 사항 이전에 최적화 된 고도로 최적화 된 데이터베이스에서 제대로 작동하지 않을 수 있다는 것을 알고있는 한. 그러나 4199의 기능은 무엇입니까? 그것은 단지 모든 수정을 가능하게합니다.