SQL Server高CPU使用率

时间:2014-12-17 05:55:59

标签: sql-server cpu-usage etl

我在客户端数据的ETL期间遇到问题,其中SQL在我的开发服务器上占用了100%的CPU。这种情况偶尔发生,我发现SP的特定部分导致它,但不确定为什么它会使用这么多的CPU。

LoadId和ClientId都是SP的输入变量。基本上,我试图找出Staging表中的任何对象ID(新加载的数据)是否与现有对象(对于特定客户端)匹配,并且还检查Validation表(数据在处理之前获得验证检查) )任何错误。

SELECT  src.Id ,
            o.Id ,
            CASE WHEN o.Id IS NULL THEN 0
                 ELSE 1
            END
    FROM    ObjectsStaging src
            LEFT OUTER JOIN client.Objects o ON src.Id = o.UniqueId
    WHERE   src.LoadId = 22
            AND ( o.ClientId IS NULL
                  OR o.ClientId = 3
                )
            AND NOT EXISTS ( SELECT 1
                             FROM   dbo.ValidationLog v
                             WHERE  v.LoadId = 22
                                    AND v.RowId = src.RowId )

1 个答案:

答案 0 :(得分:0)

也许试试这个但是将v.PK更改为V表中的Non nullible列。

SELECT  src.Id ,
            o.Id ,
            CASE WHEN o.Id IS NULL THEN 0
                 ELSE 1
            END
    FROM    ObjectsStaging src
            LEFT OUTER JOIN client.Objects o ON src.Id = o.UniqueId
            LEFT OUTER JOIN dbo.ValidationLog v on v.LoadId = 22 AND v.RowId = src.RowId
    WHERE   src.LoadId = 22
            AND ( o.ClientId IS NULL
                  OR o.ClientId = 3
                )
            AND v.PK is null -- V.loadid is null ?   --(same as not exists)