Sql server SQL Server高CPU使用率
在客户端数据的ETL过程中,SQL占用了我的开发服务器上100%的CPU,我遇到了一个问题。这只是偶尔发生的,我已经找到了导致它的SP的特定部分,但不确定它为什么会占用这么多CPU LoadId和ClientId都是SP的输入变量。基本上,我尝试查找暂存表中新加载的数据中的任何对象ID是否与特定客户端的现有对象匹配,并且在处理任何错误之前,签入验证表数据会得到验证检查Sql server SQL Server高CPU使用率,sql-server,cpu-usage,etl,Sql Server,Cpu Usage,Etl,在客户端数据的ETL过程中,SQL占用了我的开发服务器上100%的CPU,我遇到了一个问题。这只是偶尔发生的,我已经找到了导致它的SP的特定部分,但不确定它为什么会占用这么多CPU LoadId和ClientId都是SP的输入变量。基本上,我尝试查找暂存表中新加载的数据中的任何对象ID是否与特定客户端的现有对象匹配,并且在处理任何错误之前,签入验证表数据会得到验证检查 SELECT src.Id , o.Id , CASE WHEN o.Id I
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 )
也许可以尝试这样做,但是在v表中将v.PK更改为不可为空的列
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)
查询分析器怎么说?请发布整个sp,因为可能有很多原因导致此查询分析器没有提出任何建议。它说对象表上的索引搜索需要70%的成本。另外,我不会发布整个SP,因为它不需要。我可以通过运行此查询重现问题。objects表有大约2.5mil行。src.Id和o.UniqueId是完全相同的数据类型吗?