SQL Server中TempDB管理(version store的逻辑结构)

前面几篇博文已经初步介绍了版本存储区,现在我们来了解一下它的逻辑结构,看看它究竟是如何储存不同结构的表格和索引行的。其实我们只要看一下DMV
sys.dm_tran_version_store这个DMV就够了.

这个DVM视图显示了版本存储区全部逻辑结构。有两点值得注意。第一,版本存储区也和数据页面索引页面一样由8k大小的页组成。这些页存在缓冲池中,可以在TempDB面临内存压力时被写入磁盘。第二,版本存储区存储的是完整的二进制文件,就像在数据页存储的一样。这种二进制文件分为前后两个部分,然后在SQL
Server内部会对其进行组合。这使得行版本存储独立于它所属的对象的架构,即一个储存区的页可以存储来自不同表不同索引的行,甚至可能来自同一实例下的不同数据库。换句话说,版本存储区是一个SQL
Server实例下公用的。和数据页和索引页一样,在内存紧张的时候版本存储页也会从缓冲池中被清除。

如果查看名为sys.dm_tran_version_store的DMV会发现,我们会发现版本行有很多原始数据或索引页面所没有的的新属性,如database-id,行长度等。您可能会问,行版本同样受到SQL
Server最大行长度8060的限制,那么它是如何存储原始数据行(最大行长度也是8060)并增长新属性的呢。答案是,数据行在版本存储页实际上被分成了2行,只是在DMV视图中表现成一大行。

下面是一个版本存储的例子。事务57已经更新了三个不同的行,同时事务58只更新1行内容。请注意,如果一个事务中多次更新同一行,只会创建一个行版本,因为对其他事务来说,它从一开始就持有了X锁。

transaction_sequence_num
version_sequence_num database_id

------------------------
-------------------- -----------

57&">nbsp;                     1                    9

57                      2                    9

57                      3                    9

58                      1                    9

rowset_id            status min_length_in_bytes

--------------------
------ -------------------

72057594038321152    0     
12

72057594038321152    0     
12

72057594038321152    0     
12

72057594038386688    0     
16

record_length_first_part_in_bytes

---------------------------------

29

29

29

33

record_image_first_part

--------------------------------------------------------------------

0x50000C0073000000010000000200FCB000000001000000270000000000

0x50000C0073000000020000000200FCB000000001000100270000000000

0x50000C0073000000030000000200FCB000000001000200270000000000

0x500010000100000002000000030000000300F800000000000000002E0000000000

record_length_second_part_in_bytes    record_image_second_part

----------------------------------
----------------------

0                                  NULL

0                                  NULL

0                                  NULL

0                                  NULL

时间: 2024-10-31 17:23:45

SQL Server中TempDB管理(version store的逻辑结构)的相关文章

SQL Server中TempDB管理(version store的逻辑结构)

原文:SQL Server中TempDB管理(version store的逻辑结构) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/ http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/12/31/managing-tempdb-in-sql-server-tempdb-basics-version-store-logical-s

SQL Server中TempDB管理(版本存储区的一个example)

原文:SQL Server中TempDB管理(版本存储区的一个example) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/ http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/12/31/managing-tempdb-in-sql-server-tempdb-basics-version-store-simple-examp

SQL Server中TempDB管理(版本存储区的一个example)

我们从一个例子开始来了解版本存储区.本例中数据库启用RCSI(使用行http://www.aliyun.com/zixun/aggregation/9591.html">版本控制的已提交读隔离级别)和SI(快照隔离级别). 当数据库启用了RCSI或者SI时,每当行有更新时 就会创建一个行版本.此行版本在版本存储器保存到不需要为止. 那么SQL Server什么时候不再保存这个行版本呢?您可能联想到一些相关的问题,比如,如果不回收(删除)行版本会有什么影响?一次回收一个还是一组行版本?每 个

SQL Server中tempdb的管理

原文:SQL Server中tempdb的管理  资料来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/ http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/12/21/tempdb-basics.aspx 我们推出了一系列的关于TempDB基础,监控和问题调试的博文,也建议大家阅读有开发和测试部门给出的白皮书http://www.mic

SQL Server中Tempdb initial size和dbcc shrinkfile的使用说明

在使用sql server时您可能遇到过下面的情况,tempdb的数据文件初始大小为3mb, 随着对tempdb的使用,tempdb文件逐渐变得很大(例如30GB),导致了磁盘空间不足. 此时您需要立刻释放tempdb文件所占用的空间,这时你会有两个选择: 重启SQL Server.大家都知道SQL Server重启时会创建一个新的tempdb.由于tempdb的initial size并不会随着文件大小的增长而增长,重启SQL Server就会创建一个新的3MB的tempdb. 使用DBCC命

SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)

原文:SQL Server中的TempDB管理--TempDB基本知识(为什么需要版本存储区) 参考资料来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive/tags/tempdb/ http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/12/22/managing-tempdb-in-sql-server-tempdb-basics-verison-store.as

SQL Server 中的事务(含义,属性,管理)

含义: 事务要有非常明确的开始和结束点,SQL Server 中的每一条数据操作语句,例如SELECT.INSERT.UPDATE和DELETE都是隐式事务的一部分.即使只有一条语句,系统也会把这条语句当做一个事务,要么执行所有的语句,要么什么都不执行. 事务开始之后,事务所有的操作都会写到事务日志中,写到日志中的事务,一般有两种:一是针对数据的操作,例如插入.修改和删除,这些操作的对象是大量的数据;另一种是针对任务的操作,例如创建索引.当取消这些事务操作时,系统自动执行这些操作的反操作,保证系

《SQL Server企业级平台管理实践》读书笔记——SQL Server中数据文件空间使用与管理

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server中数据文件空间使用与管理 1.表和索引存储结构 在SQL Server2005以前,一个表格是以一个B树或者一个堆(heap)存放的.每个B树或者堆,在sysindexes里面都有一条记录相对应.SQL Server2005以后,引入了分区表的概念(Table Partition),在存储组织上,现有的分区基本上替代了原来表格的概念,原先表的概念成为了一个逻辑概念.一个分区就是一个B树或者一个堆.而一张表格则是一个

《SQL Server企业级平台管理实践》读书笔记——SQL Server中收缩数据库不好用的原因

原文:<SQL Server企业级平台管理实践>读书笔记--SQL Server中收缩数据库不好用的原因 数据库管理员有时候需要控制文件的大小,可能选择收缩文件,或者把某些数据文件情况以便从数据库里删除. 这时候我们就要使用到DBCC SHRINKFILE命令,此命令的脚本为: DBCC SHRINKFILE ( { file_name | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATE