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
'Database Administrator > Monitoring' 카테고리의 다른 글
| Tempdb 공간 사용 확인 (0) | 2013.09.13 |
|---|---|
| 대랑 I/O 사용 세션 쿼리 (0) | 2012.08.13 |
| TEMPDB의 페이지 사용량 측정 (0) | 2012.08.13 |
| 모니터링::Index 생성 & Rebuild 진행 상황 (0) | 2011.12.06 |