List the queries running on SQL Server

Sql Server

Sql Server Problem Overview


Is there a way to list the queries that are currently running on MS SQL Server (either through the Enterprise Manager or SQL) and/or who's connected?

I think I've got a very long running query is being execute on one of my database servers and I'd like to track it down and stop it (or the person who keeps starting it).

Sql Server Solutions


Solution 1 - Sql Server

This will show you the longest running SPIDs on a SQL 2000 or SQL 2005 server:

select
	P.spid
,	right(convert(varchar, 
            dateadd(ms, datediff(ms, P.last_batch, getdate()), '1900-01-01'), 
            121), 12) as 'batch_duration'
,	P.program_name
,	P.hostname
,	P.loginame
from master.dbo.sysprocesses P
where P.spid > 50
and      P.status not in ('background', 'sleeping')
and      P.cmd not in ('AWAITING COMMAND'
                    ,'MIRROR HANDLER'
                    ,'LAZY WRITER'
                    ,'CHECKPOINT SLEEP'
                    ,'RA MANAGER')
order by batch_duration desc

If you need to see the SQL running for a given spid from the results, use something like this:

declare
	@spid int
,	@stmt_start int
,	@stmt_end int
,	@sql_handle binary(20)

set @spid = XXX -- Fill this in

select	top 1
	@sql_handle = sql_handle
,	@stmt_start = case stmt_start when 0 then 0 else stmt_start / 2 end
,	@stmt_end = case stmt_end when -1 then -1 else stmt_end / 2 end
from	sys.sysprocesses
where	spid = @spid
order by ecid

SELECT
	SUBSTRING(	text,
			COALESCE(NULLIF(@stmt_start, 0), 1),
			CASE @stmt_end
				WHEN -1
					THEN DATALENGTH(text)
				ELSE
					(@stmt_end - @stmt_start)
				END
		)
FROM ::fn_get_sql(@sql_handle)

Solution 2 - Sql Server

If you're running SQL Server 2005 or 2008, you could use the DMV's to find this...

SELECT	*
FROM    sys.dm_exec_requests  
		CROSS APPLY sys.dm_exec_sql_text(sql_handle)  

Solution 3 - Sql Server

You can run the sp_who command to get a list of all the current users, sessions and processes. You can then run the KILL command on any spid that is blocking others.

Solution 4 - Sql Server

I would suggest querying the sys views. something similar to

SELECT * 
FROM 
   sys.dm_exec_sessions s
   LEFT  JOIN sys.dm_exec_connections c
        ON  s.session_id = c.session_id
   LEFT JOIN sys.dm_db_task_space_usage tsu
        ON  tsu.session_id = s.session_id
   LEFT JOIN sys.dm_os_tasks t
        ON  t.session_id = tsu.session_id
        AND t.request_id = tsu.request_id
   LEFT JOIN sys.dm_exec_requests r
        ON  r.session_id = tsu.session_id
        AND r.request_id = tsu.request_id
   OUTER APPLY sys.dm_exec_sql_text(r.sql_handle) TSQL

This way you can get a TotalPagesAllocated which can help you figure out the spid that is taking all the server resources. There has lots of times when I can't even bring up activity monitor and use these sys views to see what's going on.

I would recommend you reading the following article. I got this reference from here.

Solution 5 - Sql Server

There are various management views built into the product. On SQL 2000 you'd use sysprocesses. On SQL 2K5 there are more views like sys.dm_exec_connections, sys.dm_exec_sessions and sys.dm_exec_requests.

There are also procedures like sp_who that leverage these views. In 2K5 Management Studio you also get Activity Monitor.

And last but not least there are community contributed scripts like the Who Is Active by Adam Machanic.

Solution 6 - Sql Server

As a note, the SQL Server Activity Monitor for SQL Server 2008 can be found by right clicking your current server and going to "Activity Monitor" in the context menu. I found this was easiest way to kill processes if you are using the SQL Server Management Studio.

Solution 7 - Sql Server

Actually, running EXEC sp_who2 in Query Analyzer / Management Studio gives more info than sp_who.

Beyond that you could set up SQL Profiler to watch all of the in and out traffic to the server. Profiler also let you narrow down exactly what you are watching for.

For SQL Server 2008:

START - All Programs - Microsoft SQL Server 2008 - Performance Tools - SQL Server Profiler

Keep in mind that the profiler is truly a logging and watching app. It will continue to log and watch as long as it is running. It could fill up text files or databases or hard drives, so be careful what you have it watch and for how long.

Solution 8 - Sql Server

SELECT
    p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, r.command,
    p.program_name, text 
FROM
    sys.dm_exec_requests AS r,
    master.dbo.sysprocesses AS p 
    CROSS APPLY sys.dm_exec_sql_text(p.sql_handle)
WHERE
    p.status NOT IN ('sleeping', 'background') 
AND r.session_id = p.spid

Solution 9 - Sql Server

In the Object Explorer, drill-down to: Server -> Management -> Activity Monitor. This will allow you to see all connections on to the current server.

Solution 10 - Sql Server

Try with this:

It will provide you all user queries. Till spid 50,it's all are sql server internal process sessions. But, if you want you can remove where clause:

select
r.session_id,
r.start_time,
s.login_name,
c.client_net_address,
s.host_name,
s.program_name,
st.text
from sys.dm_exec_requests r
inner join sys.dm_exec_sessions s
on r.session_id = s.session_id
left join sys.dm_exec_connections c
on r.session_id = c.session_id
outer apply sys.dm_exec_sql_text(r.sql_handle) st where r.session_id  > 50

Solution 11 - Sql Server

here is a query that will show any queries that are blocking. I am not entirely sure if it will just show slow queries:

