我有一个过程来计算SQL Server 2008 R2中的一个大表中的每日销售预测(让我们称之为Mothership
)。每天,我在事务数据库上扫描CDC以提取更改,计算增量预测,并将此Delta
与Mothership
合并。问题是,性能非常不一致。 Mothership
有25M行,Delta
有1到2M行。我看到合并的时间在8分钟到1小时不等。
MERGE声明很简单:
MERGE INTO Mothership AS tgt
USING Delta AS src
ON Mothership.Key1 = Delta.Key1 AND ... AND Mothership.Key4 = Delta.Key4
WHEN MATCHED AND Mothership.UpdateDate < Delta.UpdateDate
(UPDATE all data columns on Mothership)
WHEN NOT MATCHED
(INSERT into Mothership)
我在每张桌子上Key1到Key4上都定义了PRIMARY KEY,但性能仍然令人讨厌。 MERGE中有关于性能的错误吗?
答案 0 :(得分:1)
MERGE声明周围发现了一些错误。 Dan Guzman已经确定了MERGE受到竞争条件影响的一些情况,详情请参见此处 http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx
和Aaron Bertrand在这里的帖子中列出了一系列问题 http://www.sqlperformance.com/2013/02/t-sql-queries/another-merge-bug