如何查询SQL Server中当前活跃的连接和识别死锁的详细情况?

2026-04-11 05:531阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计843个文字,预计阅读时间需要4分钟。

如何查询SQL Server中当前活跃的连接和识别死锁的详细情况?

在SQL Server中,有多种方法可以查找活跃的SQL连接。以下是一些使用T-SQL查询的简单快捷方法:

- `SP_WHO` 和 `SP_WHOIS` 是SQL Server内置的系统存储过程,用于查看当前活动的连接信息。其中,`SP_WHO` 将显示所有活动连接的详细信息,而 `SP_WHOIS` 可以指定一个特定的连接ID来获取更详细的信息。

例如:sqlEXEC SP_WHO;或sqlEXEC SP_WHOIS @spid=123;

- 另一种方法是使用动态管理视图(DMV)`sys.dm_exec_requests` 和 `sys.dm_exec_sessions`,它们提供了更丰富的连接信息。

例如:sqlSELECT session_id, program_name, host_name, login_name, statusFROM sys.dm_exec_sessionsWHERE session_id > 50;

这些方法可以帮助您快速定位到活跃的SQL连接,以便进行相应的管理和优化。

在SQL Server中有几种方法可以找到活动的 SQL 连接。让我们看看一些使用 T-SQL 查询的简单快捷的方法。

SP_WHO

SP_WHO 是 SQL Server 内置的系统存储过程, 其他方法相比,SP_WHO 将具有最少的列,但是一种快速列出活动连接的方法。

以下是在 SQL Server Management Studio 中的执行示例:

EXEC SP_WHO

具体的字段解释请参阅官方文档 SP_WHO
其中比较重要的列是:

  • spid: 会话ID
  • loginname: 登录账号
  • blk: 阻塞进程的会话ID(如果存在)。否则,此列为零, 可以使用该列排查死锁
SYS.SYSPROCESSES

另一种查找活动 SQL 连接的绝妙方法是使用系统兼容性视图 SYS.SYSPROCESSES
此视图有很多列,其中包含很多信息,这些信息有助于您找出活动的 sql 连接,尤其是当您想要查找被阻塞的进程时。但是,这是向后兼容的视图,不建议使用,因为未来的版本可能会删除它

如何查询SQL Server中当前活跃的连接和识别死锁的详细情况?

以下是在 SQL Server Management Studio 中的执行示例:

SELECT * FROM SYS.SYSPROCESSES

具体的字段解释请参阅官方文档 SYS.SYSPROCESSES

SYS.DM_EXEC_SESSIONS (建议使用)

SYS.DM_EXEC_SESSIONS 是替代旧系统表 sysprocesses 的动态管理视图之一。SYS.DM_EXEC_SESSIONS 的优点是它的列 is_user_process 。使用此列,您可以轻松过滤掉系统进程。

以下是在 SQL Server Management Studio 中的执行示例:

SELECT * FROM SYS.DM_EXEC_SESSIONS where is_user_process = 1

具体的字段解释请参阅官方文档 SYS.DM_EXEC_SESSIONS

用于查找 SQL Server 中的死锁的 T-SQL 查询

下面是我用来快速查找死锁的查询。此语句基于SYS.DM_EXEC_REQUESTS 动态管理视图。在此语句中,blocking_session_id 列为您提供了阻塞连接的 session_id,而 wait_type 列为您提供了导致 deadlock 的 等待类型。获得blocking_session_id 后,您可以使用 SYS.DM_EXEC_SESSIONS 来获取有关会话或连接的更多详细信息。

SELECT session_id, start_time, [status], command, blocking_session_id, wait_type, wait_time, open_transaction_count, transaction_id, total_elapsed_time, Definition = CAST(text AS VARCHAR(MAX)) FROM SYS.DM_EXEC_REQUESTS CROSS APPLY sys.dm_exec_sql_text(sql_handle) WHERE blocking_session_id != 0

