是否有程序或SQL查询可以找到在SQL Server 2012上运行哪些SQL查询?我认为在早期版本的SQL Server中有一个工具,其中显示实际的查询内容或存储过程名称?
答案 0 :(得分:26)
根据您的权限,此查询可能有效:
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
参考:http://blog.sqlauthority.com/2009/01/07/sql-server-find-currently-running-query-t-sql
答案 1 :(得分:18)
我使用以下查询
SELECT SPID = er.session_id
,STATUS = ses.STATUS
,[Login] = ses.login_name
,Host = ses.host_name
,BlkBy = er.blocking_session_id
,DBName = DB_Name(er.database_id)
,CommandType = er.command
,ObjectName = OBJECT_NAME(st.objectid)
,CPUTime = er.cpu_time
,StartTime = er.start_time
,TimeElapsed = CAST(GETDATE() - er.start_time AS TIME)
,SQLStatement = st.text
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses
ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con
ON con.session_id = ses.session_id
WHERE st.text IS NOT NULL
答案 2 :(得分:6)
这是安装SQL事件探查器http://msdn.microsoft.com/en-us/library/bb500441.aspx所需的内容。但是,如果您希望在生产环境中进行此操作,我建议您仔细阅读此http://blog.sqlauthority.com/2009/08/03/sql-server-introduction-to-sql-server-2008-profiler-2/。 还有另一种更好的方法来查看查看此查询的查询,看看它是否有帮助 http://www.youtube.com/watch?v=vvziPI5OQyE
答案 3 :(得分:5)
这是来自SQL Server DMV的In Action书:
输出显示spid(进程标识符),ecid(这类似于同一spid中的一个线程,对于识别并行运行的查询很有用),运行SQL的用户,状态(SQL是否为运行或等待),等待状态(等待的原因),主机名,域名和开始时间(用于确定批处理运行的时间)。
好的部分是查询和父查询。这表明,例如,存储过程作为父项,而查询正在运行的存储过程中。这对我来说非常方便。我希望这有助于其他人。
USE master
GO
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT
er.session_Id AS [Spid]
, sp.ecid
, er.start_time
, DATEDIFF(SS,er.start_time,GETDATE()) as [Age Seconds]
, sp.nt_username
, er.status
, er.wait_type
, SUBSTRING (qt.text, (er.statement_start_offset/2) + 1,
((CASE WHEN er.statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
ELSE er.statement_end_offset
END - er.statement_start_offset)/2) + 1) AS [Individual Query]
, qt.text AS [Parent Query]
, sp.program_name
, sp.Hostname
, sp.nt_domain
FROM sys.dm_exec_requests er
INNER JOIN sys.sysprocesses sp ON er.session_id = sp.spid
CROSS APPLY sys.dm_exec_sql_text(er.sql_handle)as qt
WHERE session_Id > 50
AND session_Id NOT IN (@@SPID)
ORDER BY session_Id, ecid
答案 4 :(得分:4)
该工具称为SQL Server Profiler,它仍然是标准工具集的一部分。
答案 5 :(得分:1)
您在谈论SQL Profiler。