SQL Server TempDB

TempDB是一个系统数据库,

只有simple模式,

每次服务器重启后都会按照Model库的配置重新创建

TempDB只有一个文件组 Primary

作用:存放局部临时表 全局临时表 表变量 及一些临时用法(如hash 表)

主要存储三类对象:用户对象 内部对象 和版本存储

权限:默认所有用户都具有访问TemDB的权限

SQL Server2012开始 TempDB已经可以配置在故障转移中

用户临时对象:

1. 在TempDB中创建的实体表和上面的索引

2. 全局临时表及上面的索引,以##开头

3. 局部临时表及上面的索引,以#开头

4. 表变量,以@开头

临时表和表变量:       

1. 统计信息:临时表和表变量的主要区别在于统计信息,表变量不会创建统计信息,或者说,统计信息要么为0,要么为1。优化器永远会把表变量当作里面只有1条数据或者没有数据的表对待。可以通过查看执行计划中的预估函数

2. 索引:很多人误以为表变量不能创建索引,其实不然,由于它是变量,所以需要定义,也正因为如此,索引也需要预先定义,在定义了表变量以后,再使用就不能添加索引了。另外表变量只能创建主键或者唯一约束。但是即使有主键或者约束,也不会因此具有统计信息

3. 架构修改:临时表可以修改,但是架构修改不会出现在表变量上面

4. 存放的地方:都存放在TempDB 中,可以通过sys.dm_db_session_space_usage的DMV来查看TempDB的空间使用情况

内部临时对象:

                用于在查询过程中存储临时数据的对象,如Sorts 假脱机 Hash 关联和游标。

                可以使用sys.dm_db_seesion_space_usage中internal_object_alloc_page_count列来查看,其中比较常见的是Worktable

版本存储:

                从sql Server 2005开始,出现的乐观并发模式,这类模式会借用TempDB来存放修改前的数据。 每一行数据被修改前,都会在TempDB中创建一个相同的行

 TempDB上的常见问题及监控

参考书籍:

SQL Server性能优化与管理的艺术

原文地址:https://www.cnblogs.com/qianlixing/p/6695032.html