我在我的数据库中运行了这个查询:
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
我的结果中有联系吗?
thanks
状态为sleeping
意味着会话已连接,但没有主动运行任何东西(例如,最简单的定义,虽然可能不是 100% 准确,但没有任何东西可以实现)session_id
in sys.dm_exec_requests
).
sp_who2 'active'
过滤掉任何状态为sleeping
或者有最后一个命令AWAITING COMMAND
, LAZY WRITER
or CHECKPOINT SLEEP
。不,我没记住什么sp_who2
做;我简单看了下源码:
EXEC master..sp_helptext sp_who2;
注意sp_who2
未记录且不受支持,并且 sysprocesses 已弃用,目前仅出于向后兼容性原因而存在。我认为,通过类似的程序,您会得到更好的服务Adam Machanic 的 sp_whoisactive http://whoisactive.com。或者至少知道如何使用更现代的DMV,例如sys.dm_exec_sessions http://msdn.microsoft.com/en-us/library/ms176013(sql.100).aspx and sys.dm_exec_requests http://msdn.microsoft.com/en-us/library/ms177648(v=sql.100).
EDIT
我应该添加一个不幸的免责声明,即更现代的 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
当此查询运行时该会话?我将把它作为练习留给读者来确定实际发生的情况。长话短说,这不是您想要依赖的视图/列来了解哪些数据库当前正在被“触及”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)