SQL Server数据库中的页影响数据库性能的表现

此文章主要向大家描述的是SQL Server数据库中的页影响数据库性能的表现,我们大家都知道无论哪个数据库,如果你需要对其性能进行优化的话,那么你必须要了解数据库内部的存储结构。

否则的话,很多数据库的优化工作无法展开。对于对于数据库管理员来说,虽然学习数据库的内存存储结构比较单调,但是却是我们必须攻下的一个堡垒。在SQL Server数据库中,数据页是其存储的最基本单位。系统无论是在保存数据还是在读取数据的时候,都是以页为单位来进行操作的。

 

一、数据页的基本组成。

如上图所示,是SQL Server数据库中页的主要组成部分。从这个图中可以看出,一个数据页基本上包括三部分内容,分别为标头、数据行和行偏移量。其中数据行存储的是数据本身,其他的标头与偏移量都是一些辅助的内容。对于这个数据页来说,笔者认为数据库管理员必须要了解如下的内容。

一是要了解数据页的大小。在SQL Server数据库中数据页的大小基本上是固定的,即每个数据页的大小都为8KB,8192个字节。其中每页开头都有一个标头,其占据了96个字节,用于存储有关页的信息。如这个页被分配到页码、页的类型、页的可用空间以及拥有这个页的对象的分配单元ID等等信息。不过值得庆幸的是,这些内容数据库都会自动管理与更新,不需要数据库管理员担心。数据库管理员只需要知道的是,这个数据页中最多可以用来保存数据的空间。

每个页的大小是8192个字节,扣除掉一些必要的开销(如标头信息或者偏移量所占用的空间),一般其可以用来实际存储数据的空间只有8000字节左右。牢记这个数字,对于后续数据库性能的优化具有很大的作用。详细的内容笔者在后续行溢出的部分会进行说明。

二是需要注意行的放置顺序。在每个数据页上,数据行紧接着标头按顺序放置。在页的末尾有一张行偏移表。对于页中的每一行,每个行偏移表都包含有一个条目。即如果业中的数据行达到100条的话,则在这个行偏移表中就对英100个条目。每个条目记录中记录对应行的第一个字节与页首的距离。

如第二个跳就记录着第二个数据行的行首字母到数据页页首的位置。由于每个数据行的大小都是不同的,为此这个行偏移表中记录的内容也是没有规律的。这里需要注意的是,行偏移表中的条目顺序与页中行的顺序是相反的。这主要是为了更方便数据库定位数据行。

二、大数据类型与行。

根据SQLServer数据库定义的规则,行是不能够跨页的。如上图所示,如果一个字段的数据值非常大,其超过8000字节。此时一个页已经不能够容纳这个数据。此时数据库会如何处理呢?虽然说在SQL Server数据库中,行是不能够跨页的。但是可以将行分成两部分,分别存储在不同的行中。所以说,对于大数据类型来说,是不受到这个页大小(或者说行大小)的限制的。根据上面的分析可以看出,一个数据页其最大可以用的存储空间在8KB。

