tempdb 数据库

tempdb 系统数据库是一种全局资源,可供连接到 SQL Server 实例的所有用户使用,用于保存以下内容:

  • 显式创建的临时用户对象,例如:全局或本地临时表、临时存储过程、表变量或游标。

  • SQL Server 数据库引擎创建的内部对象,例如用于存储数据缓存或排序中间结果的工作表。

  • 在使用行版本隔离或快照隔离进行读取提交的数据库中,由数据修改事务生成的行版本。

  • 由数据修改事务为以下功能生成的行版本,例如联机索引操作、多个活动结果集(MARS)和 AFTER 触发器。

tempdb 中的操作进行最小记录。 这使事务能够回滚。 每次启动 SQL Server 时,都会重新创建 tempdb,以便系统始终以数据库的干净副本开始。 在断开连接时自动删除临时表和存储过程,当系统关闭时,不会有任何连接处于活动状态。 因此, tempdb 中永远不会将任何内容从 SQL Server 的一个会话保存到另一个会话中。 不允许在 tempdb 上执行备份和还原操作。

tempdb 的物理属性

下表列出了 tempdb 数据和日志文件的初始配置值。 对于不同版本的 SQL Server,这些文件的大小可能会略有不同。

文件 逻辑名称 物理名称 文件增长
主要数据 tempdev tempdb.mdf 自动增长 10%,直到磁盘已满
日志 templog templog.ldf 自动增长 10%, 最大为 2 TB

tempdb 的大小可能会影响系统的性能。 例如,如果 tempdb 大小太小,则每次启动 SQL Server 时,系统处理可能过于占用自动增长数据库以支持工作负荷要求。 可以通过增加 tempdb 的大小来避免此开销。

tempdb 中的性能改进

在 SQL Server 中, tempdb 性能通过以下方式得到改进:

  • 可以缓存临时表和表变量。 缓存允许删除和创建临时对象的操作非常快速地执行,并减少页面分配竞争。

  • 分配页闩锁协议已得到改进。 这减少了使用的 UP(更新)闩锁的数量。

  • tempdb 的日志记录开销已减少。 这减少了 tempdb 日志文件上的磁盘 I/O 带宽消耗。

  • 改进了在 tempdb 中分配混合页的算法。

移动 tempdb 数据和日志文件

若要移动 tempdb 数据和日志文件,请参阅 移动系统数据库

数据库选项

下表列出了 tempdb 数据库中每个数据库选项的默认值,以及是否可以修改该选项。 若要查看这些选项的当前设置,请使用 sys.databases 目录视图。

数据库选项 默认值 可以修改
允许快照隔离 关闭 是的
ANSI_NULL_DEFAULT选项 关闭 是的
ANSI_NULLS 关闭 是的
ANSI_PADDING 关闭 是的
ANSI_WARNINGS 关闭 是的
ARITHABORT 关闭 是的
自动关闭 关闭
自动生成统计数据 是的
自动缩小 关闭
AUTO_UPDATE_STATISTICS 是的
AUTO_UPDATE_STATISTICS_ASYNC(自动更新统计信息异步) 关闭 是的
变更跟踪 关闭
CONCAT_NULL_YIELDS_NULL(空值连接结果为空值) 关闭 是的
游标在提交时关闭 关闭 是的
默认光标 全球 是的
数据库可用性选项 在线

多用户

读写




日期相关优化 关闭 是的
数据库联接
加密 关闭
NUMERIC_ROUNDABORT 关闭 是的
页面验证 用于 SQL Server 的新安装的 CHECKSUM。

SQL Server 没有可用的升级。
是的
参数化 简单 是的
引用标识符 关闭 是的
READ_COMMITTED_SNAPSHOT 关闭
恢复 简单
递归触发器 关闭 是的
Service Broker 选项 启用代理 是的
值得 信赖 关闭

有关这些数据库选项的说明,请参阅 ALTER DATABASE SET 选项(Transact-SQL)。

限制

不能对 tempdb 数据库执行以下作:

  • 添加文件组。

  • 备份或还原数据库。

  • 更改排序规则。 默认排序规则是服务器排序规则。

  • 更改数据库所有者。 tempdbsa 所有。

  • 创建数据库快照。

  • 删除数据库。

  • 从数据库中删除 来宾 用户。

  • 启用变更数据捕获。

  • 参与数据库镜像操作。

  • 删除主文件组、主数据文件或日志文件。

  • 重命名数据库或主文件组。

  • 运行 DBCC CHECKALLOC。

  • 运行 DBCC CHECKCATALOG。

  • 将数据库设置为 OFFLINE。

  • 将数据库或主文件组设置为READ_ONLY。

权限

任何用户可以在 tempdb 中创建临时对象。 用户只能访问自己的对象,除非他们收到其他权限。 可以撤销 tempdb 的连接权限以防止用户使用 tempdb,但不建议这样做,因为某些例程作需要使用 tempdb。

索引的SORT_IN_TEMPDB选项

系统数据库

sys.databases (Transact-SQL)

sys.master_files(Transact-SQL)

移动数据库文件

另请参阅

在 SQL Server 2005 中使用 tempdb