数据库物理存储结构

news2024/11/14 13:50:21

目录

一、数据库文件和文件组

1、数据库文件

(1) 主数据库文件(Primary Database File)

(2) 次数据库文件(Secondary Database File)

(3) 事务日志文件

2、数据库文件组

(1)文件组的好处

(2)主文件组和次文件组

二、数据文件的使用分配

1、基本知识

2、数据页面存储格式

(1)数据页头

 (2)数据行

(3)行偏移数组

(4)页面链接

3.空间使用分配管理

4.索引分配映射管理

5.页面自由空间管理

三、事务日志文件结构

1.事务日志

2.事务日志的物理存储


一、数据库文件和文件组

1、数据库文件

(1) 主数据库文件(Primary Database File)

是数据库的起点,可以指向数据库中文件的其它部分。每个数据库都有一个主数据库文件。文件扩展名一般是 .mdf

(2) 次数据库文件(Secondary Database File)

有些数据库可能没有次数据文件,而有的数据库则有多个次数据文件。文件扩展名多是 .ndf

(3) 事务日志文件

日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。推荐的文件扩展名是 .ldf

2、数据库文件组

 为了便于分配和管理,SQL Server允许将多个文件归纳为同一组,并赋予此组一个名称,这就是文件组

文件组能够控制各个文件的存放位置,其中的每个文件常建立在不同的硬盘驱动器上,这样可以减轻单个磁盘驱动器的存储负载,提高数据库的存储效率,从而达到提高系统性能的目的。

(1)文件组的好处

          在存储数据时, SQL Server采用按比例填充策略使用文件组内每个文件所提供的存储空间。例如,如果一个服务器上有4个可供数据库使用的硬盘,他们提供给数据库的最大存储空间分别为100M,200M,300M和100M,我们可以在前面3个硬盘上建立一个数据文件组,包含三个文件,每个硬盘上分配一个文件,在第4个硬盘上建立数据库的日志文件,当发生数据库的读写操作时,日志数据写入第4个硬盘,而数据库数据写入前3个硬盘。在写入数据时,SQL Server根据文件组内每个数据文件中剩余的空间大小按比例分配写入其中的数据量,即1:2:3,这样不仅保证文件组内每个文件的空间基本上同时用完,而且将一次磁盘操作同时分配给多个磁盘控制器,可以减轻每个磁盘的负载,从而提高写入速度

建立数据文件和文件组时,应注意以下两点:

  • 每个数据文件或文件组只能属于一个数据库,每个数据文件也只能成为一个文件组的成员。也就是说,数据文件不能跨文件组使用,数据文件和文件组不能跨数据库使用。
  • 日志文件是独立的,它不能作为其他数据文件组的成员。即数据库内的数据和日志不能存入相同的文件或文件组。

(2)主文件组和次文件组

主文件组:包含主数据文件和所有没有被包含在其它文件组里的文件。在创建数据库时,如果未指定其他数据文件所属文件组,这些文件将归属于主文件组。数据库的系统表都包含在主文件组里,所以,当主文件组的空间用完后,将无法向系统表中添加新的目录信息。

次文件组:也称用户自定义文件组,包括所有使用数据库创建语句(CREATE DATABASES)或数据库修改语句(ALTER DATABASES)时使用FILEGROUP关键字进行指定的文件。

 默认文件组:任何时候,只能有一个文件组是默认文件组。默认情况下,主文件组被认为是默认文件组。

使用数据文件和文件组的建议:

1. 创建数据库时,允许数据文件能够自动增长,但要设置一个上限。否则有可能充满磁盘。

2. 主文件组要足够大以容纳所有的系统表。否则新的信息就无法添加到系统表,数据库也就无法追加修改。

3. 建议把频繁查询的文件和频繁修改的文件分放在不同的文件组。

4. 把索引、大型的文本文件、图象文件放到专门的文件组里。

二、数据文件的使用分配

