求sql 2008 磁盘过高出现的原因和解决办法,
数据库比较大,大概700g,一个单独的表大概有10g,在上面跑数据很慢,然后就停止了。
现在的磁盘很高,根本无法执行任何操作,重启服务器和sql服务都会提示该数据库回复中,磁盘高的离谱,回复完之后,磁盘还是居高不下。那位大侠帮帮忙,急等
[解决办法]
内存有压力吗?Log文件和数据文件有没有放在不同的磁盘?TEMPDB的位置?有没有做分区表?是OLAP的数据库还是OLTP?
[解决办法]
下次请说清楚:磁盘过高是指什么?I/O?空间?不说清楚无法对症下药。
我给你几个个人浅见,希望你有用:
1、就算再大的数据库,也有很大成分是历史数据,所以应该把一些历史数据存放到读性能比较高的盘。这里有几个前提:a、数据库要分多个文件组,不要都放在primary那里。b、有做磁盘阵列。c、磁盘够大。
2、对于业务表,把索引和数据也分开存放,同样使用多个文件组,我的建议是,对于所有表,分最少4个文件组,primary放系统数据,hisData(我的命名)放历史数据,indexData放表的索引,Data放数据,把indexData和Data这两个分开放到读写都比较好的盘上,比如raid10的盘。进一步把I/O压力分开。
3、如果你的CPU个数少于10个,那么按照cpu的个数,拆分tempdb,tempdb的数据文件个数与CPU个数一一对应,大小要一致,另外分1~2个tempdb的日志文件,要分配大一点。同时初始化估计都要到5G左右。自增限制到10G作于吧。够用了。
4、对1000万以上的表尽量做分区,这是必须的。否则肯定慢。
5、优化语句。优化索引,这个课题太大,无法一下子说清楚。但是这一步至关重要。
6、根据业务,考虑把经常读的数据移到另外一个数据库,缓解读的压力。主数据库已写为主。
7、定期重建索引(前提是索引是合理的),你那个规模,可能要每天重建了。
8、定期用DBCC CHECKDB检查数据库是否正常,但是对超大数据库有特殊的DBCC,建议你自己去找一下。
9、2008以后,你对实例点右键→报表→对象执行统计情况这个报表,可以看到最耗资源的10个查询,你逐个优化。
我的最近案例:我把公司的数据库最慢的功能所使用到的表的索引全部调整了一次,一个频繁调用的存储过程从40分钟降到31秒,整个系统接近提升了一倍性能,因为那个存储过程太重要了。所以你要做的事情还是很多很多,但是先从配置着手,然后重点优化性能。
[解决办法]