我们现在的一个系统,在运行一段超级复杂的查询以后,tempdb会从500m增大到1g,而且在查询完以后,没有自动从1g回到500m,我该如何设置才能使大小正常呢?注:不想改那些已经写好的存储过程,因为有很多业务逻辑在里面。而且在sql2000是正常的,但是到2005上就会出现tempdb不断增大的问题。谢谢哪位指教一下啦

解决方案 »

  1.   

    tempdb 重启SqlServer服务就会自动恢复,1G的大小很正常Sql2005比2000要求更大的tempdb数据库可以参考MSDN:解决 tempdb 中磁盘空间不足的问题 
      

  2.   

    主动加大tempdb大小,根据业务需要,如果确要1G,那干脆加大到1.5G
      

  3.   

    --A. 将tempdb数据库的主数据文件大小设置为10MB。
    ALTER DATABASE tempdb
    MODIFY FILE(
    name=tempdev,
    size=100 MB)
    GO--B. 将tempdb数据库的主数据文件移动到指定的磁盘分区上,并且为其添加一个数据文件。
    --移动主数据文件
    ALTER DATABASE tempdb MODIFY FILE
      ( NAME='tempdev',
       FILENAME ='d:\tempdb.mdf')--添加次要数据文件
    ALTER DATABASE tempdb ADD FILE
      ( NAME='tempdata_1',
       FILENAME ='d:\tempdb_data_1.ndf')
      

  4.   

    谢谢两位的回答,但是我现在的问题是,如果我不停的执行复杂查询的话,即使查询结束,tempdb也不会回复到原来的大小,不会从1g变成500m,而且如果再次执行复杂查询的话,还会继续从1g继续上涨,有没有什么办法控制住呢?因为sqlserver服务器这边不太好频繁重启,因为是上线的业务系统,谢谢了
      

  5.   

    tempdb中长期不用的东西是会自动清除的,但是空间不会释放,如果觉得太大了可以自己去收缩
      

  6.   

    谢谢两位的回答,但是我现在的问题是,如果我不停的执行复杂查询的话,即使查询结束,tempdb也不会回复到原来的大小,不会从1g变成500m,而且如果再次执行复杂查询的话,还会继续从1g继续上涨,有没有什么办法控制住呢?因为sqlserver服务器这边不太好频繁重启,因为是上线的业务系统,谢谢了---限制tempdb的最大值
      

  7.   

    但是限制最大值的话,比如说10g的话,那一直增长到10g的话,数据库会自动的对tempdb进行清理吗?
      

  8.   

    关于tempdb的一些使用要点:
    ===============================SQL2005比SQL2000对tempdb的要求更多一些, 比如,一些原来在2000里面放到日志文件的操作被放到了tempdb里面。不建议收缩tempdb的大小,因为这需要把tempdb至少转到单独用户模式下面,另外,tempdb里面的一些对象是不能被回收的。事先增大tempdb的大小,并且要设置允许自动增长,以防止峰值或者其他额外的需求。把tempdb放到独立的物理盘上,并保证有足够的空间。监控tempdb的增长情况和使用情况,并预先做好计划(比如增加磁盘空间,预先扩大..)。根据CPU的数量设置对应的tempdb的数据文件,比如你有4个CPU,就为tempdb设置4个data file,以获得最好的文件访问并发性。
      

  9.   

    tempdb的大小没关系的.重启动计算机后该没的就没了. 另外,为保证系统的正常运行,建议把tempdb的空间加大.