SQL Server의 임의 (ad-hoc) 쿼리에 대한 간단한 매개 변수화보다 강제 매개 변수화를 사용하도록 선택하지 않는 이유는 무엇입니까?강제 매개 변수화
성능 오버 헤드가 있습니까? 그렇다면 재사용 쿼리 계획에서 얻은 (가능한) 이익으로 상쇄되지 않을까요?
SQL Server의 임의 (ad-hoc) 쿼리에 대한 간단한 매개 변수화보다 강제 매개 변수화를 사용하도록 선택하지 않는 이유는 무엇입니까?강제 매개 변수화
성능 오버 헤드가 있습니까? 그렇다면 재사용 쿼리 계획에서 얻은 (가능한) 이익으로 상쇄되지 않을까요?
일회용 계획이 많은지 확인하기 위해 계획 캐시를 분석 했습니까?
SELECT usecounts, COUNT(*), SUM(size_in_bytes)
FROM sys.dm_exec_cached_plans
GROUP BY usecounts
ORDER BY usecounts;
은 당신이 한 번 이상 사용 때까지 적어도 단지 계획에 대한 스텁을 저장하는 '
optimize for ad hoc workloads'설정을 고려 있나요? 나는 이것을 아주 효과적이라고 발견했습니다.
임시 SQL이 많고 계획 캐시가 부풀어 오르는 경우 강제 매개 변수화를 시도하지 않아도됩니다. 그러나 오버 헤드 이 일 수있는 경우가 있습니다 (특히 인덱스 된 뷰, 계산 된 계산 된 열 또는 분할을 많이 사용하면 더 나쁜 계획으로 끝날 수 있음) 이득을 능가하는 경우가 있기 때문에 전체 작업 부하를 철저히 테스트해야합니다. 이 설정을 사용하도록 설정하면 DBCC FREEPROCCACHE
도 실행되기 때문에 다음에 필요할 때 기존 계획을 모두 다시 컴파일해야하는 작은 문제가 발생할 수 있습니다. (물론, 어쨌든 재사용하기 전에 플러시 될 가능성이있는 스텁을 대부분 없애기 때문에 이미 '임시 용 최적화'가 많은 단일 사용 계획과 결합 된 경우에는 눈에 띄지 않는 영향을 미칩니다.)
또한이 설정이 개별 쿼리에 영향을주지 않는 경우가 많습니다 (Books Online topic 참조).
나는 구체적인 데이터베이스 문제가 없으므로, 설정에 대해 알게 된 후 더욱 흥미로 웠습니다. 근원은 강제적 인 매개 변수화를 끄는 부정적인 영향을 설명하지 않았고, 그래서 왜 당신이 디폴트로 그것을 가지고 있지 않을지 궁금했습니다. 감사. –
+1. 또 다른 위대한 대답! :) –
참조 : http://blogs.msdn.com/b/sql_pfe_blog/archive/2013/09/03/forced-parameterization-can-lead-to-poor-performance.aspx –