上图我们得到了正在发生阻塞的会话信息和所执行的SQL语句(Definition)

本文共计843个文字,预计阅读时间需要4分钟。

如何查询SQL Server中当前活跃的连接和识别死锁的详细情况?

在SQL Server中,有多种方法可以查找活跃的SQL连接。以下是一些使用T-SQL查询的简单快捷方法:

- `SP_WHO` 和 `SP_WHOIS` 是SQL Server内置的系统存储过程,用于查看当前活动的连接信息。其中,`SP_WHO` 将显示所有活动连接的详细信息,而 `SP_WHOIS` 可以指定一个特定的连接ID来获取更详细的信息。

例如:sqlEXEC SP_WHO;或sqlEXEC SP_WHOIS @spid=123;

- 另一种方法是使用动态管理视图(DMV)`sys.dm_exec_requests` 和 `sys.dm_exec_sessions`,它们提供了更丰富的连接信息。

例如:sqlSELECT session_id, program_name, host_name, login_name, statusFROM sys.dm_exec_sessionsWHERE session_id > 50;

这些方法可以帮助您快速定位到活跃的SQL连接,以便进行相应的管理和优化。

在SQL Server中有几种方法可以找到活动的 SQL 连接。让我们看看一些使用 T-SQL 查询的简单快捷的方法。

SP_WHO

SP_WHO 是 SQL Server 内置的系统存储过程, 其他方法相比,SP_WHO 将具有最少的列,但是一种快速列出活动连接的方法。

以下是在 SQL Server Management Studio 中的执行示例:

EXEC SP_WHO

具体的字段解释请参阅官方文档 SP_WHO
其中比较重要的列是:

  • spid: 会话ID
  • loginname: 登录账号
  • blk: 阻塞进程的会话ID(如果存在)。否则,此列为零, 可以使用该列排查死锁
SYS.SYSPROCESSES

另一种查找活动 SQL 连接的绝妙方法是使用系统兼容性视图 SYS.SYSPROCESSES
此视图有很多列,其中包含很多信息,这些信息有助于您找出活动的 sql 连接,尤其是当您想要查找被阻塞的进程时。但是,这是向后兼容的视图,不建议使用,因为未来的版本可能会删除它

如何查询SQL Server中当前活跃的连接和识别死锁的详细情况?

以下是在 SQL Server Management Studio 中的执行示例:

SELECT * FROM SYS.SYSPROCESSES

具体的字段解释请参阅官方文档 SYS.SYSPROCESSES

SYS.DM_EXEC_SESSIONS (建议使用)

SYS.DM_EXEC_SESSIONS 是替代旧系统表 sysprocesses 的动态管理视图之一。SYS.DM_EXEC_SESSIONS 的优点是它的列 is_user_process 。使用此列,您可以轻松过滤掉系统进程。

以下是在 SQL Server Management Studio 中的执行示例:

SELECT * FROM SYS.DM_EXEC_SESSIONS where is_user_process = 1

具体的字段解释请参阅官方文档 SYS.DM_EXEC_SESSIONS

用于查找 SQL Server 中的死锁的 T-SQL 查询

下面是我用来快速查找死锁的查询。此语句基于SYS.DM_EXEC_REQUESTS 动态管理视图。在此语句中,blocking_session_id 列为您提供了阻塞连接的 session_id,而 wait_type 列为您提供了导致 deadlock 的 等待类型。获得blocking_session_id 后,您可以使用 SYS.DM_EXEC_SESSIONS 来获取有关会话或连接的更多详细信息。

SELECT session_id, start_time, [status], command, blocking_session_id, wait_type, wait_time, open_transaction_count, transaction_id, total_elapsed_time, Definition = CAST(text AS VARCHAR(MAX)) FROM SYS.DM_EXEC_REQUESTS CROSS APPLY sys.dm_exec_sql_text(sql_handle) WHERE blocking_session_id != 0

上图我们得到了正在发生阻塞的会话信息和所执行的SQL语句(Definition)