3

SQL Server 2014의 "Hekaton" in-memory table optimization은 "저장 프로 시저에서 비즈니스 논리의 기본 컴파일"이라고 선언합니다. 그러나 SQL Server 2012 및 이전 버전의 "매개 변수 스니핑"(herehere 참조) 문제로 인해 항상 대부분의 저장 프로 시저를 OPTIMIZE FOR UNKNOWN (또는 이와 동등한 것으로)으로 디자인해야했습니다. 이렇게하면 쿼리 계획이 효과적으로 캐시되지 않게되고 실행될 때마다 SQL Server에서 쿼리를 다시 컴파일하거나 다시 최적화해야합니다. Hekaton의 성능 향상은 원시 컴파일 된 쿼리의 재사용으로 인해 발생하지만 SQL Server 2014는 매개 변수 스니핑 문제를 해결하기 위해 어떤 작업을 수행합니까? 실제로 컴파일 된 쿼리를 사용할 수 있습니까?Sql Server 2014의 "Hekaton"컴파일 된 저장 프로 시저에서 매개 변수 스니핑 문제를 해결합니까?

+0

나는 답을 모른다. 그러나 CTP가 방금 나왔고, 유익하게 대답 할 기회가있는 사람들은 NDA하에있다. 곧 언제든지 만족할만한 대답을 얻을 수 있습니다. 그것은 어느 방향 으로든 갈 수 있다고 말했다. 하지만 돈을 투자한다면 매개 변수 스니핑은 다른 매개 변수에 대한 다른 계획을 저장하는 방법을 생각해 내지 않는 한 항상 문제가 될 수 있다고 말하고 싶습니다. –

답변

3

해석시 Transact-SQL 저장 프로시 저는 작성시 컴파일되는 원시 컴파일 된 (즉, Hekaton) 저장 프로 시저와 달리 처음 실행시 컴파일됩니다 (따라서 작성시 쿼리 실행 계획이 결정됩니다) . 인터럽트 된 스토어드 프로 시저가 호출시 컴파일 될 때이 호출에 제공된 매개 변수의 값은 실행 계획을 생성 할 때 옵티마이 저가 사용됩니다. 컴파일하는 동안 매개 변수를 사용하는 것을 매개 변수 스니핑이라고합니다.

매개 변수 스니핑은 기본적으로 컴파일 된 저장 프로 시저를 컴파일하는 데 사용되지 않습니다. 저장 프로 시저에 대한 모든 매개 변수는 UNKNOWN 값으로 간주됩니다.

해결 방법으로, OPTIMIZE FOR을 사용하여 프로 시저를 컴파일 할 때 쿼리 최적화 프로그램이 변수/매개 변수에 특정 값을 사용하도록 지시 할 수 있습니다.

0

"네이티브"저장 프로 시저를 만들 때 알고있는 한 즉시 네이티브 코드로 컴파일되며 쿼리 최적화 프로그램을 통과하지 않습니다. 그래서 나는 "매개 변수 스니핑"문제가 문제가 될 것이라고 생각하지 않습니다.

+1

쿼리 최적화 프로그램이 프로 시저 컴파일 중에 호출되고 실행 계획이 그 시점에서 결정됩니다 (즉, 모든 호출에 대해 단일 실행 계획이 있음). – Gjorgji

관련 문제