我试图找出或争取促成有关SQL Server的持续高CPU使用率SQL Server的因素可以导致CPU占用率过高
这里有一些,我想出了
一个因素)编译或存储的特效或查询
b)表现较差的查询执行庞大的排序或结束了使用哈希联接
C)平行的频繁重新编译(多线程跨度,以便它可以保持CPU繁忙)
d)在T-SQL中为例如While循环或使用CURSOR
E)缺少或不恰当的索引,导致表扫描
什么是其他SQL Server操作可能导致的高CPU使用率?
我试图找出或争取促成有关SQL Server的持续高CPU使用率SQL Server的因素可以导致CPU占用率过高
这里有一些,我想出了
一个因素)编译或存储的特效或查询
b)表现较差的查询执行庞大的排序或结束了使用哈希联接
C)平行的频繁重新编译(多线程跨度,以便它可以保持CPU繁忙)
d)在T-SQL中为例如While循环或使用CURSOR
E)缺少或不恰当的索引,导致表扫描
什么是其他SQL Server操作可能导致的高CPU使用率?
数据压缩是相对CPU密集型的。 加密是可能导致高CPU使用率的另一种操作。
Transperent数据加密...好的一个以及单元级别的加密 –
我也将添加备份压缩 –
标量用户定义函数的使用使用了比您想象的更多的CPU。
只有当你在错误的地方使用它们。 :-) –
亚伦,你的意思是如果你使用UDF访问表数据..而不是执行一些calculatios纠正我? –
对,CPU使用率将直接与行数和/或执行次数相关。如果由于您已将UDF应用到SELECT列表中而执行了80,000次UDF,则每次调用将不会占用大量的CPU,而是总和。另一方面,如果你的过程以'DECLARE @x = dbo.SomeFunc();'开始,或者甚至在许多情况下它是查询的一部分,那么函数只会被调用一次,所以你我们不会看到CPU使用率过高(除非函数也会导致问题中的某些其他问题)。 –
缺失或不合适的索引确实不会影响CPU,它几乎只有磁盘I/O。此外,循环构造不是CPU密集型的,除非它们中的计算很复杂。 –
缺少统计信息,可以真正将其并行化 –
我的意思是丢失或过时的统计信息。 –