首页 新闻 会员 周边 捐助

SQL Server CPU 100%性能优化求解

0
悬赏园豆:50 [待解决问题]

最近发布的一个网站碰到问题,求高手指导:

服务器环境

【ASP.NET网站】Windows Server 2003+IIS6.0+SQL Server 2008

项目名称:ERPOA

【JSP网站】Apache Tomcat 5.5+SQL Server 2008(共用一个实例)

项目名称:SMIS

症状描述:ERPOA运行一段时间后(大约1天),访问速度变得非常慢,检测发现CPU使用率非常高(超过50%,最高达100%),重启SQL Server服务后,恢复正常。初步检测此正常状态可维持1天左右,在此期间,若有访问(无论是ERPOA还是SMIS)连接,则CPU使用率会提高至50%左右,关闭访问后恢复正常效率1%左右。

思考:

个人认为从两个方面着手:

(1)优化项目数据库访问性能

(2)找出导致CPU使用率居高不下的原因。

处理:

对于第(1)点,已使用SQL Profiler采集了跟踪数据,稍后将贴出部分截图。

对于第(2)点,目前还在查找,未有进展。

SQL Profiler数据分析:

(1)关于第1,3,4,5,6条记录不清楚是什么东西,希望你能给出意见。

(2)关于第2条是执行的一个库中定义的存储过程,已做优化,优化后测试数据如下:

(3)很明显,对视图V_Staff的查询是CPU消耗的关键因素。

     上表中反映出来是SQL:BatchCompleted(EventClass=12)事件及SQL:StmtCompleted(EventClass=42)事件消耗CPU时间最多,估计这个是优化CPU使用率的关键因素。

     V_Staff视图由基础信息表构建,不包含系统表。对V_Staff执行统计命令如下:

很明显,上述查询是读取缓存数据,速度很快。

也就是说不应该产生上面表中出现的高CPU时间消耗的问题,但是它确实又产生了,这该如何解释,又该如何做进一步测试或优化,求高手指导!

求高手指导!

求高手指导!

求高手指导!

求高手指导!

问题补充:

     有了新进展,初步判断,可能是V_Staff视图进行了重编译,导致查询消耗CPU较大。

     于是,仔细的梳理了一边ERPOA项目,发现每次登录之前修改用户信息表(登录时间等的记录),会导致V_Staff视图重编译,而此时由于系统待办任务对此视图的查询很频繁,因此产生了大消耗。

     接下来,针对上面的分析,将登录时间的信息的记录独立出来,再次测试,发现系统性能有了较大的改善,测试视图如下表:

第一张表为改动前的检测数据,第二张表为改动后的监测数据,明显CPU消耗时间缩短了约2/3。

不过依然不理想SQL:BatchCompleted的消耗依然很大,需要进一步做优化,下图是按时间顺序查询的检测数据表:

从图中可以看出来,每次对V_Staff的查询都会捕获到两个事件:

(1)SQL:StmtCompleted=41  (Reads=12, CPU=0)

(2)SQL:BatchCompleted=12 (Reads=921,CPU=156)

由比较可以知道,第二个事件是消耗资源的罪魁祸首,不过我并不清楚SQL:BatchCompleted与SQL:StmtCompleted的差别在什么地方?

而SQL:BatchCompleted的资源消耗由该如何优化?

xrbx的主页 xrbx | 初学一级 | 园豆:145
提问于:2011-11-18 13:26
< >
分享
所有回答(3)
0

Duration 和CPU都好大

数据量很大?索引不正确?

第3,4两条命令看不清楚。图片模糊了 

 

-----------------

还是贴出表结构和视图结构吧。

无尽思绪 | 园豆:94 (初学一级) | 2011-11-18 14:57

Recently, while evaluating the performance of a production system, I was alarmed by the ”SQLServer: Access Methods\ Page Splits/ sec” occuring in the system.

It turned out that if you have the ”Activity Monitor” on, then there is a SQL Statement running which executes ”EXEC #am_get_querystats”, with CPU about 967, Reads about 50000, Writes 646 and it refers to the tempdb.

So, what other counters is the Activity Monitor affecting?

--------------------

在你使用完成后,建议set statistics time off , and set statistics io off.

估计这个问题是引起你第3,4,5,6条问题的原因。

支持(0) 反对(0) 无尽思绪 | 园豆:94 (初学一级) | 2011-11-18 15:04

另外从你第7条数据开始,貌似实际读取出来的数据都不是很多。

但是CPU和Duration都很高,不知道具体SQL是什么

可以考虑优化SQL,索引,分拆,甚至更改表结构等等。

支持(0) 反对(0) 无尽思绪 | 园豆:94 (初学一级) | 2011-11-18 15:07
0

为了提高效率,可以考虑建立关系表和使用分区技术。

[CC] | 园豆:61 (初学一级) | 2011-11-20 11:27
0

上执行计划看??

dotNetDR_ | 园豆:2078 (老鸟四级) | 2011-11-22 13:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册