第3周 区_SQL Server中管理空间的基本单位
哇哦,SQL Server性能调优培训已经进入第3周了!同时你已经对SQL Server内核运行机制有了很好的认识。今天我会讲下SQL Server中的区管理,因为这是个很重要的话题,我们会在第23周探讨TempDb。在最高级别来讲,区就是一组8张8k大小的页。因此一个区始终是64k的块(连续页)。SQL Server内部施行2类区:
- 混合区
- 统一区
混合区和统一区
在混合区的8个页可以属于像表和索引的不同数据库对象。这也是说混合区可以指向不同的数据库对象。在另外一方面,在统一区里所有的8个页面是属于同个数据库对象。现在的问题是,为什么SQL Server做出这样的区别?这个基本上是个与历史有关的问题。我们来解释下。
在上一世纪存储是非常,非常贵的。那是的目标就是尽可能有效的使用存储。因为新表和索引的第1个8页总是分配在混合区。这也意味着你的表或索引刚开始创建时总在8k的块(混合区)里。这样的话小表保持很小的存储占用。你正在尽可能有效的使用存储。当你的数据库对象需要分配第9个页时,SQL Server会分配整个统一区给那个数据库对象。它的大小从8kb 变成了72kb,到第17个页它的增长从72kb 变成了136kb,然后按此规律继续增长。现在你会对那个事实表示摇头,但在上个世纪,这曾是非常重要的设计选择。下面的图片会展示了一个区看起来是什么样(在一个非常简化的方式下)。
区管理
现在的问题是SQL Server如何管理这些区?想象下你有一个1TB大小的数据库,这会给你巨大数量的区。SQL Server这里使用2个特殊的页来管理,同样它们也是8kb 的大小。
- 全局分配映射表(GAM: Global Allocation Map Pages)
- 共享全局分配映射表(SGAM: Shared Global Allocation Map Pages)
统一区始终由GAM页管理。SQL Server使用8000 bytes 的GAM页,它给你64000位。(8000 * 8)。在那个巨大的掩码位图里,每个位代表一个统一区。如果那个位标记为1,表示那个统一区是空的,如果标记为0,表示那个统一区已被使用。这也意味着你4G区间的数据里只能有一个GAM页来管理(64000 * 64 / 1024 /1024)。因此每隔4G的数据文件都会有一个GAM页。这些对SGAM页也是对的。一个SGAM页也只能管理4GB的数据,因为你只有64000位可用。
当你在表里插入一条新记录,SQL Server会通过SGAM页找至少有一页空闲的混合区来插入数据。如果你的表/索引大于64kb,SQL Server会通过GAM页直接找空闲的统一区来插入数据。很简单,是不是?
在第23周,当我们探讨TempDb时,在我们同时在TempDb里尝试创建巨大数量的临时数据时,这个会引起严重的性能问题。到时我们会提到通过修改TempDb数据的一些设置来克服这个问题。
小结
在这周的性能调优培训里我们探讨了SQL Server中的区和区管理。到现在应该已经有很好并结实的SQL Server内部构造理解。
如果你想学习更多的区知识,我推荐下列的SQL Server Quickies:
- SQL Server Quickie #2:Extents
- SQL Server Quickie #3:Allocation Units
- SQL Server Quickie #4 : IAM Pages
在接下来的培训中,这些知识会作为性能调优和故障排除的先决条件。希望今天的培训你有所享受,下星期我回来的时候,我们会学习数据页的一些限制,还有我们如何和它们作战。请继续关注!
第3周 区_SQL Server中管理空间的基本单位的更多相关文章
- 第3/24周 区_SQL Server中管理空间的基本单位
哇哦,SQL Server性能调优培训已经进入第3周了!同时你已经对SQL Server内核运行机制有了很好的认识.今天我会讲下SQL Server中的区管理,因为这是个很重要的话题,我们会在第23周 ...
- 第2周 页_SQL Server 中数据存储的基本单位
原文:第2周 页_SQL Server 中数据存储的基本单位 上周通过探讨SQL Server如何执行一个查询奠定了基础.我也在那里提到页是8kb的缓存.今天我们对页进行进一步集中探讨,从性能调优角度 ...
- 第2/24周 页_SQL Server 中数据存储的基本单位
上周通过探讨SQL Server如何执行一个查询奠定了基础.我也在那里提到页是8kb的缓存.今天我们对页进行进一步集中探讨,从性能调优角度挖掘出更多的细节. 页是SQL Server的基础,在SQL ...
- 第十七周翻译-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志
SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 作者:Tony Davis,2012/01/27 翻译:赖慧芳 译文: 该系列 本文是Stairway系列的一部分:SQL ...
- 页和区 sql server
原文地址:http://msdn.microsoft.com/zh-cn/library/ms190969.aspx SQL Server 中数据存储的基本单位是页.为数据库中的数据文件(.mdf 或 ...
- SQL Server中的TempDB管理——TempDB基本知识(为什么需要版本存储区)
原文:SQL Server中的TempDB管理--TempDB基本知识(为什么需要版本存储区) 参考资料来自: http://blogs.msdn.com/b/sqlserverstorageengi ...
- SQL Server中TempDB管理(版本存储区的一个example)
原文:SQL Server中TempDB管理(版本存储区的一个example) 原文来自: http://blogs.msdn.com/b/sqlserverstorageengine/archive ...
- 第17周翻译:SQL Server中的事务日志管理的阶梯:第5级:在完全恢复模式下管理日志
来源:http://www.sqlservercentral.com/articles/Stairway+Series/73785/ 作者:Tony Davis, 2012/01/27 翻译:刘琼滨. ...
- 第16周翻译:SQL Server中的事务日志管理,级别3:事务日志、备份和恢复
源自: http://www.sqlservercentral.com/articles/Stairway+Series/73779/ 作者: Tony Davis, 2011/09/07 翻译:刘琼 ...
随机推荐
- opencv如何载入内存中的图像文件
其实很简单,cv::imdecode 支持 std::vector<uchar>的,只要把char* 转 std::vector<uchar>就行了.用 std::vector ...
- C++智能指针--weak_ptr
weak_ptr是对对象的一种弱引用,它不会添加对象的引用计数.weak_ptr和shared_ptr之间能够相互转换.shared_ptr能够直接赋值给week_ptr,week_ptr可通过调用l ...
- mina的编码和解码以及断包的处理,发送自己定义协议,仿qq聊天,发送xml或json
近期一段时间以来,mina非常火,和移动开发一样.异常的火爆.前面写了几篇移动开发的文章,都还不错.你们的鼓舞就是我最大的动力.好了,废话少说.我们来看下tcp通讯吧. tcp通讯对于java来说是非 ...
- 近期在调用 calendar.js 的时候出现中文乱码! 解决方式
近期写一个小项目的时候:在调用 calendar.js 的时候出现中文乱码! 如图所看到的: 原因在于: 我的jsp 页面,指定的是 UTF-8 编码,然而,调用的 calendar.js 的编码确 ...
- Lambda高手之路第三部分
转http://www.cnblogs.com/lazycoding/archive/2013/01/06/2847587.html 背后的秘密-MSIL 通过著名的LINQPad,我们可以更深入的查 ...
- 【Windows Phone设计与用户体验】关于移动产品的Loading用户体验的思考
作为一款运行在移动端上的产品,必定会有一些耗时的操作.为了具有良好的用户体验,Loading效果是必不可少的,而什么形式的Loading才会有良好的用户体验? Loading形式简单分为两类: 一.遮 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- 那些年我们装过的数据库---盘点sqlserver2008安装时遇到的各种的问题(持续更新中)
给自己安过sqlServer2008,也给好多同学安过sqlServer2008,期间遇到了好多不同的另人心烦的问题,在这里整理一下,(涉及到的部分方法是在网上找的,有些也没试过,仅仅是在这里整理一下 ...
- ajaxterm不好还是gateone好
http://pkgs.org/centos-5-rhel-5/epel-i386/Ajaxterm-0.10-8.el5.noarch.rpm.html Web SSH 客户端Ajaxterm安装 ...
- keil提示:missing ';' before 'XXX'但又找不到是哪里少了分号——已解决!
今天写一个51程序,keil在编译时总提示丢失了一个分号,但怎么都找不到是哪里丢失了分号,搞了一下午才解决问题,现在把经验在此分享,以求让他人不要犯同样的错误!提示信息为: LCD12864.H(20 ...