Oracle 数据库笔记(2)—— 逻辑存储结构

236 阅读4分钟

Oracle 数据库中的数据文件被分组到一个或多个表空间中。在每个表空间中,逻辑数据库结构 ( 如表和索引 ) 都是片段,被进一步细分为 “ 盘区” ( extent ) 和 “ 块 ( block ) ”。这种存储的逻辑细分允许 Oracle 更有效地控制磁盘空间的利用率。图 1 显示了数据库中逻辑存储结构之间的关系。

1 表空间

Oracle 表空间 ( tablespace ) 由一个或多个数据文件组成,一个数据文件是且只能是一个表空间的一部分。 Oracle 12c最少会创建两个表空间 : SYSTEM 表空间和 SYSAUX 表空间。

SYSAUX 表空间是在 Oracle Database10g 中引入的,作为 SYSTEM 表空间的辅助表空间 . 以前一些使用独立表空间或系统表空间的数据库组件现在会在 SYSAUX 表空间中创建。 SYSAUX 表空间存放一些其他的 metadata 组件,如 OEM , Streams 等会默认存放在 SYSAUX 表空间里。通过分离这些组件和功能, SYSTEM 表空间的负荷得以减轻 ,因为可以避免反复创建一些相关对象及组件引起 SYSTEM 表空间的碎片问题。

即使表空间是临时的,表空间自身也是永久的,只有保存在表空间中的段是临时的。临时表空间可用于排序操作,也用于只存在于用户会话期间的表。专门使用一个表空间用于此类操作,有助于减少临时段和存储在另一个表空间中的永久段之间的 IO 争用。

表空间可以是字典管理的或本地管理的。

  1. 在字典管理的表空间中,盘区管理记录在数据字典表中。因此,即使所有的应用程序表都在 USERS 表空间中,也仍需要访问 SYSTEN 表空间,以管理应用程序表上的 DML。 因为所有用户和应用程序必须使用 SYSTEN 表空间才能进行盘区管理,这就为写入密集型应用程序造成了潜在的瓶颈。

  2. 在本地管理的表空间中, Oracle 在表空间的每个数据文件中维护一个位图,用于跟踪空间可用性。只在数据字典中管理分配额,这样可极大地减少数据字典表的争用。

2 块

数据库块是 Oracle 数据库中最小的存储单位。块的大小是数据库内给定表空间中特定数量的存储字节块,它通常是操作系统块的几倍大,这有助于提升磁盘 I/O 的效率。

Oracle 的初始参数 DB_BLOCKSIZE 可指定默认的块大小。默认块大小是 8KB。最多可为数据库中的其他表空间定义4个块大小,而 SYSTEM、SYSAUX 和任何临时表空间中的块大小必须为 DB_BLOCK_SIZE 的值。

除非确有必要使用不同大小,否则应为所有表空间使用 8KB 块大小。如果修改了块大小,应该进行全面测试,看能否提升性能 。

3 盘区

盘区是由一个或多个数据库块组成。当扩大数据库对象时,为该对象添加的空间将分配为一个盘区。

4 段

段是一组盘区,这组盘区组成了被 Oracle 视为一个单位的数据库对象,如表或索引 。因此,段一般是数据库终端用户要处理的最小存储单位。 Oracle 数据库中可看到4种类型的段 : 数据段 ( 非分区表和分区表的每个分区 ) 、 索引段 、 临时段和回滚段。

(1)数据段

数据库中的每张表都驻留在单独的数据段中,数据段由一个或多个盘区组成。如果某个表是分区表 ( partitioned table ) 或群集表 ( clustered table ) ,则 Oracle 为该表分配多个段。数据段包含存储 大对象数据的 LOB 段。

(2)索引段

每个索引都存储在自己的索引段中。与分区表一样,分区索引的每个分区存储在各自的段中。

(3)临时段

当用户的 SQL 语句需要磁盘空间来完成某操作 ( 例如不能在内存中完成的排序操作 ) 时, Oracle 会分配临时段。临时段只存在于 SQL 语句的执行期间 。

(4)回滚段

从 Oracle 10g开始,遗留的回滚段只存在于 SYSTEM 表空间中,并且 DBA 一般不需要维护 SYSTEM 回滚段。

自动撤消管理 ( Automatic Undo Management , AUM ) 处理一个撤消表空间中回滚段的自动分配和管理。在撤消表空间中,撤消段的构造类似于回滚段,不同之处在于如何管理这些段的细节由 Oracle 控制。

在 Oracle 12c中,默认启用 AUM ,此外还提供了 PL/SQL 过程,以帮助确定 UNDO 表空间的大小。