SQL Server 查看当前执行计划

在SQL Server中,执行计划是指SQL Server生成的用于执行查询的详细计划。通过查看执行计划,可以了解SQL Server是如何执行查询的,有助于优化查询性能。在实际应用中,我们经常需要查看当前正在执行的查询的执行计划,以便进行调优或排查问题。

如何查看当前执行计划

要查看当前正在执行的查询的执行计划,我们可以使用动态管理视图sys.dm_exec_query_plan和sys.dm_exec_requests。以下是查看当前执行计划的步骤:

  1. 首先,找到正在执行的查询的session_id。我们可以使用以下查询来查找当前正在执行的查询的session_id:
SELECT session_id, text
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE session_id > 50;
  1. 找到session_id后,我们可以使用以下查询来获取该查询的执行计划:
DECLARE @PlanHandle varbinary(64);

SELECT @PlanHandle = cp.plan_handle
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS cp
WHERE r.session_id = <session_id>;

SELECT * 
FROM sys.dm_exec_query_plan(@PlanHandle);

示例

假设我们要查看session_id为51的查询的执行计划,我们可以按照以下步骤进行:

  1. 首先,找到session_id为51的查询:
SELECT session_id, text
FROM sys.dm_exec_requests
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE session_id = 51;

假设我们找到了session_id为51的查询,接着执行第2步:

DECLARE @PlanHandle varbinary(64);

SELECT @PlanHandle = cp.plan_handle
FROM sys.dm_exec_requests AS r
CROSS APPLY sys.dm_exec_query_plan(r.plan_handle) AS cp
WHERE r.session_id = 51;

SELECT * 
FROM sys.dm_exec_query_plan(@PlanHandle);

通过以上查询,我们可以查看到session_id为51的查询的执行计划,从而进行优化或排查问题。

总结

通过查看当前执行计划,我们可以了解SQL Server是如何执行查询的,有助于优化查询性能。使用sys.dm_exec_query_plan和sys.dm_exec_requests这两个动态管理视图,我们可以方便地查看当前正在执行的查询的执行计划。在实际应用中,定期查看执行计划,可以帮助我们及时发现问题并进行优化,提高系统性能。

journey
    title 查看当前执行计划
    section 查询session_id
        sys.dm_exec_requests --> sys.dm_exec_sql_text
    section 获取执行计划
        sys.dm_exec_requests --> sys.dm_exec_query_plan

通过以上步骤和示例,希望能帮助读者了解如何查看SQL Server的当前执行计划,并有效优化查询性能。如果您在实际应用中遇到问题,不妨尝试查看当前执行计划,或许会有意想不到的收获。