热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TempDB管理(versionstore的逻辑结构)

version

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

其实我们只要看一下DMV就够了.

    sys.dm_tran_version_store

    这个DVM视图显示了版本存储区全部逻辑结构。有两点值得注意。

    第一,版本存储区也和数据页面索引页面一样由8k大小的页组成。这些页存在缓冲池中,可以在TempDB面临内存压力时被写入磁盘。

    第二,版本存储区存储的是完整的二进制文件,就像在数据页存储的一样。这种二进制文件分为前后两个部分,然后在SQLServer内部会对其进行组合。

    这使得行版本存储独立于它所属的对象的架构,即一个储存区的页可以存储来自不同表不同索引的行,甚至可能来自同一实例下的不同数据库。

    换句话说,版本存储区是一个SQLServer实例下公用的。

    和数据页和索引页一样,在内存紧张的时候版本存储页也会从缓冲池中被清除。

    如果查看名为sys.dm_tran_version_store的DMV会发现,我们会发现版本行有很多原始数据或索引页面所没有的的新属性,如database-id,行长度等。您可能会问,行版本同样受到SQLServer最大行长度8060的限制,那么它是如何存储原始数据行(最大行长度也是8060)并增长新属性的呢。

    答案是,数据行在版本存储页实际上被分成了2行,只是在DMV视图中表现成一大行。

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

      transaction_sequence_num
      version_sequence_num database_id
      ------------------------
      -------------------- -----------
      57 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

      资料来自:

      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-structure.aspx

      文章转载自:

      http://blogs.msdn.com/b/apgcdsd/archive/2012/03/30/sql-server-tempdb-version-store.aspx

      文章经作者授权转载,版权归原文作者所有



      推荐阅读
      • 一安装配置1.配置文件mongod.cfg(路径:D:\data\config\mongod.cfg)如下:    systemLog:destination ... [详细]
      • 如何实现Percona Mysql Galera多读写集群的部署
        本篇文章给大家主要讲的是关于如何实现PerconaMysqlGalera多读写集群的部署的内容,感兴趣的话就一起来看看这篇文章吧,相信看完如何实现PerconaMysq ... [详细]
      • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
      • lazarus使用sqlite3遇到特定字符时出现乱码的Bug
        lazarus使用zeosDB控件时发现SQLite一个奇怪的现象,应用程序编译为win64时,如果输入中国2022中国时出现乱码,win32和linux64正常,开始怀疑的sql ... [详细]
      • 目录结构如下:Nginx基础知识NginxHTTP服务器的特色及优点Nginx的主要企业功能Nginx作为web服务器的主要应用场景包括:Nginx的安装安装环境 ... [详细]
      • 如何理解MyBatis动态SQL
        本篇内容主要讲解“如何理解MyBatis动态SQL”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解M ... [详细]
      • nacos的github的链接:https:github.comalibabanacosreleasestag1.4.1nacos的ZIP的链接:htt ... [详细]
      • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
      • 让SQL Server 2008默认使用Report Builder 2.0做报表设计器
        由于SQLServer2008比ReportBuilder2.0先发布,所以默认情况下,在SSRS2008中的报表管理器中单击“报表生成器”,打开的是ReportBuilder1.0版本 ... [详细]
      • oracle text db2,从Oracle 到DB2(一)
        在实际的软件项目的开发过程中,特别是在企业的应用系统集成(EAI)项目中广大开发人员经常遇到不同关系型数据库之间的数据移植问题。笔者根据自己在工作中的不同数据库数据移 ... [详细]
      • 闲话少说,直接切入主题,之前也是用一下其他的IDE,但是总是在vi和IDE之间来回切换,比较麻烦,于是乎,找了几个插件亲身体验,功能挺不错;1、安装vi7.0vim的官方网站是:www.vmuni ... [详细]
      • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
      • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
        本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
      • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
      • 单页面应用 VS 多页面应用的区别和适用场景
        本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
      author-avatar
      璨然2502869273
      这个家伙很懒,什么也没留下!
      PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
      Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有