DBCC FREEPROCCACHE 나 DBCC FREESYSTEMCACHE ( 'SQL Plans') 모두 CACHESTORE_SQLCP 메모리를 비우기 위해 아무 작업도 수행하지 않습니다.


13

CACHESTORE_SQLCP Sql 계획은 며칠 후에 38GB를 초과합니다.

"Ad Hoc 워크로드 최적화"옵션이 이미 실행 중입니다. 엔터티 프레임 워크 및 사용자 지정보고는 많은 임시 작업을 생성합니다!

다중 AZ 미러링을 사용하는 AWS RDS의 SQL Server 2016 SE 3.00.2164.0.v1

내가 실행할 때 :

DBCC FREESYSTEMCACHE('SQL Plans');

또는

DBCC FREEPROCCACHE

또는

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL

또는

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;

그것을 지우지 않는 것 같습니다 :

SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb  desc

type                name        pages_kb
CACHESTORE_SQLCP    SQL Plans   38321048

Query Store를 사용하여 실행했지만 아무것도 방해하지 않는지 확인하지 못했지만 도움이되지는 않았지만 중단했습니다.

정말 이상한 것도

SELECT COUNT(*) FROM sys.dm_exec_cached_plans

1 ~ 3 정도입니다 (현재 실행중인 쿼리 만 표시하는 것 같습니다). 내가 무엇을 놓치고 있습니까?

CACHESTORE_SQLCP가 사용 가능한 모든 메모리의 60 % 이상을 차지하고 있습니다. 때때로 메모리 대기가 발생하기 때문에 문제가됩니다. 또한 부족한 메모리가 대기를 쌓아 올렸기 때문에 주말 동안 4 시간 동안 지속되는 일상적인 DBCC CHECKDB를 종료해야했습니다 (PHYSICAL_ONLY가 켜져있는 동안 오류없이 즉시 완료 됨).

이 메모리를 회수 할 수있는 방법이 있습니까 (야간 재부팅 제외)?

메모리 소비 그래프 메모리 소비 차트

의견 / 답변에서 업데이트

내가 달릴 때

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

나는 얻다

entity_name subentity_name  permission_name
server      CONNECT SQL
server      CREATE ANY DATABASE
server      ALTER ANY LOGIN
server      ALTER ANY LINKED SERVER
server      ALTER ANY CONNECTION
server      ALTER TRACE
server      VIEW ANY DATABASE
server      VIEW ANY DEFINITION
server      VIEW SERVER STATE
server      ALTER SERVER STATE
server      CREATE SERVER ROLE
server      ALTER ANY SERVER ROLE

필요한 ALTER SERVER STATE권한이 포함되어 있습니다 .

의 출력 DBCC FREEPROCCACHE

DBCC 실행이 완료되었습니다. DBCC가 오류 메시지를 인쇄 한 경우 시스템 관리자에게 문의하십시오.

표준 메시지입니다. RDS가 ​​지원하지 않는 다른 DBCC 기능은 권한에 대한 오류 메시지를 제공합니다.

(하루 후 다시 실행 한 후에도 SQL 계획은 여전히 ​​38,321,280 kb입니다)

의견 / 답변에서 업데이트

SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools

출력 :

pool_id name    cache_memory_kb  compile_memory_kb
1   internal    38368408         1168080

DBCC FREEPROCCACHE ('internal') 다르게 행동하지 않습니다

최신 정보

SQL 오류 로그는 매번 다음을 기록합니다.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

최신 정보

RDS의 엔진 버전이 13.00.2164.0.v1에서 13.00.4422.0.v1로 업그레이드되었습니다. 자동 마이너 버전 업그레이드로 설정되어 있지만 최신 버전으로 업데이트하지 않는 것 같습니다. 이번 주말에 재부팅하고 설치하여 도움이되는지 확인하십시오.

답변:


5

13.00.4422.0.v1 (SQL Server 2016 SP1)로 업그레이드하고 다시 시작했습니다.

지금까지 DBCC FREESYSTEMCACHE('SQL Plans');명령을 사용하여 SQL 계획 메모리를 지울 수 있습니다 !

시간이 지금 메모리를 조금 더 현명하게 사용하는지 알 수 있지만 적어도 다시 부풀어 오면 재설정 할 수있는 방법이 있습니다.


1
아직도 나는 자주 SQLCP를 지우지 말고 근본 원인을 찾아 내라고 제안 할 것이다
Shanky

거의 모든 사용자가 어떤 방식 으로든 거의 모든 쿼리를 실행할 수있게하는 Entity Framework 및 사용자 지정보고 기능은 많은 임시 쿼리를 생성합니다. 그것들을 제거하거나 처음에는 캐시하지 않도록 지시하는 방법이 있다면 도움이 될 수 있습니다. 지금까지 SP1 설치 이후 계획 캐시는 약 5.8GB로 움직였습니다.
프로페셔널 사운 딩 이름

