SQL Server 저장 프로 시저가 데이터 결과를 캐시합니까?


11

나는 친구에게서 이것을 들었지만 이것이 사실인지 조사한 적이 없다.

실행 된 쿼리의 데이터 결과가 캐시에 저장되는 것이 사실입니까?

다음과 같은 저장 프로 시저가있는 경우

SELECT * FROM USERLIST

... 결과 (이 경우 사용자 목록)가 캐시에 저장되는 것이 사실입니다.

또한, 내가 이것을 가지고 있다면 :

SELECT * FROM USERLIST WHERE user="user"
SELECT * FROM USERLIST WHERE user="userzzz"

(user / userzzz가 매개 변수로 전달되는 경우) 데이터베이스 캐시에 두 가지 다른 결과를 저장하는 것이 맞습니까?

나는 그렇게 생각하지 않지만 전문가 여러분의 확인을 원합니다!


답변:


19

쿼리 결과가 캐시 되지 않습니다

그러나 소스 테이블과 인덱스 데이터 및 메타 데이터는 첫 번째 사용 후 캐시됩니다 (계속 사용,로드 및 메모리 압력에 따라 다름)

즉, 쿼리 결과는 매 실행마다 평가되지만 쿼리에 사용 된 테이블 (및 인덱스 등)은 이미 메모리에있을 가능성이 높습니다.

컴파일 된 실행 계획이 캐시되어 의심됩니다.


"즉, 쿼리 결과는 매 실행마다 평가되지만 쿼리에 사용 된 테이블 (및 인덱스 등)은 이미 메모리에있을 가능성이 높습니다." : 예, 또한 SP를 사용하지 않는 것 같습니다. Sp와 관련이없는 데이터베이스 최적화입니다.

@markzzz : 거의 모든 SQL이 직접 UPDATE, SELECT 또는 저장 프로 시저에 관계없이 실행 계획으로 컴파일됩니다.
gbn

6

저장 프로 시저가 실행될 때 최적화되고 컴파일되며 쿼리 계획이 프로 시저 캐시에 배치됩니다.

공간이있는 한 프로시 저는 다른 사용자를 위해 캐시에 남아 있습니다. 가장 최근에 사용한 (LRU) 알고리즘을 사용하여 절차를 제거합니다.


저장 프로 시저의 초기 실행은 디스크의 sysprocedures에서 검색해야하지만 후속 실행의 경우 프로 시저 캐시에서 최적화 된 계획을 간단히 검색 할 수 있습니다. 이 동작으로 인해 성능이 크게 향상 될 수 있습니다.

따라서 캐시에는 저장 프로 시저의 결과가 아니라 저장 프로 시저의 최적화 된 계획이 있습니다.


6

SQL Server에서 쿼리를 처리 할 준비가되면 SQL Manager가 쿼리를 찾습니다 cache. 존재하지 않으면 컴파일해야합니다. 컴파일 과정에는 몇 가지 사항이 포함됩니다.

저장 프로 시저가 실행될 때 최적화되고 컴파일됩니다. 이에 따라 쿼리 계획이 프로 시저 캐시에 배치됩니다.

쿼리 처리 등에 대한 자세한 내용은 Microsoft SQL Server 쿼리 프로세서 내부 및 아키텍처 Compilation and Execution 섹션을 확인하십시오 .

컴파일 단계의 최종 결과물은 쿼리 계획이며 프로 시저 캐시에 저장됩니다. SQL 쿼리 결과 / 작업의 크기는 MB, GB 단위 일 수 있으므로 프로 시저 캐시 또는 쿼리 계획에 포함되지 않습니다.

저장 프로 시저 실행에 대한 다음 다이어그램 (MSDN)을 확인하여 질문을 명확하게하십시오. 여기에 이미지 설명을 입력하십시오


-1

SQL Server는 기본적으로 다음 단계를 수행하여 모든 쿼리 (저장 프로 시저 호출 또는 임시 SQL 문)를 실행합니다.

1) 구문 적으로 쿼리를 확인하십시오
.2) 괜찮다면-계획 캐시를 검사하여 해당 쿼리에 대한 실행 계획이 있는지 확인하십시오
.3) 실행 계획이 있는지-계획이 (재) 사용되고 쿼리가 실행되었는지 확인하십시오.
4) 계획이 아직 없으면 실행 계획이 결정됩니다.
5) 계획이 나중에 재사용하기 위해 계획 캐시에 저장됩니다.
6) 쿼리가 실행됩니다.

(Marc_s 답변의 사본)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.