Ari*_*ian 12 sql sql-server sql-server-2008
我在我的数据库中运行了这个查询:
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'
Run Code Online (Sandbox Code Playgroud)
我想知道我的数据库的连接总数.第一个查询和第二个查询的数量之和相等,但第三个查询返回不同的行数.
我想知道第三个查询返回什么?我在第三个查询的结果中看到了一些状态sleeping.这是什么意思?连接是空闲的,还是在池中准备好了?如果sleeping我的结果中有很多联系,这意味着什么?
谢谢
Aar*_*and 13
的状态sleeping来会话连接,但不主动运行任何东西(比如最简单的定义,虽然可能不是100%准确的,是没有什么针对session_id的sys.dm_exec_requests).
sp_who2 'active'过滤掉状态为sleeping或具有最后一个命令的任何spid AWAITING COMMAND,LAZY WRITER或CHECKPOINT SLEEP.不,我没有记住是sp_who2做什么的; 我只是看了一下源代码:
EXEC master..sp_helptext sp_who2;
Run Code Online (Sandbox Code Playgroud)
请注意,该sp_who2文档未记录且不受支持,并且不推荐使用sysprocesses,并且仅出于向后兼容性原因而提供sysprocesses.我认为,通过像Adam 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];
Run Code Online (Sandbox Code Playgroud)
在您sys.sysprocesses.dbid运行此查询时,您期望在该会话中反映出哪个数据库ID ?我会把它作为练习留给读者来确定实际发生的事情.简而言之,这不是您想要依赖的视图/列,以了解当前正在"触及"哪些数据库.
| 归档时间: |
|
| 查看次数: |
21541 次 |
| 最近记录: |