SQL Server 인스턴스용 RDS를 재부팅하지 않고 버퍼 캐시 또는 기타 캐시를 지우려면 어떻게 해야 하나요?

2분 분량
0

Microsoft SQL Server 인스턴스용 Amazon Relational Database Service(RDS)에서 Microsoft SQL Server 캐시를 지우고 싶습니다. DB 인스턴스를 다시 시작하지 않고 이 작업을 수행하려면 어떻게 해야 하나요?

간략한 설명

SQL Server 캐시를 지우는 방법은 매우 세분화된 것부터 전체 캐시 지우기까지 여러 가지가 있습니다. 다음 도구를 사용하여 캐시를 지울 수 있습니다. 이러한 도구는 모두 SQL Server용 데이터베이스 콘솔 명령(DBCC)과 함께 사용할 수 있습니다.

  • DBCC FREEPROCCACHE: 전체 계획 캐시를 제거하여 캐시를 지웁니다. 이 명령은 특정 계획을 제거하거나 리소스 풀에 연결된 캐시 항목을 제거할 수도 있습니다.
  • DBCC FREESYSTEMCACHE: 계획 캐시에서 요소를 제거하는 것 외에도 DBCC FREESYSTEMCACHE는 다른 메모리 캐시를 지울 수 있습니다.
  • DBCC ALTER DATABASE SCOPED CONFIGURATION: 이 명령은 SQL Server 2016부터 사용할 수 있습니다.

해결 방법

참고: 다음 명령을 프로덕션 환경에서 실행하기 전에 철저하게 테스트하는 것이 좋습니다. 테스트는 구현 중에 발생할 수 있는 잠재적 문제를 식별하는 데 도움이 됩니다.

상위 5개의 캐시와 사용된 메모리 식별

다음 명령을 실행하여 상위 5개의 캐시와 사용된 메모리를 식별합니다.

SELECT TOP(5) name AS [Name],
SUM(pages_kb) AS [SizeKb]
FROM sys.dm_os_memory_cache_counters WITH (NOLOCK)
GROUP BY name
ORDER BY SizeKb DESC

캐시에서 하나의 계획 제거(파라미터 스니핑 문제)

다음 명령을 실행하여 잘못된 계획을 식별합니다.

SELECT cp.plan_handle, cp.objtype, cp.usecounts,
DB_NAME(st.dbid)
AS [DatabaseName], st.text
FROM sys.dm_exec_cached_plans AS cp CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE st.text LIKE N'%[search string]%' OPTION (RECOMPILE);

다음 명령 중 하나를 실행하여 잘못된 계획을 제거합니다.

DBCC FREEPROCCACHE (plan_handle);

또는

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE [plan_handle];

필요에 따라 준비된 계획을 캐시에서 제거

캐시에 필요에 따른 계획이 너무 많으면 다음 명령을 실행하여 계획을 제거하세요.

DBCC FREESYSTEMCACHE ('SQL Plans')

현재 데이터베이스의 계획 캐시 지우기

SQL Server 2016 이상으로 실행하는 경우 다음 명령을 실행합니다.

ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;

또는

DBCC FREESYSTEMCACHE('DatabaseName')

SQL 2016 이전 버전의 SQL Server를 사용하는 경우 다음 명령을 실행합니다.

declare @dbid int = (select DB_ID())
DBCC FLUSHPROCINDB (@dbid);

모든 캐시 지우기

DBCC FREESYSTEMCACHE('ALL')

또는

DBCC FREEPROCCACHE WITH NO_INFOMSGS;

참고: DBCC DROPCLEANBUFFERS 명령은 모든 캐시와 버퍼 풀을 지우는 데 사용됩니다. 이 명령은 sysadmin 고정 서버 역할의 멤버십이 필요하기 때문에 Amazon RDS for SQL Server에서는 지원되지 않습니다.