如何列出 SQL Server 中的所有连接?
Posted
技术标签:
【中文标题】如何列出 SQL Server 中的所有连接?【英文标题】:How to list all connections in SQL Server? 【发布时间】:2020-10-25 10:49:12 【问题描述】:我正在使用这个版本的 SQL Server
Microsoft SQL Server 2019 (RTM-GDR) (KB4517790) - 15.0.2070.41 (X64) Oct 28 2019 19:56:59 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19041: ) (Hypervisor)
我运行查询
select @@CONNECTIONS;
结果
1629
我想列出所有连接(在本例中为 1629),看看幕后是什么,如何做到这一点?
【问题讨论】:
这能回答你的问题吗? How do I see active SQL Server connections? 我尝试了这个解决方案***.com/a/9392845/3728901,但它返回 2 行,这不是我所期望的。我还在其他答案中尝试了其他解决方案。我也知道如何使用 Google 搜索。 【参考方案1】:The @@CONNECTIONS
documentation states:
返回尝试连接的数量 - 成功和 不成功 - 因为 SQL Server 上次启动。
虽然 SQL Server DMV 会显示当前连接,但这些不会包括过去连接的详细信息或失败的连接尝试。为了获取成功和失败登录的历史详细信息,您可以使用SQL Server Audit 或使用文件目标创建扩展事件跟踪。下面是跟踪方法的示例 DDL:
CREATE EVENT SESSION [logins] ON SERVER
ADD EVENT sqlserver.process_login_finish
ADD TARGET package0.event_file(SET filename=N'logins')
WITH (STARTUP_STATE=ON);
【讨论】:
【参考方案2】:您可以尝试以下方法:
SELECT DB_NAME(dbid) AS DBName,
COUNT(dbid) AS NumberOfConnections,
loginame
FROM sys.sysprocesses
GROUP BY dbid, loginame
ORDER BY DB_NAME(dbid)
【讨论】:
它无法列出我提到的数千个连接。我在我的电脑上试过了。让我们看看user-images.githubusercontent.com/1328316/… @DoNhuVy,根据the documentation,@@CONNECTIONS
返回自上次启动 SQL Server 以来尝试的连接数(成功和不成功)。历史细节无法通过 DMV 获得。如果需要该信息,则需要创建跟踪。
@Foster90, sys.sysprocesses
是 SQL 2005 版本不推荐使用的视图,在现代 SQL Server 版本中应避免使用。
@DanGuzman 什么是DMV?让我们发布你的答案,我会接受的。
@DoNhuVy,DMV 是 Dynamic Management Views。【参考方案3】:
您可以使用以下查询找出活动连接 -
SELECT
conn.session_id,
host_name,
program_name,
nt_domain,
login_name,
connect_time,
last_request_end_time
FROM sys.dm_exec_sessions AS sess
INNER JOIN sys.dm_exec_connections AS conn ON sess.session_id = conn.session_id;
【讨论】:
它无法列出所提到的所有足够的数千个连接。 user-images.githubusercontent.com/1328316/… 此函数返回自上次启动 SQL Server 以来尝试的连接数(成功和不成功)。 SQL Server 没有存储有关这些连接的所有信息......并且此查询返回活动连接的编号:)以上是关于如何列出 SQL Server 中的所有连接?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL Server 中列出所有带有“WITH NOCHECK”的外键