第3周 区_SQL Server中管理空间的基本单位
原文:第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

在接下来的培训中,这些知识会作为性能调优和故障排除的先决条件。希望今天的培训你有所享受,下星期我回来的时候,我们会学习数据页的一些限制,还有我们如何和它们作战。请继续关注!

posted on 2015-05-05 09:39 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4478307.html

第3周 区_SQL Server中管理空间的基本单位相关推荐

  1. 哈希分区和顺序分区_SQL Server中的哈希分区

    哈希分区和顺序分区 In SQL Server, when talking about table partitions, basically, SQL Server doesn't directly ...

  2. sql server 转发_SQL Server中的转发记录性能问题

    sql server 转发 This article discusses the Forwarded Records and its performance issues for heap table ...

  3. sql隐式转换_SQL Server中的隐式转换

    sql隐式转换 This article will provide an overview of SQL Server implicit conversion including data type ...

  4. sql分区表上创建索引_SQL Server中分区表和索引的选项

    sql分区表上创建索引 介绍 (Introduction) I work for a large, multinational financial institution. Like most com ...

  5. kerberos验证_SQL Server中的服务主体名称和Kerberos身份验证概述

    kerberos验证 This article gives an overview of Service Principal Name (SPN) for using the Kerberos aut ...

  6. sql 时态表的意义_SQL Server中的时态表

    sql 时态表的意义 Temporal tables have been a feature of SQL Server since version 2016. SQL Server professi ...

  7. 可以储存照片的字段类型是_sql server 中 哪个字段类型可以储存图象?

    展开全部 可以将图片上传到指定目录并将路径记录在数据库中,要用的时候再从数据库中取路径根据路径找到图片.e68a84e8a2ad62616964757a686964616f31333234303663 ...

  8. cte公用表表达式_SQL Server中的CTE; 使用公用表表达式解决重新编制标识符列的问题

    cte公用表表达式 Since we know that the SQL CTE (common table expression) offers us a tool to group and ord ...

  9. java代码转置sql数据_SQL Server中的数据科学:数据分析和转换–使用SQL透视和转置

    java代码转置sql数据 In data science, understanding and preparing data is critical, such as the use of the ...

最新文章

  1. Ubuntu18彻底删除MySQL5.7数据库
  2. 看完 50000 张专辑封面,AI 设计师开始疯狂输出
  3. [笔记].关于在Quartus II 11.0无法正常使用SignalTap的解决方法
  4. [GDUT 决赛]--GCD,LCM——我是好人(数论)
  5. 解决Kali Linux没有声音
  6. android中的ContentProvider实现数据共享
  7. SHELL编程(一)---------hello world
  8. my97DatePicker 自定义扩展方法(实现备忘录)
  9. list删除某个元素_java list 删除元素
  10. conda环境内安装gcc4.8.5(无root权限)
  11. 图像分类python代码_20行代码:Serverless架构下用Python轻松搞定图像分类
  12. Layui图片上传限制一张的问题
  13. map 转 json格式string字符串
  14. R语言开发软件包(打包)
  15. 自动获取关键词插件,双标题关键词插件
  16. 超详细!JDK 8 下载、安装和环境配置(macOS 和 Windows 版本)
  17. 数据库sql脚本--省市县生成
  18. 计算机操作系统(第四版)课后习题答案
  19. 华为云主机被植入挖矿,主机变肉鸡破解实录。
  20. NASM 汇编编程(八)int 10h

热门文章

  1. [转载] 晓说——第15期:揭秘欧洲列强恩仇录
  2. Titanium Developer
  3. Exchange邮件服务器实现外部邮件的收发
  4. CCNA认证指南note 01
  5. 【SDOI2017】天才黑客
  6. python学习第一周(1)
  7. K8S-网络模型、POD/RC/SVC YAML 语法官方文档
  8. 《中国人工智能学会通讯》——10.22 能源互联网时代
  9. python binary lib on win/各种python库的二进制包
  10. python windows时间同步工具