捕获 sys.dm_pdw_dms_workers

Capture of sys.dm_pdw_dms_workers

我想从 sys.dm_pdw_dms_workers 收集数据并将其保留一段时间。

我正在 运行在接近静止的 DWU6000 系统上执行以下操作 SQL,它 运行 超过 40 分钟。

这么长的 运行 时间有什么解释?我在一个很少使用的 DWU100 系统上执行了这个过程,查询 运行 秒。

INSERT INTO
     #dm_pdw_dms_workers
    (
     request_id
    ,step_index
    ,dms_step_index
    ,pdw_node_id
    ,distribution_id
    ,type
    ,status
    ,bytes_per_sec
    ,bytes_processed
    ,rows_processed
    ,start_time
    ,end_time
    ,cpu_time
    ,query_time
    ,buffers_available
    ,sql_spid
    ,dms_cpid
    ,error_id
    ,source_info
    ,destination_info
    )
select
     request_id
    ,step_index
    ,dms_step_index
    ,pdw_node_id
    ,distribution_id
    ,type
    ,status
    ,bytes_per_sec
    ,bytes_processed
    ,rows_processed
    ,start_time
    ,end_time
    ,cpu_time
    ,query_time
    ,buffers_available
    ,sql_spid
    ,dms_cpid
    ,error_id
    ,source_info
    ,destination_info
from
     sys.dm_pdw_dms_workers
where
     end_time is not null
;

温度 table 定义为:

create table
     #dm_pdw_dms_workers
    (
     request_id           nvarchar(32)    /* PK of sys.dm_pdw_dms_workers. */
    ,step_index           integer         /* PK of sys.dm_pdw_dms_workers. */
    ,dms_step_index       integer         /* PK of sys.dm_pdw_dms_workers. */
    ,pdw_node_id          integer
    ,distribution_id      integer
    ,type                 nvarchar(32)
    ,status               nvarchar(32)
    ,bytes_per_sec        bigint
    ,bytes_processed      bigint
    ,rows_processed       bigint
    ,start_time           datetime
    ,end_time             datetime
    ,cpu_time             bigint
    ,query_time           integer
    ,buffers_available    integer
    ,sql_spid             integer
    ,dms_cpid             integer
    ,error_id             nvarchar(36)
    ,source_info          nvarchar(4000)
    ,destination_info     nvarchar(4000)
    )
WITH
    (
     HEAP
    ,DISTRIBUTION = hash(request_id)
    )

;

源数据不大:

 select
     count(step_index)
 from
      sys.dm_pdw_dms_workers
 where
      end_time is not null
 ;

结果

485,694

删除 temp table 的 DISTRIBUTION 子句可防止在高 DWU 时生成非最佳计划