1、区段

  区段(extent)是用来为表和索引分配空间的基本存储单元。它由8个连续的64KB数据页组成。

  基于区段(而不是实际使用空间)分配空间的概念的要点:

  1.   一旦区段已满,那么下一记录将要占据的空间不是记录的大小,而是整个新区段的大小。一次分配一个区段而不是分配一个记录。
  2.   通过预分配空间,SQL Server节省为每个记录分配新空间的时间。

   向当前分配的区段添加了过多的行就要占用整个区段,看起来是一种浪费,但是这种方法浪费的空间不多。但是,这些浪费的空间会累加,特别是在碎片较多的环境中。

  占据所有空间的好处是SQL Server省去了一些分配时间的系统开销,不需在每次写入行时都考虑分配问题,SQL Server仅仅当需要新区段时才处理额外的空间分配。

  不要将区段占用的空间和数据库占用的空间想混淆,分配给数据库的那些空间就是磁盘驱动器将要减少的可用空间。区段仅仅是在又数据库保留的整个空间内再次进行分配的方式。

  2、页

  页是特定区段中的分配单元。每个区段包含8页。

  也是在到达实际数据行前所能达到的最后一个存储级别。尽管每个区段中的页数是固定的,但是每一页中的行数不是固定的。这取决于行的大小,而行的大小是可以变化的。可以把页看做是表行和索引行数据的容器。通常不允许跨行。

  常用的页类型:

  1、数据页:数据也是不需解释的-它们是表中的实际数据,但任何没有用text in row选项、varchar(max)或varbinary(max)定义的BLOB数据除外。

  2、索引页:索引页也是相当直观-它们既包括非群集索引的非页级和页级页,又包括群集索引的非页级页。

  在SQL SERVER中,存储的最小单位是页。SQL SERVER对于页的读取,要么整个读取,要么完全不读取,没有折中。

  数据库页的大小是8K,实际能够存储的数据量为1024*8=8192-页头(96)-行偏移(36)=8060字节。

  页拆分

  当页满时,它会进行拆分。这意味着多个新页被分配-也意味着现有页上又近半的数据被移到新页上。

  在使用群集索引时,会有例外。如果有一个群集索引,并且下一个插入的记录在物理上将作为表中的最后一个记录,那么创建一个新页,然后将该新行添加到这个新页中,而不需要重新定位任何现有数据。

  3、行

  行就是表中的一行记录。行最大可达8KB。除了8060字符限制外,还有最大1024标准列(非稀疏列)的限制,列就是表的一列数据,就是你理解的列。实际上,突破8060字符限制前用完列的情况不多见。1024提供了小于8字节的平均列宽度。1024个列,一个表通常才十几个列啊。当突破了1024个列时,就要运用到稀疏列。

  4、稀疏列

  稀疏列是SQL Server2008新引入的一种特殊的数据结构。它们主要用于处理重复的场景,其中的列只是偶尔会用到。大部分时候为空。许多时候,一旦遇到少量这类列,就意味着以后可能会遇到大量这类列。使用稀疏列,可以将单个表中允许的列的总数提高到30000。30000个列,什么概念?什么系统用得到这么多列。

  Image、text、ntext、geography、geometry、timestamp和所有用户自定义数据类型不能被标记为稀疏列。

SQL Server存储机制的更多相关文章

  1. sql server 存储机制

    1.区段 区段(extent)是用来为表和索引分配空间的基本存储单元.它由8个连续的64KB数据页组成. 基于区段(而不是实际使用空间)分配空间的概念的要点: 一旦区段已满,那么下一记录将要占据的空间 ...

  2. SQL Server存储机制二

    http://blog.csdn.net/ltylove2007/article/details/21084585 http://www.cnblogs.com/anding/p/3254674.ht ...

  3. SQL SERVER存储引擎——04.数据

    4. SQL SERVER存储引擎之数据篇 (4.1)文件 (0)主数据文件.mdf初始文件大小至少为3MB,次要数据文件.ndf初始大小,同日志文件一样至少为512KB: (1)SQL SERVER ...

  4. SQL Server存储ntext截断问题

    SQL Server存储ntext截断问题   最近遇到一个问题:将大文本存储到数据库的时候,查询出来的文本却被截断了. 最后百度发现,作者提出 sql server management studi ...

  5. 转 一篇关于sql server 三种恢复模式的文章,从sql server 的机制上来写的,感觉很不错,转了

    简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确 ...

  6. SQL Server 锁机制 悲观锁 乐观锁 实测解析

    先引入一些概念,直接Copy其他Blogs中的,我就不单独写了. 一.为什么会有锁 多个用户同时对数据库的并发操作时会带来以下数据不一致的问题: 1.丢失更新 A,B两个用户读同一数据并进行修改,其中 ...

  7. SQL Server 存储中间结果集

    在SQL Server中执行查询时,有一些操作会产生中间结果集,例如:排序操作,Hash Join和Hash Aggregate操作产生的Hash Table,游标等,SQL Server查询优化器使 ...

  8. SQL Server 存储(1/8):理解数据页结构

    我们都很清楚SQL Server用8KB 的页来存储数据,并且在SQL Server里磁盘 I/O 操作在页级执行.也就是说,SQL Server 读取或写入所有数据页.页有不同的类型,像数据页,GA ...

  9. SQL Server 存储(3/8):理解GAM和SGAM页

    我们知道SQL Server在8K 的页里存储数据.分区就是物理上连续的8个页.当我们创建一个数据库,数据文件会被逻辑分为页和区,当用户对象创建时,页会分配给它用来存储数据.GAM(Global Al ...

随机推荐

  1. javascript优化--01高质量编码

    javascript的浮点数: Javascript的数字都是双精度浮点数: 64位编码数字: 能表达53位精度的整数: 进行位运算时会隐式地转化为32位整数(0,1序列)后计算: 浮点数运算可能会有 ...

  2. js:数据结构笔记14--高级算法

    动态规划: 递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题: 动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案: function dynFib(n) { ...

  3. 【BZOJ】1854: [Scoi2010]游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1854 题意:n个数据,每个数据有两个属性,要求取一些数据且每个数据取一个属性使得组成连续的一段单调递 ...

  4. COJ966 WZJ的数据结构(负三十四)

    WZJ的数据结构(负三十四) 难度级别:C: 运行时间限制:20000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给一棵n个节点的树,请对于形如"u  ...

  5. BZOJ3513: [MUTC2013]idiots

    Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数.接下来若干行描述T组数据,每组数据第一行是n ...

  6. oracle系列--第二篇 oracle下载

    对于很多新手来说,包括我之前也是这样,知道oracle数据库,但是就是不知道在哪里下载.有时候,上到oracle官方网站上面都找不到下载的地方. 这不像apache里面那么直接,我们想下载如:tomc ...

  7. Strong TLS configuration on servers

    - Use certificates with at least sha-256 hash algorithms (including intermediate certificates).- Use ...

  8. java正则表达式过滤html标签

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** * <p> * Title: HTML相关的正则表达 ...

  9. dpi,ppi,dip,dp,px和sp

    一 基本概念 1. dpi (dots per inch)每英寸多少点:ppi( Pixel per inch),每英寸像素数.针对显示器的设计时,dpi=ppi. 2. dip (device in ...

  10. NSQ:分布式消息队列学习记录

    参考资料: NSQ:分布式的实时消息平台 初识NSQ分布式实时消息架构 深入NSQ之旅 nsq topic和channel的区别