收缩 tempdb 数据库

客户需求:

这是一个生产环境,在夜深人静的时候发现 tempdb 已经超过500GB。

需求分析:

我们知道,如果重启 SQL Server,tempdb 会自动重新创建,从而使 tempdb 回归到初始大小。但是这是生产环境,不允许重启 SQL Server。

尝试:

直接收缩 tempdb,始终不成功。


USE [tempdb]
GO

DBCC SHRINKFILE (N‘tempdev‘ , 0, TRUNCATEONLY)  --释放所有可用空间
GO

DBCC SHRINKFILE (N‘tempdev‘ , 500) -- 收缩到 500MB

GO

解决方案:

SQL Server 2005 及后续版本为了增强 tempdb 的性能,会缓存一些 IAM 页,以备将来重新使用这些页面。在这种情况下,必须首先释放 IAM 页,才能释放其对应的页面。因此,通过 DBCC FREESYSTEMCACHE,从所有缓存中释放所有未使用的缓存条目,然后再收缩 tempdb 。


USE [tempdb]
GO

DBCC FREESYSTEMCACHE (‘ALL‘)

GO

DBCC SHRINKFILE (N‘tempdev‘ , 500)

GO

终于收缩到 500 MB。成功!

关于 DBCC FREESYSTEMCACHE,请参考 https://technet.microsoft.com/zh-cn/library/ms178529.aspx

时间: 2024-10-09 21:22:54

收缩 tempdb 数据库的相关文章

收缩TempDB的办法(转载)

有时候在数据库上运行一个数据量很大的查询语句,会导致TempDB数据量剧增,具体查看下面链接文章: SqlServer 一个查询语句导致tempdb增大55G 找到TempDB剧增的问题后,接下来的问题是如何收缩TempDB.下面这篇文章详细阐述了如何收缩TempDB: 最简单的办法:重启SQL Server服务如果SQL Server 是安装在默认路径,那么 tempdb.mdf 和 templog.ldf 文件在以下路径:“C:\Program Files\Microsoft SQL Ser

SQL Server tempdb 数据库位置迁移

SQL Server tempdb 数据库位置迁移 --查看物理位置 SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('tempdb'); --修改路径 ALTER DATABASE tempdb MODIFY FILE (NAME = tempdev, FILENAME = 'D:\DataBaseNew\tempdb.mdf'); ALTER DATABASE tempdb MODIFY F

sql server转移tempdb数据库的物理存放位置

转移前将原来的文件备份一下 将 tempdb 从其在磁盘上的当前位置移动到其他磁盘位置.由于每次启动 MSSQLSERVER 服务时都会重新创建 tempdb,因此不需要从物理意义上移动数据和日志文件. 1 确定 tempdb 数据库的逻辑文件名称以及在磁盘上的当前位置. SELECT name, physical_name FROM sys.master_files WHERE database_id = DB_ID('tempdb'); GO 2 使用 ALTER DATABASE 更改每个

sql server 临时库文件太大 迁移tempdb数据库

由于装SQL Server时默认装在系统盘,使用一段时间后,tempdb数据库占了68G,导致整个C盘爆满,彻底解决办法就是迁移tempdb物理文件,移至其他大空间磁盘上. 将 tempdb 从其在磁盘上的当前位置移动到其他磁盘位置.由于每次启动 MSSQLSERVER 服务时都会重新创建 tempdb,因此不需要从物理意义上移动数据和日志文件. 迁移步骤: 1 确定 tempdb 数据库的逻辑文件名称以及在磁盘上的当前位置. SELECT name, physical_name FROM sy

删除指定数据库日志,可循环执行,清空Tempdb数据库

ALTER proc [dbo].[SYS_DB_Delete_Log] ( @DBName varchar(50) ) as -- 删除数据库日志 --Create by HDL 20141217 -- 用于将数据库日志文件删除重新创建 -- SYS_DB_Delete_Log 'ImportDB' -- update by hdl 20170928 处理删除日志后还原成原来模式 --update by hdl 20191209 修改处理TempDb begin /* use Z3 decla

数据库日志文件收缩

项目所使用的数据库通过备份还原来的,导致日志文件很大,占用了很大的空间,在网上搜索了日志收缩的信息,整理了下. --清空日志 DUMP  TRANSACTION  EWABOQDB  WITH NO_LOG --截断事务日志 BACKUP LOG EWABOQDB WITH NO_LOG --收缩日志 右键要收缩的数据库--任务--收缩--文件--文件类型选择日志--收缩方式中选择收缩至XXM输入确定 以上已完成日志文件的收缩,日志文件所占空间已减少 下面是对日志文件的增长规则进行了个限制 右键

SQL SERVER运维日记--收缩数据库

一个小故事 某天,小王正在和HR妹妹闲聊,正HAPPY时,,突然收到系统告警消息,数据库磁盘被剩余空间500M,OMG,不行,磁盘快满了,要是业务要停了,,那就小王只能删库到跑路了,,, 先检查下,有没有可以删除的不用的文件,结果都是重要的或者拿不准的.先收缩下数据库吧,点击运行.等收缩完成就可以继续去根HR妹妹聊天了.突然电话座机和手机齐鸣,小王心里一种不祥的预感呢?好像这个场景在哪里见过..不会是数据库阻塞了吧?? 手忙脚乱的先接起手机,因为来电显示是某业务部门主管 “小王啊,,现在系统卡死

收缩SQL Server 数据库的几种发发

方法一: Use 数据库名 Select NAME,size From sys.database_files ALTER DATABASE 数据库名 SET RECOVERY SIMPLE WITH NO_WAIT ALTER DATABASE 数据库名 SET RECOVERY SIMPLE USE 数据库名 DBCC SHRINKFILE(N’日志文件名’,0,TRUNCATEONLY) ALTER DATABASE 数据库名 SET RECOVERY FULL WITH NO_WAIT A

sql-server的添加数据库文件(日志数据)以及收缩数据库文件(日志数据)

环境: SSMS sql-server2016 一.为数据库添加数据文件 添加日志数据文件 以下是添加数据文件和日志文件的代码 ALTER DATABASE [joinbest] ADD FILE ( NAME = N'joinbest_2', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\joinbest_2.ndf' , SIZE = 8192KB , FILEGROWTH