查看TEMP空间的几种方法
1.TEMP数据库右键属性 ,可查看数据库初始大小 ,现在大小,可用空间 。
2.使用DMV视图查看 ,sys.master_files 查看初始化大小 , sys.database_files查看当前大小 。
select size/128.0,* from sys.master_files where database_id=2 。其中SIZE的单位为8KB的数据页,除以128单位为MB
select size/128.0 ,*From tempdb.sys.database_files
3.使用系统函数 EXEC sp_helpdb 'tempdb'
数据库收缩
1.Temp数据库数据文件过大后,我们一般会采用收缩数据库
DBCC SHRINKFILE (tempdev, 5);
如果收缩的数据库大小小于实际大小,数据库会收缩到实际大小 后不能再收缩。
用以下语句查看可收缩的空间
如果有收缩的空间,但是使用 DBCC SHRINKFILE 却扔无法收缩 ,可以考虑先清空缓存 ,再进行收缩。
DBCC FREESYSTEMCACHE('ALL')
注意此语句会同时清空存储过程执行计划,有可能导致效率下降。
注:2008及以上版本使用DBCC SHRINKFILE 命令会改变数据库初始大小。会将初始大小变为收缩后的大小。
2.重启SQL服务 。
重启SQL服务,会重新生成TempDB数据库,还原TempDB为初始大小 。
临时重启了数据库服务器后解决问题。但最主要的还是找到TempDB文件暴增的原因。
如何查询TempDB文件暴增
tempdb数据文件暴增,会导致服务器磁盘空间被耗尽。(所以记得设置maxSize)
1.查看tempdb的使用分配情况
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
2.从internal_objects_alloc_page_count和internal_objects_dealloc_page_count可以看出,给session分配了44096页,计算一下:
1 |
|
可能是因为时间太久,已经找不到导致暴增的会话。
3.如果产生问题的会话还存在的话,可以根据会话id进一步查看具体执行的sql内容
1 2 3 4 |
|
本次使用环境为2014 SQLSever
参考文档: