1

我目前面临监控 mssql 服务器的任务,我想大致了解 tempDB 中的待处理/正在运行的事务。

我使用以下查询来获取事务表及其 elapsed_time_seconds

   SELECT
   a.session_id
 , a.transaction_id
 , a.transaction_sequence_num
 , a.elapsed_time_seconds
 , b.program_name
 , b.open_tran
 , b.STATUS
FROM sys.dm_tran_active_snapshot_database_transactions a
JOIN sys.sysprocesses b ON a.session_id = b.spid
ORDER BY elapsed_time_seconds DESC

问题:如果表为空,此查询不会返回任何内容。甚至没有NULL。另外我不会说 SQL。

我试图将 COALESCE 和 ISNULL 放在不同行的查询中,但这没有帮助。

如果没有返回任何其他内容,我可以以某种方式扩展查询,以便它在表行中返回 0 0 0 0 0 吗?

谢谢和最好的问候曼努埃尔

4

1 回答 1

0

目前还不清楚你为什么想要这个,但你可以从一个虚拟VALUES构造函数开始,然后左连接其他所有内容。

请注意,sysprocesses已弃用

另请注意,dm_tran_active_snapshot_database_transactions仅显示快照隔离级别中的事务。你可能想要dm_tran_active_transactions

SELECT
   ISNULL(t.session_id, 0)
 , ISNULL(t.transaction_id, 0)
 , ISNULL(t.transaction_sequence_num, 0)
 , ISNULL(t.elapsed_time_seconds, 0)
 , s.program_name
 , ISNULL(s.open_transaction_count, 0)
 , s.STATUS
FROM (VALUES(0)) v(dummy)
LEFT JOIN
  sys.dm_tran_active_snapshot_database_transactions t
    JOIN sys.dm_exec_sessions s ON s.session_id = t.spid
  ON 1 = 1
ORDER BY elapsed_time_seconds DESC
于 2021-08-17T13:42:02.730 回答