mssql sqlserver数据库之Tempdb简介及说明


摘要:
mssql sqlserver已经发布了近三十年,在最近十几个年头里面,我一直是用sqlserver至今,
在最近几个版本里面,我看见了产品中的大量的变化,但是万变不离其宗,每一个sqlserver版本中,都存在一个数据库”Tempdb”,
下文让我们着重介绍一下”TempDb”


“Tempdb”,又称之为“临时数据库”。当听到临时两个字,很多人可能会想到临时数据存放入此,其实temp是指数据库中临时创建的临时表,临时过程存在地,下文将从以下几个方面阐述tempdb。
—————————————-

tempdb适用场景

tempdb应用于存储了三种类型的对象:
用户对象、内部对象、快照存储库,主要用于基于磁盘的表的快照隔离(与用于内存优化表的快照隔离相反)。
———————————————————————
用户对象
本地临时表
全局临时表
本地临时存储过程
全局临时存储过程
———————————————————————
您可以通过使用#或##放入对象名称前面,在任何数据库中创建临时表,
当当前连接被删除时,临时表会自动清除,
当sqlserver被重启或关闭时,tempdb数据库被删除并重新创建。
———————————————————————–
例:需要一个可用于所有连接的表,当sqlserver重启后,数据自动消失,我们根据
tempdb的特性,可以将信息存放于tempdb数据库中。
———————————————————————–

注意事项:
临时表特征是表变量。在功能使用上表变量和临时表拥有相同的操作方法和属性。
表变量也被存储与tempdb数据库中

————————————————————————–
内部对象
tempdb数据库中的内部对象是SQL Server在处理查询时创建的工作表。
这些工作表可用于假脱机操作、排序空间、散列表。
对于何时以及如何创建这些内部对象,我们无法进行操作。
例:发现查询运行缓慢,并且其计划显示使用假脱机操作符,此时可以通过创建临时表来避免假脱机操作。
如果运行缓慢的查询正在执行散列连接或散列聚合,则可以构建适当的索引使优化器选择非散列运算符,也可以使用hint来强制优化器选择指定的计划。
———————————————————————————————————————————————
数据快照
数据库事务中的快照,会将快照相关数据存储于tempdb数据库中。 



tempdb同其它数据库对比

1.创建方式不同,每次重启DB都创建

   SELECT create_date AS [tempdb创建时间]  FROM sys.databases 
   WHERE name ='tempdb'; 
 

mssql_sqlserver_tempdb创建时间

mssql_sqlserver_tempdb创建时间


2.占用缓存不同
tempdb数据库,自SQL Server 2005开始,当创建临时用户对象时,SQL Server为IAM和一个数据页面缓存一个页面,并将这些页面与查询计划相关联。所以当执行相同的查询时,有一些空间已经可用,并且不需要分配。
tempdb,SQL Server缓存一个IAM页面和一个8页的完整页面。
通过查看DMV sys.dm_db_file_space_usage,您可以看到每个tempdb的占用空间信息。
在SQL Server 2014之前,此视图将始终向您显示tempdb中使用的空间,但截至2014年,它将显示当前数据库的信息,除非您使用三部分名称:

 SELECT file_id,
user_object_reserved_pa​​ge_count,
internal_object_reserved_pa​​ge_count,
version_store_reserved_pa​​ge_count 
FROM tempdb.sys.dm_db_file_space_usage; 

3.数据重启后恢复方式不同
tempdb重新创建,别的数据库都是根据日志的方式恢复数据库