1、基本知识

  • 在 SQL Server 中,数据文件存储的基本单位是页
  • 在 SQL Server 2000 中,页的大小是 8 KB。这意味着 SQL Server 2000 数据库每兆字节有 128 页。
  • 每页的开始部分是 96 字节的页首,用于存储系统信息,如页的类型、页的可用空间量、页对象ID等。
  • 根据页面所存储的不同信息,可以将它划分为8种页类型

2、数据页面存储格式

(1)数据页头

数据页包含数据行中除 text、ntext 和 image 数据外的所有数据,页头占用每个数据页的前96个字节,剩余的8096字节用于数据和行偏移数组。

 (2)数据行

  • 紧跟着页头的就是存储表的真正数据行区域。
  • 单个数据行的最大长度是8060字节。数据行不能跨页存储(文本和图像例外)。
  • 页内数据行的多少依赖于表的结构和要存储的数据。如果一个表的所有列都是定长,那么该表在每一页上存储相同数目的行。
  • 如果一个表里有变长列,那么该表总是在每一页上存储尽可能多的行。
  • 数据行越短,每一页存储的行数就越多。

(3)行偏移数组

  • 当单行数据长度为最大8060字节时,行偏移数组占用8096-8060=36个字节
  • 但实际中一个数据行大多不是8060字节,往往比这个小,所以数据行占用的总字节数目和行偏移数组占用的总字节数是系统动态调整,数据行字节越少,偏移数组字节越多,反之,数据行字节越多,偏移数组字节越少,但不能少于36个字节。
  • 每两个字节构成一个条目块,每个条目表示页中相关数据行开始的偏移量。
  • 注意:行偏移数组表示的是页中数据行的逻辑顺序,不是物理顺序。真正的物理顺序与聚集索引有关。

(4)页面链接

每个表或索引视图的数据行一般都分开存储在多个 8 KB 数据页中。如上面所述,每个数据页都有一个 96 字节的页头,其中包含拥有该页的表的标识符 (ID) 这样的系统信息,也包含指向下一页及前面用过的页的指针。

3.空间使用分配管理

SQL Server 2000向表或索引分配空间的基本单位为区域,一个区域长度为8个连续的页面,也就是64KB。区域分为以下两种类型:

• 统一区域:区域中的8个页面只能存储同一种数据库对象。

• 混合区域:区域中不同页面可以存储不同的数据库对象。但由于每个页面只能存储同一种数据库对象,所以一个混合区域最多可存储8种数据库对象。

 全局分配映射(Global Allocation Map,简称GAM)页面:GAM页面中的每一位记录一个区域的分配情况,当位值为1时,说明区域为空闲区域;当位值为0时,表示区域已经被分配使用。由于每个页面大小为8KB,所以一个GAM页面能够覆盖64000个区域,即4GB。

共享全局分配映射(Shared Global Allocation Map,简称SGAM)页面:SGAM页面用于记录有空闲页面的混合区域。每个SGAM页面覆盖64000个区域。当位值为1时,说明区域为混合区域,并且其中有空闲页面;当位值为0时,说明相应的盘区没有被用作混合区域,或者它是一个没有空闲页可分配的混合区域。

4.索引分配映射管理

       SQL Server使用索引分配映射(IAM)页面管理堆或索引所分配区域的使用情况。每个IAM页面的页面头记录该IAM页面所映射区域范围的起始区域,其映射区中的每一位说明一个区域的使用状态,其中第一位代表IAM页面所映射区域范围内的第一个区域,第二位代表第二个区域等等。当映射区中某位为0时,说明该位所映射区域仍未分配给拥有该IAM页面的对象使用;当其值为1时,说明该位所映射区域已经分配给拥有该IAM页面的对象使用。

