gpt4 book ai didi

sql - 打开的连接数和连接休眠状态的含义

转载 作者:行者123 更新时间:2023-12-03 14:39:41 25 4
gpt4 key购买 nike

我在我的数据库中运行了这个查询:

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表示 session 已连接但未主动运行任何内容(例如,最简单的定义,虽然可能不是 100% 准确,但 session_id 中的 sys.dm_exec_requests 没有任何内容)。
sp_who2 'active'过滤掉状态为 sleeping 的所有 spid或者最后一条命令是 AWAITING COMMAND , LAZY WRITERCHECKPOINT SLEEP .不,我没有记住什么sp_who2确实;我简单地看了一下源代码:

EXEC master..sp_helptext sp_who2;

请注意 sp_who2未记录且不受支持,并且 sysprocesses 已弃用,目前仅出于向后兼容性原因而存在。我认为,使用类似 Adam Machanic's 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 会反射(reflect)在 sys.sysprocesses.dbid 中在此查询运行时为该 session ?我将把它留给读者作为练习,以确定实际发生的情况。长话短说,这不是您想知道当前正在“触及”哪些数据库的 View /列。

关于sql - 打开的连接数和连接休眠状态的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11179880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com