SQL 当前在SQL Server中运行的查询

SQL 当前在SQL Server中运行的查询

在本文中,我们将介绍如何在SQL Server中查看当前正在运行的查询,并提供一些常用的示例。

阅读更多:SQL 教程

查询当前活动的查询

要查询SQL Server中当前正在运行的查询,可以使用系统视图sys.dm_exec_requests。这个视图提供了有关每个当前活动的查询的详细信息,包括查询的文本、运行时间、等待情况等。

以下是一个示例查询,显示当前正在运行的查询以及相关信息:

SELECT r.session_id, r.status, t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.status = 'running'
SQL

上述查询将返回正在运行的查询的会话ID、状态和查询文本。

查询长时间运行的查询

有时候,我们可能想要查找哪些查询运行时间较长,以便进行优化或调整。可以利用系统视图sys.dm_exec_requests和函数sys.dm_exec_query_stats来查询这些信息。

以下是一个示例查询,查找运行时间超过5分钟的查询:

SELECT r.session_id, t.text, qs.creation_time, qs.execution_count, qs.total_worker_time
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
CROSS APPLY sys.dm_exec_query_stats qs
WHERE r.status = 'running'
AND qs.plan_handle = r.plan_handle
AND DATEDIFF(minute, qs.creation_time, GETDATE()) >= 5
SQL

上述查询会返回运行时间超过5分钟的查询的会话ID、查询文本、查询的创建时间以及查询的总工作时间。

查询等待的查询

有些查询可能会出现等待的情况,可能是由于资源争用或其他问题导致的。要查找当前正在等待的查询,可以使用系统视图sys.dm_os_waiting_tasks。

以下是一个示例查询,查找当前等待的查询及其相关信息:

SELECT r.session_id, r.wait_type, t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.wait_type IS NOT NULL
SQL

上述查询将返回当前等待的查询的会话ID、等待类型以及查询的文本。

查询阻塞的查询

在多用户环境下,可能会出现查询被阻塞的情况。要查询阻塞的查询,可以使用系统视图sys.dm_exec_requests和函数sys.dm_tran_locks。

以下是一个示例查询,查找当前阻塞的查询及其相关信息:

SELECT r.session_id, r.blocking_session_id, t.text
FROM sys.dm_exec_requests r
CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) t
WHERE r.blocking_session_id <> 0
SQL

上述查询将返回当前阻塞的查询的会话ID、阻塞会话ID以及查询的文本。

总结

通过使用sys.dm_exec_requests等系统视图和函数,我们可以很方便地查询和查找当前在SQL Server中运行的查询。了解当前正在运行的查询、长时间运行的查询、等待的查询以及阻塞的查询有助于我们优化和调整数据库性能,提高系统的响应能力和效率。

希望本文提供的查询示例和技巧对您在SQL Server中管理和优化查询有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册