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

TempDB变大
如题,之前也才不到1G,突然间增加到了一百多G,第一次重启服务器,有变小,第二次重启的时候就没有降低了,是什么原因,网上查找是说创建了太多了临时表等的,而且没有及时清空掉,请问还有其他原因吗,最近有将数据库的恢复模式从完整改为简单,才开始这样的,跟这个恢复模式有关系吗?
服务器 数据库

------解决方案--------------------
tempdb本身就是简单模式。你的这种情况我初步怀疑是有什么重启后自动运行的操作或者未关闭的事务占用了tempdb。还有你要注意tempdb的初始大小。另外还有一个“model”数据库,这个库里面的对象再重启之后,也会自动产生到tempdb里面,所以看看model库有没有一些你不希望的对象如表、触发器等存在。
------解决方案--------------------
理论上说,每次SQL Server重启时,不管之前有多大,都会重建的,大小是model数据库的大小,

你说第一次重启,确实变小了,但第二次重启,就还是那么大,这个很不正常。

           
--查询 tempdb中那部分较大
Select      
       'Tempdb' as DB,       
          
       SUM (user_object_reserved_page_count)*8.0 / 1024 as '用户对象保留的大小',       
   SUM (internal_object_reserved_page_count)*8.0 / 1024 as '内部对象保留的大小',   
   SUM (version_store_reserved_page_count)*8.0 / 1024  as '版本存储保留的大小',     
   SUM (unallocated_extent_page_count)*8.0 / 1024 as '未分配的区中包含的大小',     
   
   SUM(mixed_extent_page_count)*8.0 / 1024 as '文件的已分配混合区中:已分配页和未分配大小'  --包含IAM页   
From sys.dm_db_file_space_usage                                          
Where database_id = 2  


--进一步定位是那些会话,消耗了大量的tempdb空间
select session_id,
       
       DB_NAME(database_id) as dbname,
       
       user_objects_alloc_page_count,   --分配的用户对象的页数
       user_objects_dealloc_page_count, --释放的用户对象的页数
       
       internal_objects_alloc_page_count,  --分配的内部对象的页数
       internal_objects_dealloc_page_count --释放的内部对象的页数
       
from sys.dm_db_session_space_usage
order by user_objects_alloc_page_count + 
         internal_objects_alloc_page_count desc