약간의 검색 후, 나는이 질문에 대답하기 위해 Microsoft의 문서에서 구체적이고 만족스러운 소스를 찾을 수 없었습니다. 거기에는 adhoc / ad-hoc / ad hoc에 대한 많은 타사 설명과 정의가 있지만이 질문의 특이성에 대해서는 소스와 가까운 것이 이상적이라고 생각합니다.
이 SO 게시물 (SqlWorldWide 덕분에 )과 같은 일반적인 (그러나 여전히 정확한) 정의를 넘어서서, 우리가 주제에 관한 문서가 무엇을 말하는지 살펴보면, 실행 횟수를 기반으로 정의에 대해 언급 한 것에 동의합니다. 나는 우리가 그것을 사실로 받아 들일 수 있다고 생각합니다.
애드혹 워크 플로우 최적화에 관한 기사에 따르면
이 옵션을 1로 설정하면 데이터베이스 엔진은 전체 컴파일 된 계획 대신 일괄 처리를 처음 컴파일 할 때 작은 컴파일 된 계획 스텁을 계획 캐시에 저장합니다. 이를 통해 계획 캐시가 재사용되지 않는 컴파일 된 계획으로 채워지지 않도록함으로써 메모리 부담을 줄일 수 있습니다. 컴파일 된 계획 스텁을 사용하면 데이터베이스 엔진은이 임시 배치가 이전에 컴파일되었지만 컴파일 된 계획 스텁 만 저장했음을 인식하므로이 배치가 다시 호출 (컴파일 또는 실행) 될 때 데이터베이스 엔진은 배치를 컴파일합니다. 전체 컴파일 된 계획을 계획 캐시에 추가합니다.
따라서 ad hoc 쿼리 서버 구성 옵션도 단일 실행 정의를 ad hoc 정의로 사용합니다. 쿼리가 계속 실행되어 동일한 계획을 생성하면 더 이상 그대로 처리되지 않습니다.
Query Store 모범 사례에 관한 기사 도 이와 관련이 있습니다.
고유 한 query_hash 값 수를 sys.query_store_query의 총 항목 수와 비교하십시오. 비율이 1에 가까우면 임시 작업이 다른 쿼리를 생성합니다.
물론 이것은 저장 프로 시저로 아직 사용되지 않거나 매개 변수화 등의 쿼리에 적합합니다. 박쥐에서 바로 인식하고 처리 할 수 있기 때문입니다.
따라서이 모든 것을 바탕으로 다음과 같은 경우 쿼리가 임시로 처리된다고 말할 수 있습니다.
- 파라미터 화되지 않았습니다
- 프로그래밍 방식으로 데이터베이스에 저장되지 않습니다 (저장된 proc, 함수, 트리거 등).
- 동일한 쿼리가 한 번만 실행되거나 동일한 쿼리가 여러 번 실행되지만 이후의 각 실행에 대해 다른 쿼리 계획이 생성됩니다.