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 数据库执行以下作:
添加文件组。
备份或还原数据库。
更改排序规则。 默认排序规则是服务器排序规则。
更改数据库所有者。 tempdb 归 sa 所有。
创建数据库快照。
删除数据库。
从数据库中删除 来宾 用户。
启用变更数据捕获。
参与数据库镜像操作。
删除主文件组、主数据文件或日志文件。
重命名数据库或主文件组。
运行 DBCC CHECKALLOC。
运行 DBCC CHECKCATALOG。
将数据库设置为 OFFLINE。
将数据库或主文件组设置为READ_ONLY。
权限
任何用户可以在 tempdb 中创建临时对象。 用户只能访问自己的对象,除非他们收到其他权限。 可以撤销 tempdb 的连接权限以防止用户使用 tempdb,但不建议这样做,因为某些例程作需要使用 tempdb。
相关内容
sys.master_files(Transact-SQL)