DBCC FREEPROCCACHE(Transact-SQL)

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

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

참고

DBCC FREEPROCCACHE는 고유하게 컴파일된 저장 프로시저에 대한 실행 통계를 지우지 않습니다. 프로시저 캐시는 고유하게 컴파일된 저장 프로시저에 대한 정보를 포함하지 않습니다. 프로시저 실행에서 수집된 모든 실행 통계는 실행 통계 DMV(sys.dm_exec_procedure_stats(Transact-SQL)sys.dm_exec_query_plan(Transact-SQL))에 표시됩니다.

Transact-SQL 구문 표기 규칙

구문

SQL Server 및 Azure SQL Database에 대한 구문:

DBCC FREEPROCCACHE [ ( { plan_handle | sql_handle | pool_name } ) ] [ WITH NO_INFOMSGS ]

Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW) 구문:

DBCC FREEPROCCACHE [ ( COMPUTE | ALL ) ]
     [ WITH NO_INFOMSGS ]
[;]

참고

SQL Server 2014 이전 버전의 Transact-SQL 구문을 보려면 이전 버전 설명서를 참조하세요.

인수

( { plan_handle | sql_handle | pool_name } )

plan_handle은 실행된 일괄 처리에 대한 쿼리 계획을 고유하게 식별하며, 해당 계획은 계획 캐시에 있습니다. plan_handlevarbinary(64)이며, 다음 동적 관리 개체에서 가져올 수 있습니다.

sql_handle은 지우려는 일괄 처리의 SQL 핸들입니다. sql_handlevarbinary(64)이며, 다음 동적 관리 개체에서 가져올 수 있습니다.

pool_name은 Resource Governor 리소스 풀의 이름입니다. pool_namesysname이며, sys.dm_resource_governor_resource_pools 동적 관리 뷰를 쿼리하여 가져올 수 있습니다.

Resource Governor 작업 그룹을 리소스 풀에 연결하려면 sys.dm_resource_governor_workload_groups 동적 관리 뷰를 쿼리합니다. 세션의 작업 그룹에 대한 자세한 내용은 sys.dm_exec_sessions 동적 관리 뷰를 쿼리하세요.

WITH NO_INFOMSGS

모든 정보 메시지를 표시하지 않습니다.

COMPUTE

각 컴퓨팅 노드에서 쿼리 계획 캐시를 제거합니다. 이것은 기본값입니다.

ALL

각 컴퓨팅 노드와 제어 노드에서 쿼리 계획 캐시를 제거합니다.

참고

SQL Server 2016(13.x)부터 ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE를 사용하여 현재 데이터베이스의 프로시저(계획) 캐시를 지울 수 있습니다.

설명

계획 캐시를 신중하게 지우려면 DBCC FREEPROCCACHE를 사용합니다. 프로시저(계획) 캐시를 지우면 모든 계획이 제거되고, 이전에 캐시된 계획을 다시 사용하지 않고 들어오는 쿼리를 실행하면 새 계획이 컴파일됩니다.

이로 인해 새 컴파일 횟수가 증가함에 따라 쿼리 성능이 갑자기 일시적으로 저하될 수 있습니다. 계획 캐시에서 지워진 각 캐시스토어에 대한 다음 정보 메시지가 SQL Server 오류 로그에 포함됩니다.

SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

이 메시지는 캐시가 해당 시간 간격 내에 플러시되는 동안 5분마다 기록됩니다.

다음과 같은 다시 구성 작업은 프로시저 캐시도 지웁니다.

  • access check cache bucket count
  • access check cache quota
  • clr enabled
  • cost threshold for parallelism
  • cross db ownership chaining
  • index create memory
  • max degree of parallelism
  • max server memory
  • max text repl size
  • max worker threads
  • min memory per query
  • min server memory
  • query governor cost limit
  • query wait
  • remote query timeout
  • user options

Azure SQL Database에서 DBCC FREEPROCCACHE는 현재 데이터베이스 또는 탄력적 풀을 호스트하는 데이터베이스 엔진 인스턴스에서 작동합니다. 사용자 데이터베이스에서 DBCC FREEPROCCACHE를 실행하면 해당 데이터베이스에 대한 계획 캐시가 지워지게 됩니다. 데이터베이스가 탄력적 풀에 있는 경우 해당 탄력적 풀의 다른 모든 데이터베이스에서도 계획 캐시를 삭제합니다. master 데이터베이스에서 명령을 실행해도 동일한 논리 서버의 다른 데이터베이스에는 영향을 주지 않습니다. 기본, S0 또는 S1 서비스 목표를 사용하여 데이터베이스에서 이 명령을 실행하면 동일한 논리 서버에서 이러한 서비스 목표를 사용하여 다른 데이터베이스에서 계획 캐시를 삭제할 수 있습니다.

