Oracle 分区是 Oracle9i 企业版的一个选项,可以增强各种应用程序的可管理性、性能和可用性。分区允许将表、索引以及索引编排表细分为更小的段,从而能在更细的粒度级管理和访问这些数据库对象。Oracle 提供丰富的分区模式来满足每一种商务需求。而且,由于它在 SQL 语句中是完全透明的,分区几乎可应用于任何应用程序。
分区的优点 分区能改善各种应用程序的可管理性、性能和可用性,具有非常多的优点。分区往往根据数量级提高某些查询或维护操作的性能。另外,分区可以极大地简化常见的管理任务。
分区还可以使数据库设计人员和管理人员能够处理一些最前沿的应用程序而引发的最棘手的难题。分区在构建 TB 级的系统或对可用性要求极高的系统时非常关键。
分区的基本知识 分区允许将表、索引或索引编排表细分为更小的段。数据库对象的每个段就叫一个区。每个区有自己的名称,也可以具备自己的存储特征。从数据库管理员的角度看,分区的对象有多个段,既可以一起管理也可单独管理。这就赋予管理人员相当大的灵活性来管理分区的对象。然而,从应用的角度看,分区的表与不分区的表是一致的;在通过 SQL DML 命令访问分区表时不需要做任何的修改。
表通过使用‘分区键’分区;分区键是确定某个行所在区的一组列。Oracle9i 提供四种表的分区技术:
- 范围分区:每个区由一系列分区键的值来指定(对于将日期列作为分区键的表,‘1 月-2001年’区包含分区键值为‘01-1 月-2001’至‘31-1 月-2001’的所有行)
- 列表分区:每个区由一列分区键值指定(对于将区域列作为分区键值的表,‘北美州’区可能包含的值有‘加拿大’、‘美国’以及‘墨西哥’)
- 哈希分区:哈希算法应用于分区键值,来确定某个行的区
- 范围-哈希组合分区:即范围和哈希分区技术的结合。表首先进行范围分区,然后每个范围区再单独通过哈希分区技术进行分区。
索引编排表既可做范围分区也可做哈希分区。
Oracle9i 还提供三种类型的分区索引:
- 本地索引:本地索引是分区表中的一种索引,分区方法与基本分区表的完全一样。本地索引的每个区只对应于基表的一个区。
- 全局分区索引:全局分区索引是分区或非分区表中的索引,通过该表中的不同分区键分区。全局分区索引只能采用范围分区法。例如,表可根据月份进行范围分区,这样就有 12 个区,而该表的索引使用不同的分区键进行范围分区,就会有不同数量的区。
- 全局非分区索引:全局非分区索引基本上与非分区表的索引一致。索引结构未被分区。
Oracle 提供一套强健的技术用于表、索引和索引编排表的分区,因此分区功能可最优地应用于任何商务环境中的任何应用程序。
Oracle 还另外提供了一组完整的 SQL 命令用于管理分区表。其中的命令包括添加新区、删除区、拆分分区以及合并分区。
分区可改善可管理性 Oracle 分区选项允许将表和索引划分为更小、更易于管理的段,从而使数据库管理员能够在管理数据时追求“划分并控制”的措施。
通过分区,维护操作可集中于表的特殊部分。例如,数据库管理员可能只备份表的一个区而不是整个表。对于整个数据库对象的维护操作,在每个区的基础上加以执行是可能的,这样就将维护过程分成更易于管理的块。
在管理性方面,分区的典型用法就是支持数据仓库中‘滚动窗口’加载进程。假定 DBA 在每周的基础上将新的数据加载到表中。该表可进行范围分区,以便每个区中包含一周的数据。加载进程只是简单添加一个新区。添加一个区比修改整个表要有效得多,因为 DBA 不需要修改任何其它区。
分区可改善性能 通过限制要检查或操作的数据量和启用并行执行,Oracle 分区选项提供许多性能的优点。这些特性包括:
- 分区修剪 (Partitioning Pruning):分区修剪是最简单也是最有效的通过分区改善性能的方法。分区修剪通常根据几个数量级改善查询性能。例如,假定一个应用程序中有一个包含订单历史记录的订单表,而且该表已经按周进行了分区。请求一周内定单的查询只会访问订单表的一个区。如果订单表有 2 年的历史数据,该查询将访问一个区而不是 104 个区。仅仅由于分区修剪功能的作用,该查询的执行速度实际上快了 100 倍。分区修剪与 Oracle 其它所有的性能特性一起发挥作用。Oracle 将分区修剪功能与任何的索引技术、连接技术或并行访问方法一起使用。
- 智能化分区连接 (Partition-wise Join):分区也可通过使用被称为智能化分区连接的技术改善多表连接的性能。智能化分区连接可用于将两个表连接在一起,而且这两个表都在连接键上分区。智能化分区连接将大型的连接拆分为小的连接,在每个区间执行,减少了整个连接的时间。这显著地提高了串行和并行执行的性能。
- 更新和删除的并行执行:分区能够并行执行 UPDATE、DELETE 和 MERGE 语句。当访问分区和非分区的数据库对象时,Oracle 会并行化 SELECT 语句和 INSERT 语句。不过,为了并行化 UPDATE、DELETE 和 MERGE 语句,目标表必须进行分区。并行执行这些 SQL 操作可极大地改善性能,尤其是对涉及大量数据的 UPDATE、DELETE 或 MERGE 操作。
分区可改善可用性 分区的数据库对象提供区的独立性。区独立性这个特征可以是高可用性策略的一个重要组成部分。例如,如果分区表的一个区不可用,该表中的所有其它区仍然保持在线和可用,应用程序可以继续对该表执行查询和事务。而且,如果这些数据库操作不需要访问不可用的那个区,它们就会成功地运行。
数据库管理员可以指定每个区单独存储在表空间中;这会使管理员分别进行每个区的备份和恢复操作,独立于表中的其它区。
此外,分区可减少计划中的宕机时间。分区产生的性能增益可使数据库管理员在相对小批量的窗口中完成大型数据库对象的维护操作。
发展方向 在 Oracle 分区选项推出后的每一个重要版本中,Oracle 都添加了新的分区方法。Oracle8 引入了范围分区,Oracle8i 引入了哈希和范围-哈希组合分区,而 Oracle9i 引入了列表分区。Oracle 计划继续添加新的分区技术,确保以最好的分区技术满足所有的商务需求。
结束语 Oracle9i 分区能够极大地增强几乎所有应用程序的可管理性、性能和可用性。分区可应用于最前沿的应用程序,并且是保证这些应用程序成功的关键技术成分。不过,分区也可更多地应用于常见的数据库应用程序,以简化管理和减少管理此类应用程序的成本。
关键特性 |
核心功能
- 通过 4 种可能的技术用于表分区:
- 范围分区
- 新!列表分区
- 哈希分区
- 范围-哈希组合分区
- 索引编排表可通过两种可能的技术进行分区:
- 索引的可能性:
- 本地索引:分区的索引与基表一样
- 全局非分区索引:索引不分区
- 全局分区索引:索引根据不同于基表的标准进行分区
|
关键性能特性
- 分区修剪(Partition Pruning)
- 智能化分区连接(Partition-wise Joins)
- 并行更新和删除
可管理特性
对添加、删除、拆分以及合并分区的完全并行化支持
更新过程中行的自动行移植
新!在 DDL 中全局索引的自动维护 |
相关产品与服务 Oracle9i 分区是 Oracle9i 企业版的一个选项。 | |