I have a procedure that allows me to see what is currently running in my sql server.
This procedure does not use sys.sysprocess because it has been deprecated.
However, I am struggling to find needed information about sleeping processes that are causing blocking.
This is because the DMV sys.dm_exec_requests does not hold any request of sleeping processes.
I don't want to use sp_whoisactive or any monitoring tool. sp_whoisactive uses sys.sysprocesses.
I have my session 81:
BEGIN TRANSACTION T1
SELECT @@TRANCOUNT
update
[TableBackups].[dbo].[spstats]
set execution_count = 1000
where dbname = 'master'
select @@spid
and I have my session 51:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
SELECT TOP 1000 *
FROM [TableBackups].[dbo].[spstats]
WITH (HOLDLOCK)
These 2 sessions above are running at the same time and consequently, session 81 is blocking the session 51.
I have this select below, that get information about the session 81, however, I could not get teh dbid, and I am not sure about the Open_transactions and the whole waits information.
SELECT es.session_id AS session_id
,COALESCE(es.original_login_name, 'No Info') AS login_name
,COALESCE(es.host_name,'No Info') AS hostname
,COALESCE(es.last_request_end_time,es.last_request_start_time) AS last_batch
,es.status
,COALESCE(er.blocking_session_id,0) AS blocked_by
,COALESCE(er.wait_type,'MISCELLANEOUS') AS waittype
,COALESCE(er.wait_time,0) AS waittime
,COALESCE(er.last_wait_type,'MISCELLANEOUS') AS lastwaittype
,COALESCE(er.wait_resource,'') AS waitresource
,coalesce(db_name(er.database_id),'No Info') as dbid
,COALESCE(er.command,'AWAITING COMMAND') AS cmd
,sql_text=st.text
,transaction_isolation =
CASE es.transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'Read Uncommitted'
WHEN 2 THEN 'Read Committed'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END
,COALESCE(es.cpu_time,0)
+ COALESCE(er.cpu_time,0) AS cpu
,COALESCE(es.reads,0)
+ COALESCE(es.writes,0)
+ COALESCE(er.reads,0)
+ COALESCE(er.writes,0) AS physical_io
,COALESCE(er.open_transaction_count,-1) AS open_tran
,COALESCE(es.program_name,'') AS program_name
,es.login_time
FROM sys.dm_exec_sessions es
INNER JOIN sys.dm_exec_requests ec2 ON es.session_id = ec2.blocking_session_id
LEFT OUTER JOIN sys.dm_exec_connections ec ON es.session_id = ec.session_id
LEFT OUTER JOIN sys.dm_exec_requests er ON es.session_id = er.session_id
LEFT OUTER JOIN sys.server_principals sp ON es.security_id = sp.sid
CROSS APPLY sys.dm_exec_sql_text(ec.most_recent_sql_handle) AS st
where es.is_user_process = 1
and es.session_id <> @@spid
The question is, is there any DMV, other than sys.sysprocesses that I can use to get this info?