1

我有一个将每日销售预测计算到 SQL Server 2008 R2 中的大表(我们称之为Mothership)的过程。每天,我都会扫描事务数据库上的 CDC 以提取更改,计算增量预测,并将其DeltaMothership. 问题是,性能非常不一致。Mothership有 25M 行,并且Delta有 1 - 2M 行。我已经看到合并的性能在 8 分钟到一个小时之间。

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 在性能方面是否存在错误?

4

1 回答 1

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

于 2013-07-11T13:48:21.950 回答