2012. 8. 13. 18:21

실행 쿼리 memory 사용 대기 정보

SQL SERVER 2005 이상. - 일부 컬럼은 SQL 2008 이상



메모리 사용을 대기하는 쿼리의 정보를 반환합니다. 

메모리 대기를 하지 않는 쿼리는 나타나지 않으며, 이 쿼리에 실행되는 내역이 많다면 메모리 할당 대기가 많다는 의미 입니다. 



-- memory used
select top 50
  --mem.session_id,req.group_id, -- sql 2008 이상 가능
  db_name(req.database_id) as db,
  mem.request_time, mem.grant_time,
  mem.granted_memory_kb,mem.used_memory_kb, mem.required_memory_kb, 
  mem.query_cost,mem.timeout_sec,mem.wait_time_ms as 'wait_time',
  object_schema_name(sql_text.objectid,sql_text.dbid) as schema_n,
  object_name(sql_text.objectid, sql_text.dbid) as spname,
  CASE WHEN   req.statement_end_offset = -1 and ( (req.statement_start_offset / 2)  > DATALENGTH (sql_text.text) )
            THEN  convert(varchar(4000), 
                 substring(isnull(sql_text.text, '') 
               , 1, ( ( DATALENGTH (sql_text.text) - 1 )/2 ) + 1 ) )
            ELSE  convert(varchar(4000), substring(isnull(sql_text.text, '') 
             , (req.statement_start_offset / 2) + 1
             , (( case when req.statement_end_offset = -1 then DATALENGTH (sql_text.text) else req.statement_end_offset end 
               - req.statement_start_offset ) /2 ) + 1) )
            END  as query_text,
  ses.login_name, ses.host_name, ses.program_name,
  mem.scheduler_id
from sys.dm_exec_requests as req with (nolock)
  join sys.dm_exec_sessions as ses with (nolock) on req.session_id = ses.session_id
  join sys.dm_exec_query_memory_grants as mem with (nolock) on req.request_id = mem.request_id
    and ses.session_id = mem.session_id
  cross apply sys.dm_exec_sql_text(req.sql_handle) as sql_text
where ses.is_user_process = 1  and wait_type <> 'WAITFOR' 
  --and req.database_id = db_id('tiger')
  -- and mem.grant_time is null -- not allocation 
order by used_memory_kb desc

'Monitoring' 카테고리의 다른 글

Tempdb 공간 사용 확인  (0) 2013.09.13
대랑 I/O 사용 세션 쿼리  (0) 2012.08.13
TEMPDB의 페이지 사용량 측정  (0) 2012.08.13
모니터링::Index 생성 & Rebuild 진행 상황  (0) 2011.12.06