gpt4 book ai didi

sql-server - 合并语句优化

转载 作者:行者123 更新时间:2023-12-03 16:24:47 25 4
gpt4 key购买 nike

我在 SQL Server 中有两个表,其中一个是 MERGE 操作到另一个的源。

源表有3000万条记录

Target 表有 1.8 亿条记录。两个表都有 227 列。

我有 SSIS,但有人告诉我在这种情况下,MERGE 语句是更好的选择。以下是它的简化版本:

;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

我该如何解决这个问题?谢谢。

最佳答案

似乎 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/

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

关于sql-server - 合并语句优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44724856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com