DBCC PDW_SHOWEXECUTIONPLAN (Transact-SQL)
适用于: Azure Synapse Analytics 分析平台系统 (PDW)
显示在特定 SQL Server 或 Azure Synapse Analytics 计算节点或控制节点上运行的查询的 Analytics Platform System (PDW) 执行计划。 在计算节点和控制节点上运行查询时,使用它来解决查询性能问题。
了解在计算节点上运行的 SMP SQL Server 查询的查询性能问题后,可通过几种方法来提高性能。 可提高计算节点上查询性能的方法包括创建多列统计信息、创建非聚集索引或使用查询提示。
语法
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_spid
和 pdw_node_id
作为 DBCC PDW_SHOWEXECUTIONPLAN
的参数。 例如,以下命令会显示 pdw_node_id
201001 和 sql_spid
375 的执行计划。
DBCC PDW_SHOWEXECUTIONPLAN (201001, 375);