우연히 이전글을 보다가 플랜 캐쉬가 4GB가 넘으면 개발자랑 DBA랑 손잡고 한강으로....라는 것이 보이길래
현재 유지보수하고 있는곳을 살펴봤더니 4GB가 넘네요;;;;
확인 방법
- 플랜캐쉬 전체 사이즈 확인: 제일 상단 TYPE이 NULL인 행의 사이즈 확인
- 플랜캐쉬 사이즈 확인: 쿼리문을 실행해서 어느 곳에서 과도한 메모리가 사용되는지 확인
- 플랜캐쉬된 목록 확인: Adhoc, Proc, Prepared등을 확인하여 문제가 있는곳을 찾는다
-- 1. 플랜캐쉬 전체 사이즈 확인
SELECT TOP(20) [TYPE]
, SUM(SINGLE_PAGES_KB) AS [SPA MEM, KB]
FROM SYS.DM_OS_MEMORY_CLERKS
GROUP BY [TYPE]
WITH ROLLUP
ORDER BY SUM(SINGLE_PAGES_KB) DESC
-- 2. 플랜캐쉬 사이즈 확인
SELECT objtype AS [CacheType]
, count_big(*) AS [Total Plans]
, sum(cast(size_in_bytes as decimal(12,2)))/1024/1024 AS [Total MBs]
, avg(usecounts) AS [Avg Use Count]
, sum(cast((CASE WHEN usecounts = 1 THEN size_in_bytes ELSE 0 END) as decimal(12,2)))/1024/1024 AS [Total MBs - USE Count 1]
, sum(CASE WHEN usecounts = 1 THEN 1 ELSE 0 END) AS [Total Plans - USE Count 1]
FROM sys.dm_exec_cached_plans
GROUP BY objtype
ORDER BY [Total MBs - USE Count 1] DESC
-- 3. 플랜캐쉬된 목록 보기
SELECT cp.objtype
, cp.cacheobjtype
, cp.size_in_bytes
, cp.refcounts
, cp.usecounts
, st.text
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
WHERE cp.objtype = 'Adhoc' -- Adhoc, Proc, Prepared....
AND st.text NOT LIKE '%SELECT cp.objecttype%'
AND st.text NOT LIKE '%@BatchID%'
AND st.text NOT LIKE '%@_msparam%'
AND st.text NOT LIKE '%database%'
AND st.text NOT LIKE '%objtype%'
ORDER BY cp.objtype
-- 플랜캐쉬 옵션값 확인
SELECT *
FROM sys.dm_exec_plan_attributes(0x0600040053D99A184081EAAD000000000000000000000000)
WHERE attribute = 'set_options'
해결 방법
'WEB TIP > MS-SQL' 카테고리의 다른 글
백업결과 확인 (0) | 2017.10.10 |
---|---|
Plan Cache 확인 (0) | 2017.03.16 |
DEADLOCK 확인 (0) | 2017.03.13 |
전체 테이블 용량, 행수 (0) | 2016.12.21 |
테이블 변수를 이용한 문자열 분리 (0) | 2016.10.19 |