oracle数据库存储结构-逻辑存储结构
逻辑存储结构简介
Oracle 数据库为数据库中的所有数据分配逻辑空间。
数据库空间分配的逻辑单元是数据块、扩展区、段和表空间。在物理级别,数据存储在磁盘上的数据文件中。数据文件中的数据存储在操作系统块中。
下图是物理和逻辑存储的实体关系图。鱼尾纹符号表示一对多关系。
逻辑和物理存储
一个段包含一个或多个区段,每个区段包含多个数据块。
下图显示了一个表空间中数据块、extent和segment之间的关系。在此示例中,一个段有两个extent存储在不同数据文件中.
表空间中的段、区和数据块
从最低级别到最高级别,Oracle 数据库存储数据
- data block 是 Oracle 数据库中数据存储的最小逻辑单元 。
一个逻辑数据块对应物理磁盘空间的特定字节数,例如2 KB。数据块是 Oracle 数据库可以使用或分配的最小存储单元。
- extent是一组逻辑上连续的数据块,分配用于存储特定类型的信
在上图中,24 KB 的 extent 有 12 个数据块,而 72 KB 的 extent 有 36 个数据块。
- segment 是为特定数据库对象(例如 table)分配的一组extents
例如,employees
表的数据存储在自己的data segment中,而employees表的每个 index都存储在自己的index segment中。每个使用存储的数据库对象都由一个段组成。
- tablespace 是包含一个或多个段的数据库存储单元 。
每个段属于且仅属于一个表空间。因此,段的所有 extents都存储在同一个表空间中。在一个表空间内,一个段可以包括来自多个数据文件的数据块,如上图所示。例如,一个段的一个extent可能存储在users01.dbf中,而另一个则存储在users22.dbf中。单个数据块永远不能跨越数据文件。
逻辑空间管理
Oracle 数据库必须使用逻辑空间管理来跟踪和分配表空间中的范围。
当数据库对象需要extents时,数据库必须具有查找和提供它的方法。类似地,当一个对象不再需要一个extents时,数据库必须有一种方法可以使空闲extents可用。
Oracle 数据库根据您创建的类型管理表空间中的空间。您可以创建以下任一类型的表空间:
- 本地管理的表空间(默认)
数据库使用表空间本身中的位图(bitmaps)来管理 extents。因此,本地管理的表空间具有为位图留出的一部分表空间。在表空间内,数据库可以使用自动段空间管理 (ASSM) 或手动段空间管理 (MSSM) 来管理段。
- 字典管理的表空间
数据库使用数据字典来管理范围。
逻辑空间管理
本地管理的表空间
本地管理的表空间在数据文件头中维护一个位图,以跟踪数据文件主体中的可用空间和已用空间。
每个位对应一组块。分配或释放空间时,Oracle 数据库会更改位图值以反映块的新状态。
下图是位图管理存储的概念表示。标头中的A1
指的是已用空间,而 a0
指的是可用空间。
位图管理存储
本地管理的表空间具有以下优点:
- 避免使用数据字典来管理范围
如果使用或释放 extent中的空间会导致另一个操作消耗或释放数据字典表或撤消段中的空间,则字典管理的表空间中可能会发生递归操作。
- 自动跟踪相邻的可用空间
这样,数据库就不需要合并空闲数据块。
- 自动确定本地管理的扩展数据块的大小
或者,所有扩展数据块在本地管理的表空间中可以具有相同的大小,并覆盖对象存储选项。
Note:
Oracle强烈建议在自动段空间管理中使用本地管理的表空间。
段空间管理是从包含该段的表空间继承的属性。在本地管理的表空间中,数据库可以自动或手动管理段。例如,可以自动管理表空间用户中的段,而手动管理表空间工具中的段。
Automatic Segment Space Management自动段空间管理
自动段空间管理(ASSM)方法使用位图来管理表空间中的空间。
位图具有以下优点:
- 简化的管理
ASSM无需手动确定许多存储参数的正确设置。只有一个关键的SQL参数控制空间分配:PCTFREE。此参数指定块中为将来更新保留的空间百分比(请参阅“数据块中的可用空间百分比”)。默认10%。
- 提高并发性
多个事务可以搜索空闲数据块的单独列表,从而减少争用和等待。对于许多标准工作负载,使用ASSM的应用程序性能优于使用MSSM的经过良好调整的应用程序的性能。
- Oracle Real Application Clusters (Oracle RAC) 环境中空间与实例的动态关联
字典管理的表空间
字典管理的表空间使用数据字典来管理其范围。
每当分配或释放范围以供重用时,Oracle 数据库都会更新数据字典中的表。例如,当一个表需要一个extent时,数据库查询数据字典表,并搜索空闲extent。如果数据库找到空间,那么它会修改一个数据字典表并将一行插入到另一个表中。这样,数据库通过修改和移动数据来管理空间。
数据库在后台执行以获取数据库对象空间的 SQL 是递归 SQL。频繁使用递归 SQL 会对性能产生负面影响,因为必须对数据字典的更新进行序列化。本地管理的表空间是默认的,避免了这个性能问题。
数据块概述
Oracle 数据库以称为数据块的单元(也称为Oracle 块或页)管理数据库数据文件中的逻辑存储空间。数据块是数据库 I/O 的最小单位。
数据块和操作系统块
在物理级别,数据库数据存储在由操作系统块组成的磁盘文件中。
操作系统块是操作系统可以读取或写入的最小数据单位。相反,Oracle 块是一种逻辑存储结构,其大小和结构对于操作系统来说是未知的。
下图显示操作系统块的大小可能与数据块不同。数据库请求多个数据块中的数据,而不是操作系统块。
数据块和操作系统块
数据库块大小
每个数据库都有一个数据库块大小。
DB_BLOCK_SIZE
初始化参数设置数据库创建时的数据块大小。大小是为SYSTEM
和SYSAUX
表空间设置的,是所有其他表空间的默认值。除非重新创建数据库,否则无法更改数据库块大小。
如果DB_BLOCK_SIZE
未设置,则默认数据块大小是操作系统特定的。数据库的标准数据块大小为 4 KB 或 8 KB。如果数据块和操作系统块的大小不同,则数据块大小必须是操作系统块大小的倍数。
数据块格式
每个数据块都有一个格式或内部结构,使数据库能够跟踪块中的数据和可用空间。无论数据块包含表、索引还是表簇数据,这种格式都是相似的。
下图显示了未压缩数据块的格式。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了