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

SQLServer中TempDB管理(versionstore的逻辑

原文: SQL Server中TempDB管理(version store的逻辑结构) 原文来自: http://blo


原文:
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-structure.aspx

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

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                      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


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




推荐阅读
  • ElasticSearch 集群监控与优化
    本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 本文详细介绍了流编辑器sed中的G、H、g、h命令,探讨了它们的工作原理及应用场景。通过实例解析和图解分析,帮助读者掌握这些高级命令的使用方法。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • 深入解析Spring启动过程
    本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
  • 软件工程课堂测试2
    要做一个简单的保存网页界面,首先用jsp写出保存界面,本次界面比较简单,首先是三个提示语,后面是三个输入框,然 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 2017-2018年度《网络编程与安全》第五次实验报告
    本报告详细记录了2017-2018学年《网络编程与安全》课程第五次实验的具体内容、实验过程、遇到的问题及解决方案。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文探讨了在C语言编程中,如何有效避免多文件项目中的重定义问题,通过合理使用预处理器指令和extern关键字,确保代码的健壮性和可维护性。 ... [详细]
  • Windows 环境下安装 Git 并连接 GitHub 的详细步骤
    本文详细介绍了如何在 Windows 系统中安装 Git 工具,并通过配置 SSH 密钥实现与 GitHub 的安全连接。包括下载、安装、环境配置及验证连接等关键步骤。 ... [详细]
  • 本文详细介绍了如何在 Windows 7 操作系统上安装和配置 InfluxDB,这是一种专为处理时间序列数据设计的高性能数据库。 ... [详细]
  • 本文详细探讨了Laravel框架中的数据库操作,包括读写分离、事务处理、Eloquent ORM的使用、关联关系管理及性能优化技巧。 ... [详细]
  • 本文详细记录了《PHP与MySQL Web开发》第一章的学习心得,特别关注了PHP的基本构成元素、标记风格、编程注意事项及表单处理技巧等内容。 ... [详细]
author-avatar
凌微茵_686
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有