数据库tempdb在运行过程中主要会遇到2种报错:
1.tempdb空间已满
2.tempdb日志已满
正常情况下,tempdb空间及日志使用率会自动收缩,不需要我们定期收缩。但有些时候,效率较差的SQL语句调用较多的临时表运行较长时间,或部分连接占用临时表空间,长期没有释放,导致tempdb一直处于ACTIVE_TRANSACTION状态,tempdb就无法自动收缩。若设置了告警,则会收到tempdb使用率超过阈值的告警信息,此时就需要DBA进行干预。
使用关键词‘tempdb is full’进行搜索,解决方案大致分为3种:
1.shrink tempdb file
2.expand tempdb file
3.restart sqlserver
- 收缩文件:
--查看数据库文件
Select NAME,size From sys.database_files WITH(NOLOCK)
--收缩指定的数据库文件
DBCC SHRINKFILE(N'templog' , 10,TRUNCATEONLY)
数据库在处于活动事务状态时,无法收缩,且在数据库日志已满的情况下,无法进行收缩行为。
- 扩大文件
alter database tempdb modify file(name ='N'templog',size=target_size_in_mb)
alter database tempdb modify file(name ='N'templog',MAXSIZE=unlimited)
alte