2012-04-24 2 views
3

SQL Server의 임의 (ad-hoc) 쿼리에 대한 간단한 매개 변수화보다 강제 매개 변수화를 사용하도록 선택하지 않는 이유는 무엇입니까?강제 매개 변수화

성능 오버 헤드가 있습니까? 그렇다면 재사용 쿼리 계획에서 얻은 (가능한) 이익으로 상쇄되지 않을까요?

답변

5

일회용 계획이 많은지 확인하기 위해 계획 캐시를 분석 했습니까?

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 참조).

+0

나는 구체적인 데이터베이스 문제가 없으므로, 설정에 대해 알게 된 후 더욱 흥미로 웠습니다. 근원은 강제적 인 매개 변수화를 끄는 부정적인 영향을 설명하지 않았고, 그래서 왜 당신이 디폴트로 그것을 가지고 있지 않을지 궁금했습니다. 감사. –

+0

+1. 또 다른 위대한 대답! :) –

+0

참조 : http://blogs.msdn.com/b/sql_pfe_blog/archive/2013/09/03/forced-parameterization-can-lead-to-poor-performance.aspx –