5.页面自由空间管理

         当一个区域分配给某个数据库对象时,SQL Server使用PFS(Page Free Space)页面记录区域内的单个页面是否分配使用,以及页面中的空间使用情况:即全部空闲、1%~50%满、51%~80%满、81%~95%满,还是96%~100%满。当SQL Server需要分配新的页面,或者查找有自由空间页面时,它使用PFS页面中所记录的这些信息。

三、事务日志文件结构

1.事务日志

        SQL Server在内存中建立了一个缓冲区,在检索数据时,它将数据读入该缓冲区中,而在修改数据时,它并不是直接修改磁盘中的数据,而是先在缓冲区中建立修改数据副本,之后在页面刷新时再将它们写入磁盘。这样做可以提高数据处理速度,减少磁盘读写次数。在缓冲区中被修改后而没有写入磁盘的页面称作“脏页”,“脏页”由SQL Server迟写进程定期写入磁盘,这一操作叫做“页面刷新”。 每当对缓冲区中的数据页面进行修改时,SQL Server自动在日志缓存中构造该操作的日志记录。

2.事务日志的物理存储

        一个数据库事务日志可以对应一个或多个物理文件,SQL Server 2000 在内部又将每个物理日志文件分成许多个虚拟日志文件。虚拟日志文件没有固定大小,且物理日志文件所包含的虚拟日志文件数不固定。

         事务日志是回绕的日志文件。例如,假设有一个数据库,它包含一个分成5个虚拟日志文件的物理日志文件。当创建数据库时,逻辑日志文件从物理日志文件的始端开始。在逻辑日志的末端添加新的日志记录,逻辑日志就向物理日志末端增长。截断操作发生时,删除最小恢复日志序号(MinLSN)之前的虚拟日志内的记录,这部分日志记录所占用的空间即可被重复使用。

         当逻辑日志的末端到达物理日志文件的末端时,新的日志记录绕回物理日志文件的始端,如图所示。这个循环不断重复,只要逻辑日志的末端不到达逻辑日志的始端。如果经常截断旧的日志记录,使得总能为下一个检查点创建的所有新日志记录保留足够的空间,那么日志永远不会填满。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[Linux]文档搜索和归档备份

​⭐作者介绍:大二本科网络工程专业在读,持续学习Java,输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Linux基础操作。本文主要是分享一些Linux系统常用操作,内容主要来源是学校作业,分享出来的…

配置zabbix自定义监控项

1.需要安装zabbix-agent服务,使用的zabbix版本为5.0版本 参考:zabbix监控linux主机_Apex Predator的博客-CSDN博客 2.创建存放脚本目录并编辑监控服务的脚本(此处监控一下服务是否存活) mkdir /opt/zabbix_jb vi /opt/zabbix_jb/service_status.sh …

【容器化应用程序设计和开发】2.2 Dockerfile 的编写和最佳实践

往期回顾: 第一章:【云原生概念和技术】 第二章:2.1 容器化基础知识和Docker容器 容器化应用程序设计和开发 2.2 Dockerfile 的编写和最佳实践2.2.1 Dockerfile 包含哪些指令2.2.2 Dockerfile 注意事项 在上篇章节中,我们介绍了…

什么是索引?MySQL索引的底层数据结构

索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引…

SAP 生产订单修改记录查询

无论在项目实施过程中还是在运维的项目中,经常会遇到生产订单被修改,导致需求发生变更,这个时候用户经常就会需要要求查询生产订单的修改记录。通过SAP的标准程序是没有办法查询到生产订单修改记录,这个时候就从开发的角度去做增强的方式去实现。 1、肯定是在生产订单保存…

AI(二):初体验(Cursor、Copilot、Bito)

Cursor Cursor官网下载:https://www.cursor.so/ && https://github.com/getcursor/cursor Cursor.so是一款基于GPT的代码生成工具,它可以帮助开发者快速生成代码,提高开发效率。GPT是一种自然语言处理技术,可以根据输入…

Lambda语法解析

