2012-06-21 31 views

Trả lời

9

Tốt hơn nên sử dụng Profiler cho tác vụ này.

Nhưng nếu bạn muốn có một truy vấn trong SQL Server 2005+ bạn có thể sử dụng hệ thống quan điểm sys.dm_exec_query_stats, mà returns aggregate performance statistics for cached query plans nhưng chỉ dành cho các kế hoạch tiền mặtsys.dm_exec_sql_text. Thật không may là họ không có thông tin về ID phiên vì vậy bạn chỉ có thể nhận được các truy vấn được rút tiền mặt của một cá thể máy chủ.

set transaction isolation level read uncommitted 
select top 1000 
    creation_time, 
    last_execution_time, 
    case 
     when sql_handle IS NULL then ' ' 
     else(substring(st.text,(qs.statement_start_offset+2)/2,(
      case 
       when qs.statement_end_offset =-1 then len(convert(nvarchar(MAX),st.text))*2  
       else qs.statement_end_offset  
      end - qs.statement_start_offset)/2 )) 
    end as query_text, 
    db_name(st.dbid)as db_name, 
    object_schema_name(st.objectid, st.dbid)+'.'+object_name(st.objectid, st.dbid) as object_name 
FROM sys.dm_exec_query_stats qs 
    cross apply sys.dm_exec_sql_text(sql_handle) st 
ORDER BY db_name, object_name 
+0

tuyệt vời :). Đó là những gì tôi đang tìm kiếm. Cảm ơn rất nhiều –

+0

@PriteshGupta Bạn được chào đón. –

4

Trong Oracle:

How do I show running processes in Oracle DB?

Trong SQL server 2005+ bạn có thể tìm hiểu những người trước đây sử dụng SPID tôi nghĩ. Nó sẽ giúp bạn xử lý với XXX SPID. Có lẽ bạn có thể có được quá trình chạy 'SPID và tạo ra một vòng lặp cho đến khi chạy SPID của một người. Vì vậy, bạn có thể nhận được tất cả các quy trình cho đến khi chạy các quy trình.

DECLARE @sqltxt VARBINARY(128) 
SELECT @sqltxt = sql_handle 
FROM sys.sysprocesses 
WHERE spid = XXX 
SELECT TEXT 
FROM sys.dm_exec_sql_text(@sqltext) 
GO 

Bạn cũng có thể chạy các câu lệnh sql bằng cách này;

SELECT sqltext.TEXT, 
req.session_id, 
req.status, 
req.command, 
req.cpu_time, 
req.total_elapsed_time 
FROM sys.dm_exec_requests req 
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS sqltext 

nó sẽ hữu ích cho bạn. Tôi đoán

+0

Không phải sys.dm_exec_requests chỉ chứa thông tin về các truy vấn hiện đang thực thi? –

+0

Igor, vâng. Điều này sẽ nhận được những người chạy. Chỉnh sửa lại:/ – alicanbatur

+0

http://blog.sqlauthority.com/2009/07/19/sql-server-get-last-running-query-based-on-spid/ có 3 cách để hiển thị truy vấn cuối cùng được thực thi mỗi phiên . Tôi thích 'DBCC INPUTBUFFER (@DesiredSPID)'. – milivojeviCH

Các vấn đề liên quan