您的位置:首页 > 数据库

SQL Server 2012笔记分享-18:理解并设置tempdb数据库

2014-06-13 11:05 423 查看
TEMPDB简介
tempdb 系统数据库是一个全局资源(一个实例一个tempdb),可供连接到 SQL Server 实例的所有用户使用,并可用于保存下列各项:
? 显式创建的临时用户对象,例如全局或局部临时表、临时存储过程、表变量或游标。
? SQL Server 数据库引擎创建的内部对象,例如,用于存储假脱机或排序的中间结果的工作表。
? 由使用已提交读(使用行版本控制隔离或快照隔离事务)的数据库中数据修改事务生成的行版本。
? 由数据修改事务为实现联机索引操作、多个活动的结果集 (MARS) 以及 AFTER 触发器等功能而生成的行版本。
tempdb 中的操作是最小日志记录操作。 这将使事务产生回滚。 每次启动 SQL Server 时都会重新创建 tempdb,从而在系统启动时总是保持一个干净的数据库副本。 在断开联接时会自动删除临时表和存储过程,并且在系统关闭后没有活动连接。 因此 tempdb 中不会有什么内容从一个 SQL Server 会话保存到另一个会话。 不允许对 tempdb 进行备份和还原操作。
Tempdb默认情况下使用的是简单模式,在简单模式下记录最小日志。



TEMPDB的默认配置
对于不同版本的 SQL Server,这些文件的大小可能略有不同。



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



在 SQL Server 中,tempdb 性能以下列方式进行提高:
? 可能缓存临时表和表变量。 缓存允许删除和创建临时对象的操作非常快速地执行,并减少页分配的争用问题。
? 分配页闩锁协议得到改善。 从而减少使用的 UP(更新)闩锁数。
? 减少了 tempdb 的日志开销。 从而降低了 tempdb 日志文件上的磁盘 I/O 带宽占用。
? 在 tempdb 中分配混合页的算法得到改善。
任何用户都可以在 tempdb 中创建临时对象。 用户只能访问自己的对象,除非他们获得更多的权限。 可以撤消对 tempdb 的连接权限以阻止用户使用 tempdb,但是不建议这样做,因为一些例行操作需要使用 tempdb。
TEMPDB的默认权限如图。



参考:http://msdn.microsoft.com/zh-cn/library/ms190768.aspx
重启服务器或者重启SQL server服务可以起到清理TEMPDB的作用,如图。
目前tempDB的临时表。



下图是重启SQL server服务之后的临时表情况。



如果tempdb占用了太多的空间,我们还可以针对tempdb进行收缩操作。
收缩的时候可以针对整个数据库进行收缩,也可以针对某个tempdb的文件进行收缩,如图。



下面是一个收缩文件的例子。



具体可以参考:如何收缩 SQL Server 中的 Tempdb 数据库 http://support.microsoft.com/kb/307487/zh-cn 其他可供参考的有价值的文档。
解决 tempdb 中磁盘空间不足的问题 http://technet.microsoft.com/zh-cn/library/ms176029(v=sql.105).aspx tempdb 容量规划 http://technet.microsoft.com/zh-cn/library/ms345368(v=SQL.105).aspx Optimizing tempdb Performance http://technet.microsoft.com/en-us/library/ms175527(v=SQL.105).aspx ======================================================================
关键概念
如果系统运行过程中 tempdb因需要自动增长了,SQL Serve不会记住增长后的大小,重启服务后仍然恢复到初始大小,但如果用户使用了手工调整tempdb的大小,重启服务SQL Server会把tempdb重建为用户指定大小
当系统自动调整tempdb大小时,对文件的读写将暂时的阻塞 。
所以如果我们预知tempdb将会增加到某个大小时,可以自行调整,从而避免性能下降。
tempdb对IO的要求比较高,最好分配到高IO的磁盘上且与其他的数据文件分到不用的磁盘上,以提高读写效率.
tempdb也分成多个文件,一般会根据CPU来分,几个CPU就分几个tempdb的数据文件. 多个tempdb文件可以提高读写效率并且减少IO活动的冲突.
有时候我们会注意到tempdb占用很大的空间,但是可用的空间会比较低时,会想到shrink数据库来释放磁盘空间, 此时要小心了,可能会影响到性能.
参考博客
有关Tempdb数据库大小问题
http://www.cnblogs.com/Frank-Zhao/archive/2012/07/23/2605042.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tempdb