mssql2000이하라면 sp_lock, sp_who, sp_who2 등을 통한 sid를 읽어 dbcc inputbuffer를 이용하시면 됩니다.
그렇지만 지금 보시려는 상황에 대한 사항까지는 충족시켜주지는 못할 듯합니다.
2005 이상이라면 Dynamic View, Dynamic Function을 이용하는 방법도 있습니다.
아래는 그 쿼리입니다. 참고하십시오.
--IO
SELECT TOP 10
[Average
IO] = (total_logical_reads
+ total_logical_writes) / qs.execution_count
,[Total IO] = (total_logical_reads
+ total_logical_writes)
,[Execution
count] = qs.execution_count
,[Individual Query]
= SUBSTRING (qt.text,qs.statement_start_offset/2,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)
,[Parent Query]
= qt.text
,[DatabaseName]
= DB_NAME(qt.dbid)
,[Query PLAN] = ql.query_plan
FROM sys.dm_exec_query_stats
qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS ql
ORDER BY [Average IO] DESC;
--cpu
SELECT TOP 10
[Average CPU
used] = total_worker_time
/ qs.execution_count
,[Total CPU
used] = total_worker_time
,[Execution
count] = qs.execution_count
,[Individual
Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,
(CASE WHEN qs.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) ,[Parent Query] =
qt.text
,[DatabaseName] = DB_NAME(qt.dbid)
,[Query PLAN] =
ql.query_plan
FROM sys.dm_exec_query_stats
qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS ql
ORDER BY [Average CPU used] DESC;
'연구개발 > DBA' 카테고리의 다른 글
인덱스 조각화 확인 (0) | 2010.06.30 |
---|---|
ms-sql 백업과 복원 (0) | 2010.06.28 |
프로시저 재 컴파일 (0) | 2010.06.28 |
고아 연결 찾아내고 KILL 시키기 (0) | 2010.06.24 |
정규화 (0) | 2010.06.23 |