Lambda语法解析 一.Lambda语法1.Lambda表达式基本形式:2.capture list(捕获列表)3.捕获列表程序案例 二.Lambda应用1.使用 lambda 表达式对数组排序,并将排序后的元素存储到新数组中:2.使用 lambda 表达式计算两个矩阵…

如何安装Auto-GPT

如何安装Auto-GPT 记录一下如何安装Auto-GPT 文章目录 如何安装Auto-GPT前提克隆项目进入项目目录安装所需的依赖重命名 .env.template 文件填写API_KEY创建auto-gpt.json文件运行 Auto-GPT 前提 在安装Auto-GPT之前,你需要具备以下条件: Git环境Python环…

从历史天气预报 API 看气象大数据的商业价值

引言 近年来,随着气象观测技术的不断提升和气象大数据的快速发展,越来越多的企业开始将气象数据应用于商业领域。其中,历史天气预报 API 作为一种可获取历史气象数据的接口,具有广泛的商业应用价值。 本文将从历史天气预报 API …

数字图像处理【8】频域滤波1—关于傅里叶

这一章是数字图像处理基础的最后一章。系统的介绍傅里叶级数、傅里叶变换、离散傅里叶变换,快速傅里叶变换,以及二维傅里叶变换在图像上的应用。 变换的作用 首先我们先来聊聊什么是“变换”?其实在第一章介绍 HSI 颜色模型的时候&#xff0…

数据库工具——mongostat

参考文档:mongostat​​​​​​​​​​​ mongostat提供了当前运行的mongod或者mongos实例的大概状态。mongostat有点类似Linux的vmstat,但mongostat提供的是mongod或者mongos实例的信息。 从MongoDB 4.4开始,mongostat现在与MongoDB Ser…

第五章——动态规划1

背包问题 01背包问题 有N个物品和容量是V的背包,每个物品有价值vi和权重(价值)wi属性,每件物品只能用一次(要么用0次,要么用1次),在背包能装得下的情况下,挑一部分物品装…

网络原理(四):传输层协议 TCP/UDP

目录 应用层 传输层 udp 协议 端口号 报文长度(udp 长度) 校验和 TCP 协议 确认应答 超时重传 链接管理 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 总结 我们第一章让我们对网络有了一个初步认识,第二章和第三章我们通…

bounding box线性回归

#bounding box regression原理 如图所示绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对…

MQTT协议 详解

文章目录 一、啥是MQTT?1. MQTT协议特点2. 发布和订阅3. QoS(Quality of Service levels)QoS 0 —— 最多1次QoS 1 —— 最少1次QoS 2 —— 只有1次 二、MQTT 数据包结构1. MQTT固定头2. MQTT可变头 / Variable header3. Payload消息体 三、M…

Redis集群常用命令及说明

一、集群的特点 1、集群架构特点 (1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽; (2)节点的fail是通过集群中超过半数的节点检测失效时才生效…

2023年5月广州/东莞/深圳产品经理认证NPDP招生简章

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

7.Shuffle详解

1.分区规则 ps."&"指的是按位与运算,可以强制转换为正数 ps."%",假设reduceTask的个数为3,则余数为0,1,2正好指代了三个分区 以上代码的含义就是对key的hash值强制取正之后,对reduce的个数取…

《可穿戴环形生物阻抗装置连续无袖血压监测》阅读笔记

目录 一、论文简介 二、十个问题 参考文献 一、论文简介 本文提出了一种基于环形生物阻抗传感器的连续无袖血压监测方法。该方法利用可穿戴环形生物阻抗装置实现连续无袖血压监测,并通过优化电极与皮肤接触点来提高信号灵敏度。实验结果表明,该方法可…

【动态规划】背包问题

目录 一:思路简介 二:0-1 背包 三:完全背包 四:多重背包 五:分组背包 一:思路简介 n 个物品,容量为V的背包 Vi 体积 Wi 价值(权重) 二:0-1 背包 每件物品最多只能用1次(要么0次&…