日期:2014-05-19  浏览次数:20547 次

sql 2000 CPU常达99% 求解决方案 跟sql 优化方法
我是做ASP网站开发的

数据库有一张表有近200万条数据

我觉得最可能是查询这张表时出的问题

我想知道数据库的cpu占用跟sql事件跟踪器里看到的cpu占用时间   、reads等有什么

关系。这些数值在哪个范围内是允许的可接受的,如果超出了该怎么优化?

我目前的优化工作主要做了   建了聚集索引,使用存储过程

期待高手进来

------解决方案--------------------
1.请确认电脑是否已经中毒了?
2.200万表的数据是否可以把一部分数据移除?或者把它分成多个表?
分成多表的办法:一种不修改数据结构,这种办法当然要有外键关联;另一种办法是数据结构不变,按年月份把一个表的数据分为多表数据


------解决方案--------------------
如果排除了以上因素,跟踪一下是什么SQL查询时导致CPU占用100%

很有可能是效率极低的SQL查询时导致的

比如:是否有cross join 类型的查询


------解决方案--------------------
尽量不要用 in, or, *,等等
最好每个查询都有where
------解决方案--------------------
exec sp_executesql @strtemp,N '@Counts int out ',@Counts out
不要每次都count(),会很好性能的,可以作输入输出参数,避免每次都count(),性能会有很大提高。
------解决方案--------------------
count()可以作为output参数,
CREATE PROCEDURE fenye
(@RecordCount int =0 output,
@Tables varchar(1000),
@PrimaryKey varchar(100),
@Sort varchar(200) = NULL,
@CurrentPage int = 1,
@PageSize int = 10,
@Fields varchar(1000) = '* ',
@Filter varchar(1000) = NULL,
@Group varchar(1000) = NULL,
@Totalcount int = 0 output -- 加这个参数,如果totalcount <=0 就count(),否则不count(),这样会好很多,每次count()会耗很多资源。


------解决方案--------------------
set @strtemp= ' SELECT @Counts = count( '+@PrimaryKey+ ') FROM ' ++ @Tables + @strFilter + ' ' + @strGroup + ' '

这句话对么?怎么++都出来了?