如何更好地使用 Tempdb

最近更新时间:2025-12-18 14:57:22

我的收藏
tempdb 是用于存储临时数据的系统库,在每次 SQL Server 进程启动时会新加载生成。因为比较灵活,所以该系统库在业务上的使用场景比较多。本文为您介绍在云数据库 SQL Server 中 tempdb 系统库的使用及其优化建议。

tempdb 空间占用问题分析

由于 tempdb 会临时的物化临时数据(当 SQL Server 执行某些操作时,tempdb 会被用来存储中间结果或临时数据),所以在把数据写入临时表的时候,Tempdb 的空间也会根据数据的大小来增长。正常情况下,当少量数据写入临时表并处理完成后,提交(Commit)事务后,Tempdb 会自动释放这部分空间,后续事务在使用临时表时,就可以复用该空间。但是有时候会遇到 Tempdb 占用比较大的空间并且无法收缩的场景,此时,我们该如何处理呢?
一、合理使用,从源头规避空间膨胀过大问题
避免在一个事务中大量的将数据插入临时表,造成 tempdb 膨胀过大。
在事务中使用完临时表后,及时提交事务,避免 tempdb 持续膨胀。
二、收缩文件,通过重启或清理缓存释放膨胀空间
如果 tempdb 文件已经膨胀过大,则需要收缩,而在实例正在运行的场景下,很难收缩掉数据文件,此时建议的方案是重启 SQL Server 进程,以重新加载生成新的 tempdb。
如果因业务情况不方便直接重启 SQL Server 进程,可以考虑先清理实例缓存,然后再进行收缩的方式,这样可以在不重启的情况下收缩掉数据文件。
注意:
实例缓存被清理后可能会出现一段时间内部分 SQL 性能下降的情况。

tempdb 性能优化建议

在 tempdb 使用频繁的系统中,其库的大小和物理位置可能会带来部分影响,例如,若为 tempdb 定义的大小过小,则每次重启 SQL Server 实例时,系统需额外消耗处理资源,以完成 Tempdb 自动扩展至支撑当前工作负载所需的大小。
针对 tempdb 的优化建议如下:
将文件自动增长的大小设置为合理大小,以避免在数据写入时频繁的触发文件增长,从而影响性能。建议设置文件自动增长在200MB - 500MB 之间。
根据需要创建多个文件使磁盘带宽最大化,可以有效地减少 tempdb 存储争用。建议根据实例的 CPU 数量来增加 tempdb 数据文件,超过8个 CPU 的实例,建议一共创建8个 Tempdb 数据文件。
每个 tempdb 数据文件建议设置为相同大小,文件自动增长大小也建议设置为相同大小,可以优化比例填充的性能。

增加 tempdb 数据文件的方法

通过 SSMS 连接实例后增加 tempdb 数据文件

1. 连接 SSMS。
2. 点开 tempdb 数据库属性。
3. 单击 Files,然后单击 ADD 即可增加 tempdb,最后单击 OK


使用 SQL 命令增加 tempdb 数据文件

您也可以直接通过 SQL 命令来增加 tempdb 数据文件,具体命令参考如下:
ALTER DATABASE [tempdb] ADD FILE ( NAME = N'tempdev2', FILENAME = N'F:\\gamedb\\58047\\tempdev2.ndf' , SIZE = 3382272KB , FILEGROWTH = 204800KB )
GO
SQL 命令参数说明
参数
说明
ALTER DATABASE [tempdb]
表示操作的数据库是 tempdb。
ADD FILE (...)
指定要向该数据库中添加一个新的数据文件。
SIZE = 3382272KB
文件的初始大小,这里表示约3.22GB。
FILEGROWTH = 204800KB
文件的自动增长大小,这里表示当文件空间不足时,会自动按约199.9MB的增量扩展。