问题
sql server进程占用cpu一直很高,重启服务器也无效。
原因分析
有哪些SQL语句会导致CPU过高? 上网查看了下文章,得出以下结论:
1.编译和重编译
编译是 Sql Server 为指令生成执行计划的过程。Sql Server
要分析指令要做的事情,分析它所要访问的表格结构,也就是生成执行计划的过程。这个过程主要是在做各种计算,所以CPU 使用比较集中的地方。执行计划生成后会被缓存在 内存中,以便重用。但是不是所有的都可以
被重用。在很多时候,由于数据量发生了变化,或者数据结构发生了变化,同样一句话执行,就要重编译。2.排序(sort) 和 聚合计算(aggregation)
在查询的时候,经常会做 order by、distinct 这样的操作,也会做 avg、sum、max、min
这样的聚合计算,在数据已经被加载到内存后,就要使用CPU把这些计算做完。所以这些操作的语句CPU 使用量会多一些。3.表格连接(Join)操作
当语句需要两张表做连接的时候,SQLServer 常常会选择 Nested Loop 或 Hash 算法。算法的完成要运行 CPU,所以
join 有时候也会带来 CPU 使用比较集中的地方。4.Count(*) 语句执行的过于频繁
特别是对大表 Count() ,因为 Count() 后面如果没有条件,或者条件用不上索引,都会引起 全表扫描的,也会引起 CPU
的大量运算
解决步骤
- 使用SQL Server Profiler进行分析。
开始--程序--Microsoft SQL Server 2005--性能工具--SQL Server Profiler
新建跟踪,20分钟就行。
另存一下跟踪文件。
2.进行优化
开始--程序--Microsoft SQL Server 2005--性能工具--数据库引擎优化顾问
工作负荷:选择跟踪文件
选择需要优化的数据库。
等待很久,查看建议和报告。
应用所有建议
检查一下效果。
总结
一般sql占用cpu过高可能和索引有关,可以重建索引。