我跑在我的数据库的查询:
SELECT
DB_NAME(dbid) as DBName,
COUNT(dbid) as NumberOfConnections,
loginame as LoginName
FROM
sys.sysprocesses
WHERE dbid > 0
GROUP BY dbid, loginame
---------------------------------------------------
SELECT COUNT(dbid) as TotalConnections
FROM sys.sysprocesses
WHERE
dbid > 0
---------------------------------------------------
exec sp_who2 'Active'
我想知道我的数据库连接的总数。 第一查询和第二查询的量之和是相等的,但所述第三查询返回不同的行数。
我想知道第三查询返回? 我看到一些在第三个查询的结果状态为正在sleeping
。 这是什么意思? 是连接空闲,或者是在游泳池准备好了吗? 这是什么意思,如果我有很多sleeping
在我的结果连接?
谢谢
的状态sleeping
表示会话连接,但不主动运行任何东西(比如最简单的定义,虽然可能不是100%准确的,是没有什么对于session_id
在sys.dm_exec_requests
)。
sp_who2 'active'
过滤掉具有的状态的任何SPID sleeping
或具有一个最后的命令AWAITING COMMAND
, LAZY WRITER
或CHECKPOINT SLEEP
。 不,我没有记住什么sp_who2
做; 我简单看了一下源代码:
EXEC master..sp_helptext sp_who2;
需要注意的是sp_who2
是无证和不支持的,并sysprocesses中被弃用,目前只存在于向后兼容的原因。 您将得到更好的服务,我认为,与像一个过程亚当Machanic的sp_whoisactive 。 或者至少是知道如何使用更现代的DMV像sys.dm_exec_sessions
和sys.dm_exec_requests
。
编辑
我要补充不幸的免责声明更现代的DMV仍然不正确显示所涉及的数据库(一个或多个)。 但它到底意味着什么? 如果你有这样的查询:
USE database_A;
GO
SELECT [column] FROM database_B.dbo.[table]
UNION ALL
SELECT [column] FROM database_C.dbo.[table];
做什么数据库ID您预计会得到体现在sys.sysprocesses.dbid
而该查询运行该会话? 我会离开它作为一个练习的读者,以确定到底发生了什么。 长话短说,这不是你想要依靠知道哪些数据库,目前正在视图/列“感动”。
文章来源: Number of open connections and the meaning of sleeping status of a connection