SQL Server의 계획 캐시 내용을 이해하려고합니다.SQL Server 계획 캐시의 임시 쿼리와 준비된 쿼리의 차이점은 무엇입니까?
내 질문은
입니다. 1. 임시 계획과 준비 계획의 차이점은 무엇입니까?
2. SQL Server 계획 캐시를 최적화 할 때 알아야 할 사항은 무엇입니까?
SQL Server의 계획 캐시 내용을 이해하려고합니다.SQL Server 계획 캐시의 임시 쿼리와 준비된 쿼리의 차이점은 무엇입니까?
내 질문은
입니다. 1. 임시 계획과 준비 계획의 차이점은 무엇입니까?
2. SQL Server 계획 캐시를 최적화 할 때 알아야 할 사항은 무엇입니까?
특별 계획과 준비 계획의 차이점은 무엇입니까?
애드혹 쿼리
select * from t1
준비 쿼리 실제 값 대신 대체 위치에 홀더가 준비된 문이라고
를 조회합니다.
몇 가지 예 :
select * from t1 where [email protected]
또 하나의 예는 위키 피 디아에서 촬영 : SQL 서버 계획 캐시를 최적화 할 때
command.CommandText = "SELECT * FROM users WHERE USERNAME = @username AND ROOM = @room";
command.Parameters.AddWithValue("@username", username);
command.Parameters.AddWithValue("@room", room);
나는 그것에 대해 알아야 할 사항은 무엇입니까? 내가 조금 그것을 유지하려고합니다 cache.so 계획을 최적화하는 방법에 대해 설명 백서가 있습니다
는 .. 쿼리가 SQL에 대해 실행됩니다 일반적으로
, SQL은 계획의 계획 저장을 컴파일 캐시는 .. 계획 캐시 메모리 버퍼 풀에서 가져 다른 버전 당신은 메모리가 하드웨어 아무리 당신이 누출이있는 경우 충분하지 않습니다 귀중한 자원 및 것을 알고 how much amount of memory will be used에 다른 제한이 .This
당신이 한 번 또는 두 번 쿼리를 제출 가정이이 lot.SQL는 일반적으로 나쁜 PlanCache을 bloats 계획 캐시에서이 쿼리의 계획을 저장합니다 쿼리와 같이 제출하는 경향이
도움이 될 것입니다 다른 DMV에 있습니다계획 캐시를 파고 들었다.
쿼리 객체의 다른 유형을 찾을 계획 캐시에 있습니다
select
objtype,count(*) as countt,sum(size_in_bytes)*1024.0 as memoryinkb
from sys.dm_exec_cached_plans a
group by objtype
애드혹은 plancache을 복부 팽만되고 준비된 쿼리는 한 번만 사용됩니다
select q.query_hash,
q.number_of_entries,
t.text as sample_query,
p.query_plan as sample_plan
from (select top 20 query_hash,
count(*) as number_of_entries,
min(sql_handle) as sample_sql_handle,
min(plan_handle) as sample_plan_handle
from sys.dm_exec_query_stats
group by query_hash
having count(*) > 1
order by count(*) desc) as q
cross apply sys.dm_exec_sql_text(q.sample_sql_handle) as t
cross apply sys.dm_exec_query_plan(q.sample_plan_handle) as p
으로 bloating 계획 캐시 인 명령문 삭제 :
DECLARE @MB decimal(19,3)
, @Count bigint
, @StrMB nvarchar(20)
SELECT @MB = sum(cast((CASE WHEN usecounts = 1 AND objtype IN ('Adhoc', 'Prepared') THEN size_in_bytes ELSE 0 END) as decimal(12,2)))/1024/1024
, @Count = sum(CASE WHEN usecounts = 1 AND objtype IN ('Adhoc', 'Prepared') THEN 1 ELSE 0 END)
, @StrMB = convert(nvarchar(20), @MB)
FROM sys.dm_exec_cached_plans
IF @MB > 10
BEGIN
DBCC FREESYSTEMCACHE('SQL Plans')
RAISERROR ('%s MB was allocated to single-use plan cache. Single-use plans have been cleared.', 10, 1, @StrMB)
END
ELSE
BEGIN
RAISERROR ('Only %s MB is allocated to single-use plan cache – no need to clear cache now.', 10, 1, @StrMB)
— Note: this is only a warning message and not an actual error.
END
go
위의 당신이 시작하는 위치에 대한 아이디어를 제공한다, 아래의 주제 및 참고 읽어야합니다 있습니다 :
1. http://www.sqlskills.com/blogs/kimberly/category/plan-cache/
3. https://technet.microsoft.com/en-us/library/dd672789(v=sql.100).aspx
을4. Must read article By SQLCAT on issues customer faced while using Prepare Statements
참조 된 문서 위의 경우 kimberely Adhoc 작업 부하 최적화 옵션을 사용하도록 제안하지만 먼저 테스트 해보십시오. interesting thread은 DBA.SE에 있습니다.
감사합니다. 당신이 임시로 플랜케이크를 부풀리기 시작 했으므로 한 번만 사용되는 계획을 준비했습니다. SQL Server는 임시 워크로드에 대해 최적화 옵션을 제공합니다. 옵션을 1로 설정하면 데이터베이스 엔진은 처음 실행시 전체 계획이 아닌 계획 캐시에 작은 컴파일 된 계획 스텁 만 저장합니다. – r0tt
좋은 옵션, 임시 작업 최적화 옵션의 일부 스레드 링크에 대한 업데이트 된 답변보기 – TheGameiswar