1

我在 SQL DW 内部表之间加载数据时遇到问题,我试图只加载 50 条记录,这在我的源代码中 - 但是“插入”语句需要很长时间并且没有成功执行 [它持续运行超过60分钟]

很少有关于此的统计信息 • 源表(比如 S1)有 50 条记录,105 列,列式存储,DWU 100 上的循环分布 [下面给出该表的 DDL] • 目标表(比如 T1)已创建具有相同的 105 列,列式存储,DWU 100 上的循环分发 • 从 S1 作品中选择前 5 个 * 从 S1 作品中选择 * • 插入到 T1 中,因为 select * from S1 运行了很长时间而没有响应 [超过 60 分钟] • 插入到 T1作为 select top 5 * from S1 ,工作一次,之后不再工作 • 插入 T1 作为 select top 5 all_columns_listed from S1 ,始终有效并在 < 1 分钟内执行 • 插入 T1 作为 select top 30 all_columns_listed from S1 ,始终有效并且在 < 1 分钟内执行 • 插入 T1 作为 select top 50 all_columns_listed from S1 ,运行时间超过 25 分钟

我无法理解,后台可能会发生什么 - 当 select * from S1 正在运行时插入 T1;

DMS 有问题吗?还是因为我们有 105 列?

通过扩大到 DWU 200 尝试了所有上述操作 - 但仍然没有运气。

以上所有操作都在完全不同的数据库上尝试过,仍然没有运气。

还有什么可以检查正在发生的事情吗?如何处理?

我还尝试运行下面的语句来查看 - 是否有任何其他查询正在运行 - 这可能会使我的插入语句暂停或等待.. 但我可以看到 - 只有我的查询正在数据库上主动运行.. select * from " sys"."dm_pdw_exec_requests" where status='Running' order by submit_time desc

S1 DDL 在下面给出 CREATE TABLE S1 (
col1 [uniqueidentifier] NOT NULL,
col2 nvarchar NULL,
col3 [uniqueidentifier] NULL,
col4 nvarchar NULL,
col5 nvarchar NULL,
col6 [decimal](26, 6) NULL,
col7 [decimal]( 26, 6) NULL,
col8 [十进制](26, 6) NULL,
col9 [十进制](26, 6) NULL,
col10 [十进制](27, 6) NULL,
col11 [十进制](27, 6) NULL,
col12 [十进制](26, 6) NULL,
col13 [十进制](25, 6) NULL,
col14 [十进制](25, 6) NULL,
col15 datetimeoffset NULL,
col16 nvarchar NULL,
col17 datetimeoffset NULL,
col18 [smallint] NULL,
col19 [decimal](25, 6) NULL,
col20 [decimal](25, 6) NULL,
col21 [decimal](26, 6) NULL,
col22 [decimal ](26, 6) NULL,
col23 datetimeoffset NULL,
col24 [decimal](25, 6) NULL,
col25 [decimal](25, 6) NULL,
col26 [int] NULL,
col27 [decimal](25, 6) NULL ,
col28 datetimeoffset NULL,
col29 [decimal](25, 6) NULL,
col30 [decimal](25, 6) NULL,
col31 datetimeoffset NULL,
col32 datetimeoffset NULL,
col33 datetimeoffset NULL,
col34 datetimeoffset NULL,
col35 datetimeoffset NULL,
col36 datetimeoffset NULL,
col37 [decimal](25, 6) NULL,
col38 [decimal](25, 6) NULL,
col39 datetimeoffset NULL,
col40 [int] NULL,
col41 nvarchar NULL,
col42 [smallint] NULL,
col43 [smallint] NULL,
col44 [decimal](25, 6) NULL,
col45 [decimal](25, 6) NULL,
col46 [decimal](25, 6) NULL ,
col47 [十进制](25, 6) NULL,
col48 [十进制](25, 6) NULL,
col49 datetimeoffset NULL,
col50 [十进制](25, 6) NULL,
col51 [十进制](25, 6) NULL,
col52 [十进制](25, 6) NULL,
col53 [ decimal](25, 6) NULL,
col54 [decimal](25, 6) NULL,
col55 [decimal](25, 6) NULL,
col56 datetimeoffset NULL,
col57 [decimal](25, 6) NULL,
col58 [decimal] (25, 6) NULL,
col59 [十进制](25, 6) NULL,
col60 [十进制](25, 6) NULL,
col61 [十进制](25, 6) NULL,
col62 [十进制](25, 6) NULL ,
col63 datetimeoffset NULL,
col64 [decimal](25, 6) NULL,
col65 [decimal](25, 6) NULL,
col66 [decimal](25, 6) NULL,
col67 [decimal](25, 6) NULL,
col68 [ decimal](25, 6) NULL,
col69 [decimal](25, 6) NULL,
col70 datetimeoffset NULL,
col71 [decimal](25, 6) NULL,
col72 nvarchar NULL,
col73 nvarchar NULL,
col74 datetimeoffset NULL,
col75 datetimeoffset NULL ,
col76 datetimeoffset NULL,
col77 datetimeoffset NULL,
col78 datetimeoffset NULL,
col79 nvarchar NULL,
col80 nvarchar NULL,
col81 nvarchar NULL,
col82 nvarchar NULL,
col83 nvarchar NULL,
col84 nvarchar NULL,
col85 nvarchar NULL,
col86 nvarchar NULL,
col87 nvarchar NULL,
col88 nvarchar NULL,
col89 [bit] NULL,
col90 nvarchar NULL,
col91 nvarchar NULL,
col92 datetimeoffset NULL,
col93 [decimal](25, 6) NULL,
col94 nvarchar NULL,
col95 nvarchar NULL,
col96 [十进制](25, 6) NULL,
col97 [十进制](25, 6) NULL,
col98 [十进制](25, 6) NULL,
col99 [十进制](25, 6) NULL,
col100 [十进制](25 , 6) NULL,
col101 datetimeoffset NULL,
col102 nvarchar NULL,
col103 nvarchar NULL,
col104 nvarchar NULL,
col105 nvarchar NULL,
col106 nvarchar NULL,
col107 datetimeoffset NULL,
col108 datetimeoffset NULL,
col109 varchar NULL
)
WITH
(
DISTRIBUTION = ROUND_ROBIN, HEAP
)

4

1 回答 1

1

如果您将数据加载到一个空表中,您应该考虑使用CREATE TABLE AS SELECT(CTAS),而不是INSERT INTO ...让 DW 完全并行化跨节点的操作。

https://azure.microsoft.com/en-us/documentation/articles/sql-data-warehouse-develop-ctas/解释 CTAS,以及https://saldeloera.wordpress.com/2012/10/15/pdw- performance-tip-ctas-vs-insert-select/有更全面的比较。

于 2016-10-27T15:48:55.200 回答