결과 집합

WITH NO_INFOMSGS 절을 지정하지 않으면 DBCC FREEPROCCACHE에서 다음을 반환합니다.

DBCC execution completed. If DBCC printed error messages, contact your system administrator.

사용 권한

적용 대상: SQL Server, 분석 플랫폼 시스템(PDW)

  • 서버에 대한 ALTER SERVER STATE 권한이 필요합니다.

적용 대상: Azure SQL Database

  • 서버 역할 ##MS_ServerStateManager##의 멤버 자격이 필요합니다.

적용 대상: Azure Synapse Analytics

  • db_owner 고정 데이터베이스 역할의 멤버 자격이 필요합니다.

Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW) 설명

여러 DBCC FREEPROCCACHE 명령을 동시에 실행할 수 있습니다.

Azure Synapse Analytics 또는 분석 플랫폼 시스템(PDW)에서 계획 캐시를 지우면 들어오는 쿼리에서 이전에 캐시된 계획을 다시 사용하지 않고 새 계획을 컴파일하므로 쿼리 성능이 일시적으로 저하될 수 있습니다.

DBCC FREEPROCCACHE (COMPUTE)만 사용하면 컴퓨팅 노드에서 쿼리를 실행할 때 SQL Server에서 해당 쿼리를 다시 컴파일합니다. Azure Synapse Analytics 또는 분석 플랫폼 시스템(PDW)에서는 제어 노드에 생성된 병렬 쿼리 계획을 다시 컴파일하지 않습니다.

DBCC FREEPROCCACHE는 실행 중에 취소할 수 있습니다.

Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)에 대한 제한 사항

DBCC FREEPROCCACHE는 트랜잭션 내에서 실행할 수 없습니다.

DBCC FREEPROCCACHE는 EXPLAIN 문에서 지원되지 않습니다.

Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)에 대한 메타데이터

sys.pdw_exec_requests 실행 시 DBCC FREEPROCCACHE 시스템 보기에 새 행이 추가됩니다.

예제: SQL Server

A. 계획 캐시에서 쿼리 계획 지우기

다음 예에서는 쿼리 계획 핸들을 지정하여 계획 캐시에서 계획 지침을 삭제합니다. 예제 쿼리가 계획 캐시에 놓이도록 쿼리가 먼저 실행됩니다. sys.dm_exec_cached_planssys.dm_exec_sql_text 동적 관리 뷰를 쿼리하여 쿼리에 대한 계획 핸들을 반환합니다.

그러면 계획 캐시에서 해당 계획만 제거하도록 결과 집합의 계획 핸들 값이 DBCC FREEPROCACHE 문에 삽입됩니다.

USE AdventureWorks2022;
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 row(s) affected)
-- Remove the specific plan from the cache.
DBCC FREEPROCCACHE (0x060006001ECA270EC0215D05000000000000000000000000);
GO

B. 계획 캐시에서 모든 계획 삭제

다음 예에서는 계획 캐시에서 모든 요소를 삭제합니다. WITH NO_INFOMSGS절은 정보 메시지가 표시되지 않도록 지정됩니다.

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

C. 리소스 풀에 연결된 모든 캐시 항목 지우기

다음 예에서는 지정된 리소스 풀에 연결된 모든 캐시 항목을 지웁니다. sys.dm_resource_governor_resource_pools 뷰를 먼저 쿼리하여 pool_name 값을 가져옵니다.

SELECT * FROM sys.dm_resource_governor_resource_pools;
GO
DBCC FREEPROCCACHE ('default');
GO

예: Azure Synapse Analytics 및 분석 플랫폼 시스템(PDW)

D. DBCC FREEPROCCACHE 기본 구문

다음 예제에서는 컴퓨팅 노드에서 기존 쿼리 계획 캐시를 모두 제거합니다. 컨텍스트가 UserDbSales로 설정되어 있지만 모든 데이터베이스에 대한 컴퓨팅 노드 쿼리 계획 캐시가 제거됩니다. WITH NO_INFOMSGS 절은 정보 메시지가 결과에 표시되지 않도록 합니다.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE) WITH NO_INFOMSGS;

다음 예제에서는 정보 메시지가 결과에 표시된다는 점을 제외하고 이전 예제와 동일한 결과를 보여 줍니다.

USE UserDbSales;
DBCC FREEPROCCACHE (COMPUTE);

정보 메시지가 요청되고 실행이 성공하면 쿼리 결과에는 컴퓨팅 노드당 한 줄씩 표시됩니다.

E. DBCC FREEPROCCACHE 실행 권한 부여

다음 예에서는 David 실행을 위해 DBCC FREEPROCCACHE 로그인 권한을 제공합니다.

GRANT ALTER SERVER STATE TO David;
GO

추가 정보