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 目录视图。

数据库选项 默认值 是否可修改
ALLOW_SNAPSHOT_ISOLATION OFF
ANSI_NULL_DEFAULT OFF
ANSI_NULLS OFF
ANSI_PADDING OFF
ANSI_WARNINGS OFF
ARITHABORT OFF
AUTO_CLOSE OFF
AUTO_CREATE_STATISTICS ON
AUTO_SHRINK OFF
AUTO_UPDATE_STATISTICS ON
AUTO_UPDATE_STATISTICS_ASYNC OFF
CHANGE_TRACKING OFF
CONCAT_NULL_YIELDS_NULL OFF
CURSOR_CLOSE_ON_COMMIT OFF
CURSOR_DEFAULT GLOBAL
数据库可用性选项 ONLINE

MULTI_USER

READ_WRITE




DATE_CORRELATION_OPTIMIZATION OFF
DB_CHAINING ON
ENCRYPTION OFF
NUMERIC_ROUNDABORT OFF
PAGE_VERIFY 用于新安装的SQL Server的 CHECKSUM。

对于SQL Server的升级,无。
PARAMETERIZATION SIMPLE
QUOTED_IDENTIFIER OFF
READ_COMMITTED_SNAPSHOT OFF
RECOVERY SIMPLE
RECURSIVE_TRIGGERS OFF
Service Broker 选项 ENABLE_BROKER
TRUSTWORTHY OFF

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

限制

无法对 tempdb 数据库执行以下操作:

  • 添加文件组。

  • 备份或还原数据库。

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

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

  • 创建数据库快照。

  • 删除数据库。

  • 从数据库中删除 guest 用户。

  • 启用变更数据捕获。

  • 参与数据库镜像。

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

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

  • 运行 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