sqlserver数据库这几天慢的不行,上服务器一看,cpu占用100%。利用sqlserver management studio ,点击工具--sql sever profile查看了下,发现有sql在狂查,发现有个进程一直在执行插入删除操作,关掉了,cpu下来了,但是查询很慢。问了下小弟,小弟说,前几天sqlserver整崩了,自己恢复过来,就变慢了。于是下面执行了下:
1.check db
DBCC CHECKDB
2.重建索引(全库)
exec sp_msforeachtable 'DBCC DBREINDEX(''?'')'
3.整理索引碎片
Select 'DBCC INDEXDEFRAG ('+DB_Name()+','+Object_Name(ID)+','+Cast(INDID As Varchar)+')'+Char(10)
From SysIndexes
Where ID Not IN (Select ID From SYSObjects Where xType='S')
将打印出的语句放到客户端执行
执行时候会报
找不到表 'xx' 的任何名为 '_WA_Sys_0000000B_0A338187' 的索引。之类的错误,
分析连该标的语句,进行索引优化,重建一些关联查询的索引。
4.更新统计信息
sp_updatestats
5.select * from sysindexes where name like '_WA_sys%'
就是看看,代表有很多索引优化工作要做
以上基本解决了问题。
-------------------------------------------------------------------------------
6.针对语句进行索引优化创建是必不可少的,客户端里右键sql语句---显示 估计的执行计划,然后就能看到各阶段开销,对于开销大的,一般是关联查询或者group by 之类的地方,建立组合索引或单建索引,速度可以明显提升。