DBCC PDW_SHOWEXECUTIONPLAN (Transact-SQL)

适用于: Azure Synapse Analytics 分析平台系统 (PDW)

显示在特定 SQL Server 或 Azure Synapse Analytics 计算节点或控制节点上运行的查询的 Analytics Platform System (PDW) 执行计划。 在计算节点和控制节点上运行查询时,使用它来解决查询性能问题。

了解在计算节点上运行的 SMP SQL Server 查询的查询性能问题后,可通过几种方法来提高性能。 可提高计算节点上查询性能的方法包括创建多列统计信息、创建非聚集索引或使用查询提示。

Transact-SQL 语法约定

语法

Azure Synapse Analytics 的语法:

DBCC PDW_SHOWEXECUTIONPLAN ( distribution_id , spid )
[;]

Analytics Platform System (PDW) 的语法:

DBCC PDW_SHOWEXECUTIONPLAN ( pdw_node_id , spid )
[;]

注意

Azure Synapse Analytics 中的无服务器 SQL 池不支持此语法。

参数

distribution_id

正在运行查询计划的分发的标识符。 这是一个整数,并且不能为 NULL。 值必须介于 1 和 60 之间。 以 Azure Synapse Analytics 为目标时使用。

pdw_node_id

正在运行查询计划的节点的标识符。 这是一个整数,并且不能为 NULL。 以设备为目标时使用。

spid

正在运行查询计划的 SQL Server 会话的标识符。 这是一个整数,并且不能为 NULL

权限

需要对 Azure Synapse Analytics 的 CONTROL 权限。

需要对设备具有 VIEW SERVER STATE 权限。

示例:Azure Synapse Analytics

A. DBCC PDW_SHOWEXECUTIONPLAN 基本语法

以下示例查询会为每个主动运行的分发返回 sql_spid

SELECT [sql_spid]
    , [pdw_node_id]
    , [request_id]
    , [dms_step_index]
    , [type]
    , [start_time]
    , [end_time]
    , [status]
    , [distribution_id]
FROM sys.dm_pdw_dms_workers
WHERE [status] <> 'StepComplete'
    AND [status] <> 'StepError'
ORDER BY request_id
    , [dms_step_index];

如果对会话 375 中正在运行的 distribution_id 1 感到好奇,可运行以下命令:

DBCC PDW_SHOWEXECUTIONPLAN (1, 375);

示例:Analytics Platform System (PDW)

B. DBCC PDW_SHOWEXECUTIONPLAN 基本语法

运行时间太长的查询运行的是 DMS 查询计划操作或 SQL 查询计划操作。

如果查询运行的是 DMS 查询计划操作,对于未完成的步骤,可以使用以下查询来检索节点 ID 和会话 ID 的列表。

SELECT [sql_spid]
    , [pdw_node_id]
    , [request_id]
    , [dms_step_index]
    , [type]
    , [start_time]
    , [end_time]
    , [status]
FROM sys.dm_pdw_dms_workers
WHERE [status] <> 'StepComplete'
    AND [status] <> 'StepError'
    AND pdw_node_id = 201001
ORDER BY request_id
    , [dms_step_index]
    , [distribution_id];

基于上述查询的结果,使用 sql_spidpdw_node_id 作为 DBCC PDW_SHOWEXECUTIONPLAN 的参数。 例如,以下命令会显示 pdw_node_id 201001 和 sql_spid 375 的执行计划。

DBCC PDW_SHOWEXECUTIONPLAN (201001, 375);

后续步骤