打开的连接数和连接的睡眠状态的含义(Number of open connections and t

2019-07-30 02:31发布

我跑在我的数据库的查询:

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在我的结果连接?

谢谢

Answer 1:

的状态sleeping表示会话连接,但不主动运行任何东西(比如最简单的定义,虽然可能不是100%准确的,是没有什么对于session_idsys.dm_exec_requests )。

sp_who2 'active'过滤掉具有的状态的任何SPID sleeping或具有一个最后的命令AWAITING COMMANDLAZY WRITERCHECKPOINT SLEEP 。 不,我没有记住什么sp_who2做; 我简单看了一下源代码:

EXEC master..sp_helptext sp_who2;

需要注意的是sp_who2是无证和不支持的,并sysprocesses中被弃用,目前只存在于向后兼容的原因。 您将得到更好的服务,我认为,与像一个过程亚当Machanic的sp_whoisactive 。 或者至少是知道如何使用更现代的DMV像sys.dm_exec_sessionssys.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