SELECT p.spid
,convert(char(12), d.name) db_name
, program_name
, convert(char(12), l.name) login_name
, convert(char(12), hostname) hostname
, cmd
, p.status
, p.blocked
, login_time
, last_batch
, p.spid
FROM      master..sysprocesses p
JOIN      master..sysdatabases d ON p.dbid =  d.dbid
JOIN      master..syslogins l ON p.sid = l.sid
WHERE     p.blocked = 0
AND       EXISTS (  SELECT 1
          FROM      master..sysprocesses p2
          WHERE     p2.blocked = p.spid )

Solution 12 - Sql Server

The right script would be like this:

select 
p.spid, p.status,p.hostname,p.loginame,p.cpu,r.start_time, t.text
    from sys.dm_exec_requests as r, sys.sysprocesses p 
    cross apply sys.dm_exec_sql_text(p.sql_handle) t
    where p.status not in ('sleeping', 'background')
	and r.session_id=p.spid

Solution 13 - Sql Server

You can use below query to find running last request:

SELECT
	der.session_id
	,est.TEXT AS QueryText
	,der.status
	,der.blocking_session_id
	,der.cpu_time
	,der.total_elapsed_time
FROM sys.dm_exec_requests AS der
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS est

Using below script you can also find number of connection per database:

SELECT 
    DB_NAME(DBID) AS DataBaseName
    ,COUNT(DBID) AS NumberOfConnections
    ,LogiName 
FROM sys.sysprocesses
WHERE DBID > 0
GROUP BY DBID, LogiName

For more details please visit: http://www.dbrnd.com/2015/06/script-to-find-running-process-session-logged-user-in-sql-server/

Solution 14 - Sql Server

in 2005 you can right click on a database, go to reports and there's a whole list of reports on transitions and locks etc...

Solution 15 - Sql Server

SELECT 
    p.spid, p.status, p.hostname, p.loginame, p.cpu, r.start_time, t.text
FROM
    sys.dm_exec_requests as r,
    master.dbo.sysprocesses as p
    CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) t
WHERE
    p.status NOT IN ('sleeping', 'background')
AND r.session_id = p.spid

And

KILL @spid

Solution 16 - Sql Server

Use Sql Server Profiler (tools menu) to monitor executing queries and use activity monitor in Management studio to see how is connected and if their connection is blocking other connections.

Solution 17 - Sql Server

You should try very usefull procedure sp_whoIsActive which can be found here: http://whoisactive.com and it is free.

Solution 18 - Sql Server

Trying to put things together (hope to be helpful):

SELECT
    p.spid,
	RIGHT(CONVERT(varchar, DATEADD(ms, DATEDIFF(ms, p.last_batch, GETDATE()), '1900-01-01'), 121), 12) AS [batch_duration],
	p.[program_name],
	p.hostname,
	MAX(p.loginame) AS loginame,
	(SELECT SUBSTRING(text, COALESCE(NULLIF(spid.stmt_start, 0), 1) + 1, CASE spid.stmt_end WHEN -1 THEN DATALENGTH(text) ELSE (spid.stmt_end - spid.stmt_start) END) FROM ::fn_get_sql(spid.[sql_handle])) AS [sql]
FROM
	master.dbo.sysprocesses p
	LEFT JOIN (
		SELECT
			ROW_NUMBER() OVER(PARTITION BY spid ORDER BY ecid) AS i,
			spid,
			[sql_handle],
			CASE stmt_start WHEN 0 THEN 0 ELSE stmt_start / 2 END AS stmt_start,
			CASE stmt_end WHEN -1 THEN -1 ELSE stmt_end / 2 END AS stmt_end
		FROM sys.sysprocesses
	) spid ON p.spid = spid.spid AND spid.i = 1
WHERE
	p.spid > 50
	AND p.status NOT IN ('background', 'sleeping')
	AND p.cmd NOT IN ('AWAITING COMMAND', 'MIRROR HANDLER', 'LAZY WRITER', 'CHECKPOINT SLEEP', 'RA MANAGER')
GROUP BY
	p.spid,
	p.last_batch,
	p.[program_name],
	p.hostname,
	spid.stmt_start,
	spid.stmt_end,
	spid.[sql_handle]
ORDER BY
	batch_duration DESC,
	p.spid
;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBIBDView Question on Stackoverflow
Solution 1 - Sql ServerMike FormanView Answer on Stackoverflow
Solution 2 - Sql ServerScott IveyView Answer on Stackoverflow
Solution 3 - Sql ServerichibanView Answer on Stackoverflow
Solution 4 - Sql ServerdhiView Answer on Stackoverflow
Solution 5 - Sql ServerRemus RusanuView Answer on Stackoverflow
Solution 6 - Sql ServerprensterView Answer on Stackoverflow
Solution 7 - Sql ServertlatourelleView Answer on Stackoverflow
Solution 8 - Sql ServerHoward RothenburgView Answer on Stackoverflow
Solution 9 - Sql ServerTylerView Answer on Stackoverflow
Solution 10 - Sql ServerShiwanginiView Answer on Stackoverflow
Solution 11 - Sql ServerSteve StedmanView Answer on Stackoverflow
Solution 12 - Sql ServerGabriel AizcorbeView Answer on Stackoverflow
Solution 13 - Sql ServerAnveshView Answer on Stackoverflow
Solution 14 - Sql ServerDForck42View Answer on Stackoverflow
Solution 15 - Sql ServerbuttowskiView Answer on Stackoverflow
Solution 16 - Sql ServerBeatles1692View Answer on Stackoverflow
Solution 17 - Sql ServerSašaView Answer on Stackoverflow
Solution 18 - Sql Serverd.angellottiView Answer on Stackoverflow