DBCC FREEPROCCACHE(Transact-SQL)
계획 캐시에서 모든 요소를 제거하거나, 계획 핸들이나 SQL 핸들을 지정하여 계획 캐시에서 특정 계획을 제거하거나, 지정한 리소스 풀에 연결된 모든 캐시 항목을 제거합니다.
구문
DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]
인수
( { plan_handle | sql_handle | pool_name } )
plan_handle은 실행된 일괄 처리에 대한 쿼리 계획을 고유하게 식별하며 해당 계획은 계획 캐시에 있습니다. plan_handle은 varbinary(64)이고 다음 동적 관리 개체에서 가져올 수 있습니다.sql_handle은 제거할 일괄 처리의 SQL 핸들입니다. sql_handle 은 varbinary(64)이며 다음 동적 관리 개체에서 가져올 수 있습니다.
pool_name은 리소스 관리자 리소스 풀의 이름입니다. pool_name은 sysname이고 sys.dm_resource_governor_resource_pools 동적 관리 뷰를 쿼리하여 가져올 수 있습니다.
리소스 풀에 리소스 관리자 작업 그룹을 연결하려면 sys.dm_resource_governor_workload_groups 동적 관리 뷰를 쿼리하고, 세션의 작업 그룹에 대한 자세한 내용을 보려면 sys.dm_exec_sessions 동적 관리 뷰를 쿼리하십시오.
WITH NO_INFOMSGS
모든 정보 메시지를 표시하지 않습니다.
주의
계획 캐시를 신중하게 지우려면 DBCC FREEPROCCACHE를 사용합니다. 예를 들어 계획 캐시를 해제하면 저장 프로시저가 캐시에서 다시 사용되지 않고 다시 컴파일됩니다. 이로 인해 쿼리 성능이 일시적으로 갑자기 저하될 수 있습니다. 계획 캐시의 삭제된 각 캐시스토어에 대해 SQL Server 오류 로그에 "'DBCC FREEPROCCACHE' 또는 'DBCC FREESYSTEMCACHE' 작업으로 인해 '%s' 캐시스토어(계획 캐시의 일부)에 대한 캐시스토어 플러시가 SQL Server에서 %d번 발견되었습니다"라는 정보 메시지가 있습니다. 이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다.
결과 집합
WITH NO_INFOMSGS 절이 지정되지 않았으면 DBCC FREEPROCCACHE이 다음 메시지를 반환합니다.
"DBCC 실행이 완료되었습니다. DBCC에서 오류 메시지를 출력하면 시스템 관리자에게 문의하십시오."
사용 권한
서버에 대한 ALTER SERVER STATE 권한이 필요합니다.
예
1. 계획 캐시에서 계획 지침 만들기
다음 예에서는 쿼리 계획 핸들을 지정하여 계획 캐시에서 계획 지침을 삭제합니다. 예제 쿼리가 계획 캐시에 놓이도록 쿼리가 먼저 실행됩니다. 쿼리에 대한 계획 핸들을 반환하기 위해 sys.dm_exec_cached_plans 및 sys.dm_exec_sql_text 동적 관리 뷰가 쿼리됩니다. 그러면 계획 캐시에서 해당 계획만 제거하도록 결과 집합의 계획 핸들 값이 DBCC FREEPROCACHE 문에 삽입됩니다.
USE AdventureWorks2008R2;
GO
SELECT * FROM Person.Address;
GO
SELECT plan_handle, st.text
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'SELECT * FROM Person.Address%';
GO
결과 집합은 다음과 같습니다.
plan_handle text
-------------------------------------------------- -----------------------------
0x060006001ECA270EC0215D05000000000000000000000000 SELECT * FROM Person.Address;
(1개 행 적용됨)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO
2. 계획 캐시에서 모든 계획 삭제
다음 예에서는 계획 캐시에서 모든 요소를 삭제합니다. 정보 메시지가 표시되지 않도록 WITH NO_INFOMSGS 절이 지정됩니다.
DBCC FREEPROCCACHE WITH NO_INFOMSGS;
3. 리소스 풀에 연결된 모든 캐시 항목 지우기
다음 예에서는 지정된 리소스 풀에 연결된 모든 캐시 항목을 지웁니다. pool_name 값을 가져오기 위해 sys.dm_resource_governor_resource_pools 뷰가 먼저 쿼리됩니다.
SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE ('default');
GO