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
2010. 3. 14. 15:41

CPU에 할당된 Task 보기

SQL SERVER 2005 이상

 

CPU에 해당하는 Task 보기

select  
	 ss.scheduler_id ,ss.parent_node_id,object_name(sql_text.objectid, sql_text.dbid)  as 'SP명'
	,ses.session_id , ses.host_name , ses.program_name , ses.client_interface_name 
	,ses.login_name 
	 ,substring(sql_text.text,sr.statement_start_offset/2,
			(case when sr.statement_end_offset = -1
			then len(convert(nvarchar(max), sql_text.text)) * 2
			else sr.statement_end_offset end - sr.statement_start_offset)/2) as query
from sys.dm_os_schedulers as ss with (nolock) 
inner join sys.dm_os_tasks as st with (nolock) on ss.scheduler_id = st.scheduler_id
inner join sys.dm_exec_requests as sr with (nolock) on st.request_id = sr.request_id
inner join sys.dm_exec_sessions as ses with (nolock) on sr.session_id = ses.session_id 
cross apply sys.dm_exec_sql_text(sr.sql_handle) as sql_text
-- where ss.parent_node_id = 2 -- numa 노드에서 실행되는 쿼리
-- where ss.scheduler_id = 24  -- cpu 스케줄에 할당된 쿼리
 


'Monitoring' 카테고리의 다른 글

Admin::Tempdb 의 작업, 모니터링  (0) 2011.01.30
T_SQL::SP_WHO2 + DBCC  (0) 2010.06.03
DBCC FLUSHPROCINDB  (0) 2010.02.04
DeadLock 발생 원인 찾기  (0) 2009.07.20