如果扣掉一些必要的开销,其只有8000字节左右。当某条记录的所有列(包括固定长度的列与可变长度的列其大小超过这个限制的时候,数据库就会将其进行分行处理,分别存储在两个不同的页中。

当某张表格中列的总大小超过限制的8KB(实际上还还不到一点)字节时,数据库系统会从最大长度的列开始动态的将一个或多个可变长度列移动到另外一个页中。简单的说,就是将某个列超过的部分单独存放在另一个页中。并且同时还会存储一些指针之类的信息,以便在不同页的记录中建立关联。这种现象在SQL Server数据库中给其取了一个名字,叫做行溢出。

三、行溢出对于数据库性能的不利影响。

掌握了上面关于数据页的基本工作原理后,数据库管理员需要重点理解行溢出对于数据库性能的不利影响。即需要了解,当所有列(包括固定长度的列与可变长度的列)的累积长度超过一个数据页(或者一个数据行)的最大承受限度时,会将列的内容分行来进行存放。数据库如此处理,对数据库的性能会有不利的影响吗?如果有的话,该如何避免?

一般来说,每行的记录超过页的最大容量时,肯定会对数据库的性能造成不利的影响。这是毋庸置疑的。因为当超过这个容量时,数据库系统就需要对这个数据行进行分页处理。而分页处理需要数据库额外的开销。

如在分页保存时,需要给数据库添加额外的指针;在查询数据的时候,由于分页情况的存在,为了读取一条完整的记录,数据库系统可能不得不读取多页的内容;当进行更新操作,将某个字段的内容变短,导致整行的内容在页的最大范围之内,则相关的记录会被保存在同一个行中。这些操作都需要数据库额外的开销。当在同一个时间处理这些作业多了,那么积累起来,对数据库性能的影响就会很显著。同理,此时如果对相关的记录进行排序、统计等操作,由于涉及到多个页,会延长这些作业的执行时间,即降低数据库的性能。

其次需要注意的是对一些变长字段的限制。在SQLServre数据库中,也含有varchar等变长的数据类型。在SQLServer数据库中对此有最大长度的限制。一般情况下,其最大长度不能够超过不能够超过8000字节的限制。不过他们的总宽度可以超过这个8KB的限制。

如果单列的数据长度超过这个限制,那么就不能够使用普通的数据类型。如对于那些用来保存图片或者多媒体的数据,必须要使用大对象数据类型。因为只有这些大对象数据类型不受这个长度的限制。数据库对对于这些大型数据库类型对象有特殊的处理方法。

四、数据库设计时的注意事项。

在数据库运行时,如果存在比较多的行溢出现象,会在很大程度上影响数据库的性能。所以在数据库设计时,需要考虑到这种情况。一般的数据类型不会造成行溢出的情况。只有一些varchar nvarchar或者CLR用户自定义类型的列,比较容易造成这个行溢出现象。

所以在设计数据库时,数据库管理员应该根据用户提供的样板数据分析可能发生行溢出现象的百分比,以及评估会发生溢出现象的频率。如果溢出现象发生的百分比或者频率比较高的话,那么数据库管理员就需要考虑对表格进行规范化处理,以提高数据库的性能,减少溢出现象对于数据库的不利影响。

一般来说,有两种方法可以显著的降低这个行溢出现象对数据库性能的影响。一是假设列定义了varchar或者用户自定义数据类型等数据类型的时候,如果其长度比较长,很有可能引起行溢出现象的话,那么就干脆使用大对象数据类型。对于大对象数据类型SQL Server数据库会采取特殊的管理方法,会讲这个数据与普通数据分开来管理。所以可以在很大程度上降低行溢出现象对数据库性能的影响。

不过需要注意的是,管理这些大对象数据类型,数据库本身就需要花费更多的精力与资源。所以采用这种方式带来的收益,与行溢出现象带来的损失就会有一个轻重之分的问题。数据库管理员要评估由此带来的收益能够弥补行溢出对象带来的损失。如果可以弥补的话,那么可以采用这个方案。如果不可以的话,那就得不偿失了。故笔者并不是很推荐使用这种方法。笔者现在采用的是下面要介绍的这种方式。

第二种方法执行起来比较简单,具有比较强的可执行性。即如果某个表格中有varchar或则用户自定义的数据类型,而且其最大长度也比较长,很容易造成行溢出现象。此时最好将这些列与表中的其他列分开来存放。即将他们放在两张不同的表中。然后再通过join语句来进行连接。由于数据页对单个列的最大长度有限制,所以如此处理的话,就不怎么会发生行溢出的现象。此时如果需要查询完整的记录,也需要访问多个页。

但是在实际工作中,往往不需要访问全部的信息。如在更新或者统计操作时,不需要更新varchar数据类型的字段,那么数据库的效率就会有很大的提升。即使需要访问完整的记录,需要访问多个页。但是采取join操作也要比行溢出操作性能来的好。如在更新数据时将varchar的列缩短了,此时由于在两个不同的表中,也不会出现合并行的问题。所以可以在很大程度上节省数据库的开销。显然,这种分表处理的方式更加简单,很容易操作。所以笔者强烈建议采用这种方式来避免行溢出对SQL Server数据库造成的不利影响。

【编辑推荐】

  1. 详解SQL Server 2008复制分区清理数据
  2. 安装MySQL Server 5.0在Linux上
  3. Oracle数据库索引和SQL Server的阐述
  4. SQL Server 2005负载均衡部分性能分析
  5. Sql Server 2005负载均衡的体系特点

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/290114.html<

(0)
管理的头像管理
上一篇2025-05-19 01:55
下一篇 2025-05-19 01:57

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注