USE [master]
GO
/****** Object: StoredProcedure [dbo].[sp_who_run_plus] Script Date: 2021-09-10 16:51:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[sp_who_run_plus]
AS
BEGIN
SELECT DB_NAME(er.[database_id]) [DatabaseName],
er.[command] AS [CommandType],
er.[percent_complete], er.start_time,
CONVERT(DECIMAL(5, 2), er.[percent_complete]) AS [Complete_Percent]
,CONVERT(DECIMAL(38, 2), er.[total_elapsed_time] / 60000.00) AS [ElapsedTime_m]
,CONVERT(DECIMAL(38, 2), er.[estimated_completion_time] / 60000.00) AS [EstimatedCompletionTime_m]
FROM sys.dm_exec_requests AS er
WHERE --DB_NAME(er.[database_id]) in ('xxxx') and
er.[command] IN ( 'RESTORE DATABASE' ,'BACKUP DATABASE')
ORDER BY er.start_time DESC
SELECT
[session_id],
[blocking_session_id] AS '正在阻塞其他会话的会话ID',
DB_NAME([database_id]) AS '数据库名称',
[request_id],
[cpu_time],
[start_time] AS '开始时间',
[status] AS '状态',
[command] AS '命令',
dest.[text] AS 'sql语句',
[reads] AS '物理读次数',
[writes] AS '写次数',
[logical_reads] AS '逻辑读次数',
[row_count] AS '返回结果行数',
[wait_type] AS '等待资源类型',
[wait_time] AS '等待时间',
[wait_resource] AS '等待的资源',
pl.query_plan AS '执行计划'
FROM sys.[dm_exec_requests] AS der CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle] ) AS dest CROSS APPLY sys.dm_exec_query_plan(der.[plan_handle]) AS pl
WHERE 1=1
ORDER BY [logical_reads] DESC
END
GO
这段代码是一个SQL Server存储过程的定义,名为 sp_who_run_plus
。这个存储过程包含了两个查询语句,用于获取SQL Server实例上正在运行的某些类型的请求的信息,以及这些请求的详细信息。
以下是代码的简要解释:
-
存储过程定义:
USE [master]
:指定了存储过程在master
数据库中创建。CREATE PROC [dbo].[sp_who_run_plus] AS
:定义了一个名为sp_who_run_plus
的存储过程。
-
第一个查询:
- 这个查询从
sys.dm_exec_requests
动态管理视图(DMV)中选择信息,包括数据库名称、命令类型、完成百分比、开始时间、经过时间(以分钟为单位)和预计完成时间(以分钟为单位)。 - 它只选择了命令类型为
'RESTORE DATABASE'
或'BACKUP DATABASE'
的请求。 - 结果按
start_time
降序排序。
- 这个查询从
-
第二个查询:
- 这个查询同样从
sys.dm_exec_requests
DMV 中获取信息,但这次包括了会话ID、阻塞信息、数据库名称、请求ID、CPU时间、开始时间、状态、命令类型、SQL语句文本、物理读次数、写次数、逻辑读次数、返回结果行数、等待资源类型、等待时间和等待资源。 - 它使用了
CROSS APPLY
来从sys.dm_exec_sql_text
获取SQL语句文本,以及从sys.dm_exec_query_plan
获取执行计划。 - 结果按
logical_reads
降序排序。
- 这个查询同样从
-
注释和设置:
SET ANSI_NULLS ON
和SET QUOTED_IDENTIFIER ON
是SQL Server的设置,用于确保NULL值的正确处理和识别带引号的标识符。
-
存储过程结束:
END
关键字标记存储过程的结束。
-
执行存储过程:
- 若要执行这个存储过程,可以在SQL Server Management Studio (SSMS) 或其他数据库工具中使用
EXEC [dbo].[sp_who_run_plus]
。
- 若要执行这个存储过程,可以在SQL Server Management Studio (SSMS) 或其他数据库工具中使用