你可以使用以下三种方法将 tempdb 收缩至小于其配置大小的大小。
方法 1: 使用 Transact-SQL 命令注意 此方法要求你重启 SQL Server。
停止 SQL Server。
在命令提示符处,以小配置模式启动实例。 为此,请按照下列步骤操作:
在命令提示符处,更改至以下文件夹:
如果实例是 SQL Server 的命名实例,请运行以下命令:
sqlservr.exe -s InstanceName -c -f 如果实例是 SQL Server 的默认实例,请运行以下命令:
sqlservr -c -f 注意 -c 和 -f 参数使 SQL Server 以小配置模式启动,在此模式下数据文件的 tempdb 大小为 1 MB,日志文件的 tempdb 大小为 0.5 MB。
使用查询分析器连接到 SQL Server,然后运行下列 Transact-SQL 命令:
停止 SQL Server。 为此,在命令提示符窗口中按 Ctrl+C,将 SQL Server 作为服务重启,然后验证 Tempdb.mdf 和 Templog.ldf 文件的大小。
此方法的局限是它只能对默认的 tempdb 逻辑文件 tempdev 和 templog 进行操作。 如果将更多的文件添加到 tempdb,则可以在将 SQL Server 作为服务重启后收缩它们。 启动过程中将重新创建所有 tempdb 文件。 但是,它们是空文件并且可以将其删除。 要删除 tempdb 中的其他文件,请使用带有 REMOVE FILE 选项的 ALTER DATABASE 命令。
方法 2: 使用 DBCC SHRINKDATABASE 命令使用 DBCC SHRINKDATABASE 命令收缩 tempdb 数据库。 DBCC SHRINKDATABASE 接收参数 target_percent。 该参数是数据库收缩后数据库文件中剩余可用空间的所需百分比。 如果使用 DBCC SHRINKDATABASE,可能必须重启 SQL Server。
通过使用 sp_spaceused 存储过程确定 tempdb 中当前使用的空间。 然后,计算剩余可用空间的百分比,以用作 DBCC SHRINKDATABASE 的参数。 该计算是基于所需数据库大小进行的。
注意 在某些情况下,你可能必须执行 sp_spaceused @updateusage=true 来重新计算使用的空间和获得更新的报告。 有关 sp_spaceused 存储过程的更多信息,请参考 SQL Server 联机丛书。
请考虑以下示例:
假定 tempdb 有两个文件:主数据文件 (Tempdb.mdf) 和日志文件 (Tempdb.ldf),其大小分别为 100 MB 和 30 MB。 假定 sp_spaceused 报告主数据文件包含 60 MB 的数据。 还假定你要将主数据文件收缩到 80 MB。 计算收缩后剩余可用空间的所需百分比: 80 MB - 60 MB = 20 MB。 现在,用 20 MB 除以 80 MB 等于 25%,这就是你的 target_percent。 事务日志文件将相应地收缩,从而在数据库收缩后剩下 25% 即 20 MB 的可用空间。
使用查询分析器连接到 SQL Server,然后运行下列 Transact-SQL 命令:
对 tempdb 数据库使用 DBCC SHRINKDATABASE 命令具有局限性。 数据文件和日志文件的目标大小不能小于创建数据库时指定的大小,也不能小于使用文件大小更改操作(如使用 MODIFY FILE 选项的 ALTER DATABASE 或命令)显式设置的上次大小。 BCC SHRINKDATABASE 的另一个限制是 target_percentage 参数的计算及其对当前使用的空间的依赖。
方法 3: 使用 DBCC SHRINKFILE 命令使用 DBCC SHRINKFILE 命令收缩单个 tempdb 文件。 DBCC SHRINKFILE 比 DBCC SHRINKDATABASE 提供更多的灵活性,因为你可以对单个数据库文件使用它,而不会影响属于同一数据库的其他文件。 DBCC SHRINKFILE 接收 target size 参数。 这是数据库文件的所需终大小。
确定主数据文件 (tempdb.mdf)、日志文件 (templog.ldf) 和添加到 tempdb 的其他文件的所需大小。 确保在这些文件中使用的空间小于或等于所需的目标大小。
使用查询分析器连接到 SQL Server,然后对要收缩的特定数据库文件运行下列 Transact-SQL 命令:
DBCC SHRINKFILE 的一个优点是它可以将文件大小减小到小于其原始大小的大小。 你可以对任何数据文件或日志文件执行 DBCC SHRINKFILE。 DBCC SHRINKFILE 的一个局限是你无法使数据库小于模型数据库的大小。
本文来源https://www.modb.pro/db/416145