활성화했습니다 Optimize for Ad-Hoc Workload. 38G와 비교하여 현재
5Gi를 사용

예, 위와 같이 Ad-Hoc 워크로드에 최적화가 설정되었습니다
Professional Sounding Name

1
13.0.4001.0에서도 이와 동일한 문제가 발생했습니다. proc 캐시를 지우려면 SQL을 반송해야했습니다. 아무것도 컴파일되지 않았지만 proc 캐시는 '고착'되었으며 우리가 무엇을 시도해도 지워지지 않았습니다. SQL 수신 거부 이후 다시 발생하는 것을 보지 못했지만 어떤 종류의 메모리 누수 또는 버그가 있는지 궁금합니다.
GoodwinSQL

3

요구 사항

DBCC FREEPROCCACHE또는 DBCC FREESYSTEMCACHE계정 을 실행 하려면 권한이 필요합니다 ALTER SERVER STATE.

참고 문헌

리소스 관리자

AWS RDS는 리소스 관리자 설정을 허용합니까? 그렇다면 구문은 다음과 같습니다.

DBCC FREEPROCCACHE ('<pool_name>'). 

다음이있는 수영장이 있는지 확인하십시오.

SELECT * FROM sys.dm_resource_governor_resource_pools

권한 확인

다음 명령을 실행하여 이러한 권한이 있는지 확인하십시오.

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

제한 / 제한

Microsoft SQL Server 보안 장의 Amazon RDS의 Microsoft SQL Server 문서에 설명 된대로 AWS RDS 인스턴스 관리자에게 부여 된 권한에 대한 일부 제한이 있습니다.

개요는 다음과 같습니다.

Amazon RDS에서는 현재 다음 서버 수준 역할을 사용할 수 없습니다.

  • bulkadmin
  • dbcreator
  • diskadmin
  • 보안 관리자
  • serveradmin
  • sysadmin

SQL Server DB 인스턴스에서는 다음과 같은 서버 수준 권한을 사용할 수 없습니다.

  • 관리자 대량 작업
  • 자격 증명 변경
  • 이벤트 알림 변경
  • 이벤트 세션 변경
  • 서버 감사 변경
  • 자원 변경
  • 변경 설정 (DB 파라미터 그룹 API를 사용하여 파라미터를 수정할 수 있습니다. 자세한 내용은 DB 파라미터 그룹 작업을 참조하십시오.
  • 인증 서버
  • CONTROL_SERVER
  • DDL 이벤트 알림 생성
  • 엔드 포인트 생성
  • 트레이스 이벤트 알림 생성
  • 외부 액세스 어셈블리
  • 종료 (대신 RDS 재부팅 옵션을 사용할 수 있음)
  • 안전하지 않은 조립
  • 가용성 그룹 변경 (SQL Server 2012 만 해당)
  • 가용성 그룹 만들기 (SQL Server 2012 만 해당)

이러한 제한 / 제한은 문서가 게시 된 이후 변경되었을 수 있습니다.

기타 자료

브렌트 오자르 (Brent Ozar)는 " SQL Server RDS " 라는 기사를 썼습니다 .

많은 DBCC 명령은 전혀 일을하지 - DBCC DBINFO그리고 DBCC LOGINFO명시 적으로 거부했다. 그러나 DBCC FREEPROCCACHE나는 내가 원하는만큼 자주 달리는 것을 발견했다 .

이러한 제한 사항은 시간이 지남에 따라 변경 될 수 있습니다. 새로운 기능이 정기적으로 추가됩니다.

아마존 지원

계정에 필요한 권한이 있고 캐시를 비울 수없는 경우 Amazon에서 지원 티켓을 열 수 있습니다.


이에 기반한 자세한 내용으로 질문을 업데이트했습니다. 신중하고 자세한 답변에 감사드립니다. RDS의 다른 것들과 관련된 권한 문제를 겪고 있지만 지원해야합니다. 활동이 많지 않으면 오늘 Amazon 지원팀에 연락하겠습니다. RDS 문제보다 SQL Server 문제처럼 보였으며,이 훌륭한 커뮤니티에 대한 지원이 지식이 많거나 구체적인지 알 수 없습니다!
프로페셔널 사운드 이름

1
의견을 보내 주셔서 감사합니다. 아무것도 작동하지 않는 것처럼 보이는 Amazon 또는 Microsoft와 함께 티켓을 열고 싶을 것입니다. 그리고 다시 버그 나 기능 일 수 있습니다 (제한 ..).
John aka hot2use
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.