다음을 통해 공유


DBCC FREEPROCCACHE(Transact-SQL)

계획 캐시에서 모든 요소를 제거하거나, 계획 핸들이나 SQL 핸들을 지정하여 계획 캐시에서 특정 계획을 제거하거나, 지정한 리소스 풀에 연결된 모든 캐시 항목을 제거합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ 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