​​​​​​查看TEMP空间的几种方法

1.TEMP数据库右键属性 ,可查看数据库初始大小 ,现在大小,可用空间 。

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

TEMP空间压缩

select size/128.0 ,*From tempdb.sys.database_files

TEMP空间压缩

3.使用系统函数 EXEC sp_helpdb 'tempdb'

TEMP空间压缩

数据库收缩

1.Temp数据库数据文件过大后,我们一般会采用收缩数据库

DBCC SHRINKFILE (tempdev, 5);  

如果收缩的数据库大小小于实际大小,数据库会收缩到实际大小 后不能再收缩。

用以下语句查看可收缩的空间

TEMP空间压缩

如果有收缩的空间,但是使用 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

use tempdb

go

SELECT top 10 t1.session_id,                                                   

t1.internal_objects_alloc_page_count,  t1.user_objects_alloc_page_count,

t1.internal_objects_dealloc_page_count , t1.user_objects_dealloc_page_count,

t3.login_name,t3.status,t3.total_elapsed_time

from sys.dm_db_session_space_usage  t1

inner join sys.dm_exec_sessions as t3

on t1.session_id = t3.session_id

where (t1.internal_objects_alloc_page_count>0

or t1.user_objects_alloc_page_count >0

or t1.internal_objects_dealloc_page_count>0

or t1.user_objects_dealloc_page_count>0)

order by t1.internal_objects_alloc_page_count desc

  TEMP空间压缩

2.从internal_objects_alloc_page_count和internal_objects_dealloc_page_count可以看出,给session分配了44096页,计算一下:

1

select 44096*8/1024/1024 as [size_GB]

可能是因为时间太久,已经找不到导致暴增的会话。

3.如果产生问题的会话还存在的话,可以根据会话id进一步查看具体执行的sql内容

1

2

3

4

select p.*,s.text

from master.dbo.sysprocesses p

cross apply sys.dm_exec_sql_text(p.sql_handle) s

where spid = 74

本次使用环境为2014 SQLSever 

参考文档:

http://www.cnblogs.com/stswordman/p/3358496.html

相关文章: