数据库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

当tempdb数据库空间或日志已满时,会出现错误。常见解决方法包括收缩、扩大tempdb文件或重启SQL Server。然而,这些只是暂时措施。排查步骤包括检查数据库状态、长时间运行的事务、快照中的耗时查询,并根据session_id kill查询。通过这些步骤,可以找到根本原因并防止问题再次发生。
最低0.47元/天 解锁文章
527

被折叠的 条评论
为什么被折叠?



