2012-08-16 3 views
1

나는 처음에 실행될 때 약 9 초가 걸렸고 그 다음에 다시 실행될 때 약 4 초가 걸리는 쿼리를 가지고 있습니다. 이것에 대해 읽은 후에 나는 이것이 계획 캐싱의 표현이라고 믿는다 (비록 내가 틀릴 수도 있음). 나는이 질의를 최적화하려고 노력하고 있는데,이 효과는 매우 어렵다.
계획 분석 캐싱 문제에 대한 분석 결과가 정확합니까? 아니면 다른 옵션이 있습니까? 그렇다면이 캐싱을 로컬에서 사용하지 않도록 설정할 수있는 방법이 있습니다 (예 : 서버가 아닌 하나의 쿼리).SQL 서버 캐싱

마지막으로 옵션 (다시 컴파일)이이 토론에 어떻게 들어 맞습니까? 나는이 방법으로 SQL 서버 2008을 사용하고

,

+0

모든 답장을 보내 주셔서 감사합니다. 논리적 인 읽기를 줄이기 위해 알고 있어야하는 일반적인 기술과 문제가 있습니까? – stas

답변

0

할 때 등 계획/데이터 캐시, DB에 다른 부하의 효과를 해결하기 위해 많은 여기 놀이에 요인,하지만 한 가지 방법이 있습니다 쿼리 최적화는 logical reads에 집중하는 것입니다. 이것은 얼마나 많은 읽기가 완료 될 필요가 있는지입니다. 주어진 실행에 대해 캐시에서 왔는지 여부는 관련이 없습니다.

예 :

USE AdventureWorks2012; 
GO  

SET STATISTICS IO ON; 
GO 
SELECT * 
FROM Production.ProductCostHistory 
WHERE StandardCost < 500.00; 
GO 
SET STATISTICS IO OFF; 
GO 

결과 : 당신이 할 수

Table 'ProductCostHistory'. Scan count 1, logical reads 5, physical 
reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, 
lob read-ahead reads 0. 

논리를 얻기에 초점 쿼리를 튜닝 낮은 읽습니다.

1

캐싱을 계획하지는 않지만 데이터 캐싱이 원인 일 수 있습니다. 이 문제를 해결하는 데는 두 가지 방법이 있습니다. 을 실행할 수있는 서버에 DROPCLEANBUFFERS 데이터 캐시를 지우십시오. 또한 최적화를 수행하려면 쿼리 계획과 통계를 사용해야합니다. 이 경우 SET STATISTICS IO On 과 같이 실제 읽기보다 논리적 읽기에 집중할 수 있습니다. 데이터 캐시를 지운 후에 쿼리를 두 번 실행하면 물리적 읽기가 극적으로 감소하지만 논리적 읽기는 동일하게 유지됩니다.

`OPTION RECOMPILE` 

는 계획 캐싱에 영향을 미칩니 까와 쿼리 계획 자체가 때 결과 집합의 크기가 변경 극적 예를 들어, 때문에 다른 매개 변수를 전달로 변경됩니다 경우에만 상황에서 차이를 만들 것입니다.

논리적 읽기를 줄이려면? 일반적으로 말하자면, 인덱스와 커버리지 인덱스가 떠오른다. 실행 계획을 보면 SQL 서버가 필요하다고 생각하면 인덱스를 제안 할 수 있습니다. 실제로는 새로운 인덱스가 항상 도움이되는 것은 아니지만 적절한 인덱스 작성 구문을 제공합니다. 또한 실제 실행 계획에서 반환되는 행 수가 예상 행 수와 크게 다를 경우 통계를보고 싶을 수 있습니다. SQL 서버는 인덱스 된 열에 대한 통계를 유지하지만 자동 통계가 켜져 있지 않으면 where 문에 색인화되지 않은 열이 포함되어 있으면 통계를 생성하거나 색인을 생성하거나 자동 통계를 사용하려고 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 논리적 인 읽기를 줄이기 위해 알고 있어야하는 일반적인 기술과 문제가 있습니까? – stas

+0

일반화 된 기술에 대한 새로운 단락을 추가했습니다. – PatFromCanada

2

당신은 사용 계획 캐시를 지울 수 있습니다 'FREEPROCCACHE'

this MSDN page를 참조 캐시에서 구체적인 계획을 취소하는 방법의 예.

매우 긴 SQL 문이 아니라면 계획을 컴파일하는 데 4 초가 걸리지 않으므로 첫 번째 실행 후 쿼리가 더 빨리 실행되는 데이터 캐싱이 가장 가능성이 높습니다.