首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Merge语句优化

Merge语句优化
EN

Stack Overflow用户
提问于 2017-06-23 23:16:07
回答 1查看 325关注 0票数 3

我在SQL Server中有两个表,其中一个是合并到另一个表的源。

源表有30Mil条记录

目标表有180Mil记录。这两个表都有227列。

我确实有SSIS,但有人告诉我,在这种情况下,MERGE语句是更好的选择。下面是它的一个简短版本:

代码语言:javascript
复制
;WITH MySource as (
    SELECT * FROM [STAGE].[dbo].[STAGE_TABLE]
)
MERGE [EDW].[dbo].[TARGET_TABLE] AS MyTarget
USING MySource
     ON MySource.[ID_FIELD] = MyTarget.[ID_FIELD]
    AND MySource.[LoadDate] >= MyTarget.[LoadDate]
WHEN MATCHED THEN UPDATE SET 
     <<Target Column>> = MySource.<<Source Colums>> --227 columns
WHEN NOT MATCHED THEN INSERT
    (
        [ID_FIELD], 
        [LoadDate], 
       <<225 Other Columns>>
    )
    VALUES (
        MySource.[ID_FIELD], 
        MySource.[LoadDate], 
        MySource.<<225 other columns>>
    );

我对上面的脚本所做的唯一更改是截断列的列表,以保持这里的代码块简短。

我的问题是我在执行死刑时被挂住了。配置文件屏幕显示CXPACKET挂起,并显示错误:cwaitpipenewrow, node=2

如何对此进行故障排除?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-06-24 00:23:30

看起来像CXPACKET和挂起状态意味着一些已经完成的线程正在记录另一个线程的状态,而其他线程还没有完成。请在这里检查。查询需要更新表中最多10亿个值。因此,查询的运行速度会很慢。

https://dba.stackexchange.com/questions/96346/cxpacket-suspended-and-null-wait-type

https://www.sqlshack.com/troubleshooting-the-cxpacket-wait-type-in-sql-server/

希望这些文章能帮助您进行调试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44724856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档