Oracle 逻辑存储结构
Oracle 数据库中的数据文件被分组到一个或多个表空间中。在每个表空间中,逻辑数据库结构(如表和索引)都是片段,被进一步细分为“盘区”(extent)和“块(block)”。这种存储的逻辑细分允许Oracle 更有效地控制磁盘空间的利用率。图1-2 显示了数据库中逻辑存储结构之间的关系。
一、表空间
Oracle 表空间(tablespace)由一个或多个数据文件组成,一个数据文件是且只能是一个表空间的一部分。对于Oracle 12c 的安装,最少会创建两个表空间:SYSTEM 表空间和SYSAUX表空间。Oracle 12c 的默认安装创建6 个表空间。
Oracle 10g 及后续版本允许创建特殊类型的表空间,称为大文件表空间(bigfile tablespace),其容量最大可为128TB。使用大文件可使表空间管理对DBA 完全透明可见,换句话说,DBA可以将表空间作为一个单位进行管理,而不必考虑底层数据文件的大小和结构。
使用Oracle 管理文件(Oracle Managed File,OMF)可使表空间数据文件管理更为容易。使用OMF,DBA 可在文件系统中指定一个或多个位置来驻留数据文件、控制文件和重做日志文件,并由Oracle 自动处理这些文件的命名和管理。
即使表空间是临时的,表空间自身也是永久的,只有保存在表空间中的段是临时的。临时表空间可用于排序操作,也用于只存在于用户会话期间的表。专门使用一个表空间用于此类操作,有助于减少临时段和存储在另一个表空间中的永久段(如表)之间的I/O 争用。
表空间可以是字典管理的或本地管理的。在字典管理的表空间中,盘区管理记录在数据字典表中。因此,即使所有的应用程序表都在USERS 表空间中,也仍需要访问SYSTEM 表空间,以管理应用程序表上的DML。因为所有用户和应用程序必须使用SYSTEM 表空间才能进行盘区管理,这就为写入密集型应用程序造成了潜在的瓶颈。在本地管理的表空间中,Oracle 在表空间的每个数据文件中维护一个位图,用于跟踪空间可用性。只有数据字典中管理分配额,可极大地减少数据字典表的争用。其实没什么好的理由来创建字典管理的表空间。在安装Oracle12c 时,必须在本地管理SYSTEM 和SYSAUX 表空间。为了导入可传输的表空间,表空间可由字典管理,但将是只读的。
二、块
数据库块是Oracle 数据库中最小的存储单位。块的大小是数据库内给定表空间中特定数量的存储字节。
块通常是操作系统块的几倍大,这有助于提升磁盘I/O 的效率。Oracle 初始参数DB_BLOCK_SIZE 指定默认的块大小。最多可为数据库中的其他表空间定义4 个块大小,而SYSTEM、SYSAUX 和任何临时表空间中的块大小必须为DB_BLOCK_SIZE 的值。
默认块大小是8KB,所有Oracle 测试都使用8KB 块执行。Oracle 最佳实践指出,除非确有必要使用不同大小,否则应为所有表空间使用8KB 块大小。一个原因可能是表的平均行大小是20KB。因此,可选用32KB 块,但应该进行全面测试,看一下能否提升性能。
三、盘区
盘区是数据库中的下一个逻辑分组级别,它由一个或多个数据库块组成。当扩大数据库对象时,为该对象添加的空间将分配为一个盘区。
四、段
数据库中的下一个逻辑分组级别是段。段是一组盘区,这组盘区组成了被Oracle 视为一个单位的数据库对象,如表或索引。因此,段一般是数据库终端用户要处理的最小存储单位。Oracle数据库中可看到4 种类型的段:数据段(非分区表和分区表的每个分区)、索引段、临时段和回滚段。
1. 数据段
数据库中的每个表都驻留在单独的数据段中,数据段由一个或多个盘区组成。如果某个表是分区表(partitioned table)或群集表(clustered table),则Oracle 为该表分配多个段。数据段包含存储LOB(大对象)数据的LOB 段,LOB 数据由数据段中的LOB 定位器列引用(假定LOB 不是以内联方式存储在表中)。
2. 索引段
每个索引都存储在自己的索引段中。与分区表一样,分区索引的每个分区存储在各自的段中。这种索引段包含的是LOB 索引段,而表的非LOB 列、表的LOB 列以及LOB 的相关索引都可以驻留在各自的表空间中,以提高性能。
3. 临时段
当用户的SQL 语句需要磁盘空间来完成某操作(例如不能在内存中完成的排序操作)时,Oracle 会分配临时段。临时段只存在于SQL 语句的持续期间。
4. 回滚段
从Oracle 10g 开始,遗留的回滚段只存在于SYSTEM 表空间中,并且DBA 一般不需要维护SYSTEM 回滚段。在以前的Oracle 版本中,当事务回滚时,会创建回滚段以保存数据库DML操作之前的值,并且用于维护“之前”的图像数据,从而为访问表的其他用户提供表数据的读一致性视图。回滚段也用于在数据库恢复期间回滚未提交的事务,这些事务在数据库实例崩溃或异常终止时活动。
自动撤消管理(Automatic Undo Management,AUM)处理一个撤消表空间中回滚段的自动分配和管理。在撤消表空间中,撤消段的构造类似于回滚段,不同之处在于如何管理这些段的细节由Oracle 控制,而不由DBA 管理(通常效率低)。从Oracle 9i 开始就存在自动撤消段,但在Oracle 12c 中仍可手动管理回滚段。然而,从Oracle 10g 开始不赞成使用这种功能,在后续版本中该功能将不再可用。在Oracle 12c 中,默认启用AUM,此外还提供了PL/SQL 过程,以帮助确定UNDO 表空间的大小。
转载本站内容时,请务必注明来自W3xue,违者必究。