SQL Server Cpu 100% 的常见原因及优化 |
发布时间: 2012/9/6 16:55:25 |
特别是对大表 Count(*) ,因为 Count(*) 后面如果没有条件,或者条件用不上索引,都会引起 全表扫描的,也会引起 CPU 的大量运算 在 SQL Server 这里,和 CPU 有关的设置却很有限,主要在 sp_configure 下,常见的设置有 Priority Boost 和 Lightweight Pooling 而对于 执行计划的观察,利用 sys.dm_exec_cached_plans 视图 会比较方便直观的观察,是很有的。 解决办法: 1. 紧急处理时,可以重启SQL Server 的服务,当然,如果 DB 是在线的 DB ,请谨慎此操作 2. 利用 SQL Server Profiler 来抓去语句,找出耗性能的SQL 语句,优化点。可以说,Sql 语句就好比 SQL Server 的性能之匙,80 % 以上的 SQL Server 性能问题都是 SQL 语句引起的 3. 根据 累计 使用 CPU 资源最多的语句 和 最经常 需要编辑的存储过程 来优化 语句 和存储过程 --使用DMV来分析SQL Server启动以来累计使用CPU资源最多的语句。例如下面的语句就可以列出前50名。select c.last_execution_time,c.execution_count,c.total_logical_reads,c.total_logical_writes,c.total_elapsed_time,c.last_elapsed_time, q.[text]from (select top 50 qs.* from sys.dm_exec_query_stats qs order by qs.total_worker_time desc) as c cross apply sys.dm_exec_sql_text(plan_handle) as qorder by c.total_worker_time descgo--我们也可以找到最经常做重编译的存储过程。select top 25 sql_text.text, sql_handle, plan_generation_num, execution_count, dbid, objectid from sys.dm_exec_query_stats a cross apply sys.dm_exec_sql_text(sql_handle) as sql_textwhere plan_generation_num >1order by plan_generation_num descgo 本文出自:亿恩科技【www.enkj.com】 |