日期:2014-05-17  浏览次数:20422 次

tempdb读写量太大导致网站瘫痪
网站数据访问使用的是entity framework,数据库为MSSQL 2008 R2,在线访问2000人左右,大部分都是浏览很少提交数据,结果网站直接瘫痪了,查看服务器资源使用情况发现CPU、内存等都很正常,占用了不到20%,网络也是。
但是发现磁盘达到了80m/s的IO,主要是对SQL的tempdb文件的操作,读30M,写50M,这样磁盘基本已经满负荷工作了,请问是磁盘不给力无法支撑这么大的访问量还是因为使用了entity导致了性能下降?
tempdb没有和系统盘在一起,并且也只有一个文件,2000人是保守估计,正式的话估计有2500+的并发访问。

------解决方案--------------------
评估一下这两个方法:
1、tempdb的数据文件,按cpu的个数拆分,但是不要太多,一般10个都够了。
2、tempdb的数据文件及日志文件初始化放大点,以避免频繁增长

另外,检查运行得久的查询,看看那些是否有创建了临时表,但是即使不用。也要等到最后一步才删除这种不良习惯
------解决方案--------------------
你这种算是低质量的代码,运行所需的开销相对较大,速度也不快,并发情况下容易造成阻塞甚至死锁。临时表如果忘了释放或者留在存储过程的最后才释放(前提是已经不用的临时表),会造成tempdb无法迅速回收空间,导致新的临时表没有空间生成等等问题,所以优化代码比增大tempdb的空间更重要,但是也可以多方面去优化。