Issuu on Google+

Oracle 白皮书 2009 年 9 月

Oracle Database 11g Release 2 的 分区功能


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

分区 — 概念 ..................................................................................... 2 简介 ............................................................................................... 2 分区的优点 .................................................................................... 2 分区 – 业务建模 ............................................................................... 5 基本分区策略 ................................................................................. 5 分区扩展 ........................................................................................ 6 分区顾问 ........................................................................................ 7 分区策略和扩展概览 ...................................................................... 7 分区的信息生命周期管理 ................................................................... 8 结论 ................................................................................................... 8


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

分区 — 概念 简介 1997 年首次在 Oracle 8.0 中引入的 Oracle 分区,是 Oracle 数据库其中一个最重要、 最成功的功能,它提高了成千上万应用程序的性能、易管理性和可用性。Oracle Database 11g Release 2 引入了第九代分区功能,使客户能够在更多的业务环境下建模, 并且使分区功能更易于使用,实现了分区“适用于大众”。Oracle Database 11g Release 2 继续增强了 Oracle 分区功能,可在长达十年的时间里保护客户在分区方面的投资。

分区的优点 通过提高易管理性、性能和可用性,分区可为多种应用程序提供大量优点。分区通常 可以帮助将特定查询或维护操作的性能提高一个数量级。而且,分区使用“分层存 档”方法将较旧的相关信息在线保存在低成本的存储设备上,从而大大降低数据的总 拥有成本。对于大型环境的信息生命周期管理,Oracle 分区依然是一种有效、简单而 又非常强大的方法。 分区还使数据库设计人员和管理员能够解决一流应用程序易于出现的一些最严峻问 题。对于构建多兆兆字节系统或具有极高可用性要求的系统而言,分区是一项关键工 具。 分区基本知识

分区能够将表、索引或索引结构的表分为更小的片段。数据库对象的每一片段称为分 区。每一分区具有自己的名称,而且可以拥有自己的存储特征。从数据库管理员的角 度来说,分区的对象拥有可以共同管理或单独管理的多个片段。这使管理员在管理分 区的对象时具有相当大的灵活性。但是,从应用程序的角度来说,分区的表与未分区 的表相同;在使用 SQL DML 命令访问分区的表时,不需要进行修改。

2


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

图 1:应用程序和数据库管理员角度的分区表

数据库对象 — 表、索引和索引结构的表使用“分区键”进行分区,分区键是确定指 定的行位于哪个分区的列集。例如,图 1 中所示的销售表采用月分区策略,按销售日 期进行范围分区;对于任何应用程序,表都显示为一个单独的“正常”表。但是,数 据库管理员可以单独管理和存储每一月分区,还可能使用不同的存储层,对较旧的数 据应用表压缩,或者将全部较旧数据存储在只读表空间中。 索引既可以与基础分区策略的基础表耦合,也可以不与之耦合,这与所选索引分区策 略无关。根据业务要求选择相应的索引分区策略,使分区能够很好地支持任何种类的 应用程序。Oracle Database 11g 在三种类型的分区索引之间存在差别。 

本地索引:本地索引是与基础分区表耦合的分区表中的一个索引,它“继承”了表 的分区策略。因此,本地索引的每一分区都与基础表的一个 — 而且仅仅一个 — 分区相对应。耦合使分区性能得到优化;例如,当一个表分区被丢弃时,Oracle 同 样必须丢弃相应的索引分区。索引维护的成本不需要很高。在数据仓库环境中,本 地索引是最常见的。

全局分区索引:全局分区索引是使用与表不同的分区键或分区策略分区的分表区或 非分区表中的一种索引。全局分区索引可以使用范围分区或哈希分区进行分区,并 且不与基础表相耦合。例如,一个表可以按月进行范围分区,并且具有十二个分 区,而该表上的索引可以使用不同的分区键进行范围分区,并且具有不同数量的分 区。全局分区索引对 OLTP 比对数据仓库环境更常见。

全局非分区索引:全局非分区索引基本上与非分区表上的索引相同。该索引结构不 进行分区,且不与基础表相耦合。在数据仓库环境中,全局非分区索引最常见的用 途是增强主键的约束力。另一方面,OLTP 环境对全局非分区索引的依赖性最高。

另外,Oracle 还提供用于管理分区表的各种 SQL 命令。这些命令包括用于添加新分 区、丢弃、拆分、移动、合并、截断以及压缩分区的命令。 分区的易管理性

Oracle 分区使表和索引能够分区为更小的、更易管理的单元,使数据库管理员能够寻 求“分步解决”方法来管理数据。 通过分区,可以把维护操作重点放在表的特定部分。例如,数据库管理员可以压缩包 含 2006 年度表数据的单个分区,而非压缩整个表。对整个数据库对象上的维护操作

3


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

而言,可以在按分区的基础上执行这些操作,从而将维护过程分为更多易于管理的区 块。 分区易管理性的典型用途是支持数据仓库中的“滚动窗口”加载过程。假设数据库管 理员每天将新的数据加载入表。该表可以进行范围分区,从而使每一分区包含一天的 数据。加载过程只是简单地增加了一个新分区。由于数据库管理员不需要修改任何其 他分区,因此添加一个单独的分区远比修改整个表更高效。 使用分区的另一个优点是当删除数据时,可以移除整个分区,与单独删除每一行相 比,这一操作非常高效和快速。 分区的性能

通过限制要检查或操作的数据数量,分区能够提供大量性能优点。这些功能包括: 

分区修剪:分区修剪(也称为分区消除)是提高分区性能的最简单也是最基本的手 段。分区修剪通常可以将查询性能提高多个数量级。例如,假设一个应用程序包含 ORDERS 表,而该表包含一订单的历史记录,而且此表已按天分区。对单周订单的 查询将只访问 ORDERS 表的七个分区。如果该表包含 2 年的历史数据,则此查询 将访问七个分区而非 730 个分区。由于分区修剪,执行此查询的速度可能快 100 倍。分区修剪可以与其他所有 Oracle 的高性能功能结合使用。Oracle 将会把分区修 剪与任何索引技术、联接技术或并行访问方法结合使用。

分区智能联接:通过使用一种称为分区智能联接的技术,分区还可以提高多表联接 的性能。当将两个表联接在一起时,可以应用分区智能联接,并且至少其中一个表 使用联接键进行分区。分区智能联接将一个大型联接分为多个较小的联接,这些较 小的联接包含与联接的表“相同”的数据集。这里,“相同”定义为完全包含两个 联接端中相同的分区键值集,因此可以确保只有这些“相同”数据集的联接才会有 效,而不必考虑其他数据集。Oracle 使用(物理的)设备分区表进行联接,或者在 运行时明显地重新分配(=“重新分区”)一个表,以便创建与其他表的分区相匹配 的设备分区数据集,从而以更少的时间完成整个联接。这对序列执行和并行执行而 言,均具有显著的性能优点。

分区的可用性

分区数据库对象具有分区独立性。这种分区独立性特性是高可用性策略的一个重要组 成部分。例如,如果分区表的一个分区不可用,则该表的所有其他分区仍保持联机和 可用。应用程序可以继续对此分区表执行查询和事务处理,而且在不需要访问不可用 分区情况下,这些数据库操作将可成功运行。 数据库管理员可以指定将每一分区存储在单独的表空间中;这将使管理员能够独立于 表中的其他分区,在每一单独分区上执行备份和恢复操作。因此,在出现灾难情况 下,可以只使用包含活动数据的分区恢复数据库,然后在方便的时候恢复其他分区中 的非活动数据。从而减少系统停机时间。 而且,分区还可以减少计划的停机时间。分区带来的性能收益可以使数据库管理员在 相对较小的批窗口中完成对大型数据库对象的维护操作。

4


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

分区 – 业务建模 Oracle Database 11g Release 2 提供各种分区策略,使客户能够将数据细分与实际的业务 要求理想地保持一致。所有可用的分区策略都依赖于基础数据分配方法,这些方法可 用于单独的分区表(一层)或复合的分区表。而且,Oracle 提供各种分区扩展,增加 了选择分区键的灵活性,可以根据需要自动创建分区并为非分区对象提供分区策略建 议。

基本分区策略 Oracle 分区提供三种基础数据分配方法,通过这些方法控制如何将数据真正放入各种 单独的分区,即: 

范围:根据分区键值的范围分配数据(对于作为分区键的日期列,'January-2007' 分 区包含分区键值介于 '01-JAN-2007' 和 '31-JAN-2007' 之间的行)。数据分配是一个 没有任何间隙的连续过程,通过前述范围的上边界自动定义某一范围的下边界。

列表:数据分配按一系列分区键值进行定义(对于作为分区键的地区列,'North America' 分区可以包含值 'Canada'、'USA' 和 'Mexico')。可以定义特殊的 'DEFAULT' 分区,以便捕捉未被任何列表明确定义的所有分区键值。

哈希:应用于分区键的哈希算法用于确定指定行的分区。与其他两种数据分配方法 不同,哈希算法不提供数据和任何分区之间的任何逻辑映射。

使用上述数据分配方法,可以将表分区为单独的表或复合的分区表。 

单独(一层)分区:通过指定其中一种数据分配方法定义表,使用一列或多列作为 分区键。例如,对于具有许多列作为分区键以及 'less_than_five_hundred' 和 'less_than_thousand' 两个分区的表,'less_than_thousand' 分区包含许多行,其中下列 条件为真:500 <= 分区键 <1000。

您可以指定范围、列表和哈希分区表。

复合分区:使用两种数据分配方法的组合定义复合分区表。首先,按数据分配方法 一对表进行分区,然后使用第二种数据分配方法将每一分区进一步细分为子分区。 所有指定分区的子分区共同表示数据的逻辑子集。例如,范围-哈希复合分区表首先 进行范围分区,然后使用哈希分区技术将每一单独的范围分区进一步进行子分区。

可用的复合分区技术是范围-哈希、范围-列表、范围-范围、列表-范围、列表-列表、 列表-哈希,并且在 Oracle Database 11g Release 2 中增添了一项新的复合分区技术 — 哈希-哈希。

可以使用范围、哈希和列表分区将索引结构的表 (IOT) 进行分区。IOT 不支持复合 分区。

5


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

分区扩展 除了基本分区策略之外,Oracle 还提供分区扩展。Oracle Database 11g 中的扩展主要是 为了实现两个目的: (a) 显著提高分区表的易管理性。 (b) 扩展了定义分区键的灵活性。 这些扩展分别为: 间隔分区:间隔分区是 Oracle Database 11g 中的一项新的分区策略,它扩展了范围方 法的功能,使之能够使用间隔定义来定义设备分区范围。在首次插入分区数据时, Oracle 将根据需要自动创建任意分区,而非明确指定单独的范围。间隔分区大大提高 了分区表的易管理性。例如,可以定义一个间隔分区表,从而 Oracle 为日历年份中的 每个月创造一个新分区;然后,在将 'September 2007' 插入数据库中时,立即自动为此 月创建一个分区。 可用于间隔分区表的技术是间隔、间隔-列表、间隔-哈希和间隔-范围。 REF 分区:Oracle Database 11g 允许通过利用现有的父-子关系对表进行分区。子表继 承父表的分区策略,且不需要在子表中保存父表的分区键列。在不使用 REF 分区情 况下,如果要想发挥同一分区策略的优势,必须将所有分区键列从父表复制到子表; 另一方面,REF 分区使您能够根据逻辑数据模型自然地对表进行分区,且不需要存储 分区键列,从而减少了非规范化的人工开销并节约了空间。REF 分区还透明地继承了 所有分区维护操作,这些操作能够将一个表的逻辑形式从父表更改为子表。而且, REF 分区还自动实现了父表和子表的设备分区的分区智能联接,从而提高了此操作的 性能。例如,父表 ORDERS 是 ORDER_DATE 列中的一个分区范围;它的子表 ORDER ITEMS 不包含 ORDER_DATE 列,但可以通过引用 ORDERS 表进行分 区。如果 ORDERS 表按月进行分区,则 'Jan-2009' 中的所有订单项目将存储在 ORDER ITEMS 表中的一个单独分区,根据父表 ORDERS 进行设备分区。如果分区 'Feb-2009' 已添加至 ORDERS 表,Oracle 将透明地向 ORDER ITEMS 表添加同等的 分区。 所有基本分区策略都可用于 REF 分区。 基于虚拟列的分区:在以前的 Oracle 版本中,只有在分区键实际地存在于表中时,才 能对表进行分区。Oracle Database 11g 中的一项全新功能 — 虚拟列,消除了这些限 制,并允许按某一表达式定义分区键,使用一个或多个现有的表列,并将表达式仅仅 存为元数据。 经过增强的分区能够根据虚拟列定义分区策略,从而更全面地符合业务要求。列中加 载的信息过多并非不常见;例如,一个 10 位数帐户 ID 可以包括一个以三位数起头 的帐户分支信息。通过基于虚拟列的分区的扩展,包含 ACCOUNT_ID 列的 ACCOUNTS 表可以通过虚拟(衍生)列 ACCOUNT_BRANCH 进行扩展,该虚拟列 来自于作为此表分区键的 ACCOUNT_ID 列的前面三位数。

6


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

所有基本分区策略支持基于虚拟列的分区。虚拟列还可以与间隔分区以及 REF 分区 表的分区键结合使用。

分区顾问 从 Oracle Database 11g release 2 开始,SQL Access Advisor 得到了增强,除了可为索 引、物化视图和物化视图日志提供建议之外,还可生成分区建议。由 SQL Access Advisor 生成的建议仅仅或者整体适用于分区,将会说明在实施这些建议后会获得的预 期性能收益。生成的脚本既可手动实施,也可提交至 Oracle Enterprise Manager 中的队 列。 通过分区建议的扩展,客户不但能够获取专门针对分区的建议,而且还可获取 SQL Access Advisor 的更全面的整体建议,从而总体上提高了 SQL 语句的性能。 SQL Access Advisor 中集成的分区顾问 (Partition Advisor) 是 Oracle Tuning Pack(一个 额外许可的选项)的一个组成部分。它可以在 Enterprise Manager 或通过命令行接口来 使用。

分区策略和扩展概览 下表从概念上概要介绍了 Oracle Database 11g Release 2 中的基本分区策略: 分区策略

数据分配

业务案例示例

基于连续范围的值。

按 order_date 分区的订单表范 围

列表分区

基于无订单的列表值。

按国家分区的订单表列表

哈希分区

基于哈希算法。

按 customer_id 分区的订单表 哈希

复合分区

基于上述范围、列表、哈希和 间隔分区基本技术中的两种技 术的组合。

订单表按 order_date 进行范围 分区,按 customer_id 的哈希 算法进行子分区

范围分区

范围-范围

范围-列表

范围-哈希

列表-列表

列表-范围

列表-哈希

哈希-哈希

订单表按 order_date 进行范围 分区,按 shipment_date 的范 围进行子分区

7


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

除了可用分区策略之外,Oracle Database 11g Release 2 提供以下分区扩展: 分区扩展

说明

业务案例示例

间隔分区

范围分区的扩展。按间隔定 义,提供设备宽度范围。除了 第一个分区之外,所有分区均 在达到数据匹配时根据需要自 动创建。

按 order_date 分区的订单表, 包含预定义的每日时间间隔, 开头为 '01-Jan-2009'

REF 分区

子表的分区通过主键 – 外键关 系从父表继承。分区键并不存 储在子表的实际列中。

(父)按 order_date 分区的订 单表范围并将分区技术继承给 (子)订单行表。order_date 列仅出现在父订单表中。

基于虚拟列的分区

按上述分区技术之一进行定 义,并且分区键是基于虚拟 列。虚拟列并不存储在磁盘 中,仅作为元数据存在。

订单表具有一个虚拟列,此虚 拟列根据客户帐号的前三位数 生成销售地区。然后,按销售 地区对订单表进行列表分区。

间隔

间隔-范围

间隔-列表

间隔-哈希

分区的信息生命周期管理 使用 Oracle 分区功能,可以理想地解决当今存储大量数据的难题,并且实现尽可能最 低的成本。单独分区的独立性是解决“分层存档”策略联机部分问题的一个关键推动 因素。特别是在包含历史数据的表中,数据的重要性和访问模式很大程度上依赖于数 据的年份;分区使单独的分区(或者分区组)能够存储在不同的存储层上,具有不同 的物理属性和价格点。例如,包含 2 年数据的订单表只能将最近一季度的数据存储在 昂贵的终端存储层上,并将其余的表(几乎占 90% 的数据)保存在不太昂贵的低成 本存储层上。

结论 自 1997 年在 Oracle 8.0 中首次引入此项技术以来,Oracle 通过增加新的分区技术、 提高可扩展性,或者扩展易管理性和维护功能,增强了每一版本的分区功能。Oracle Database 11g Release 2 不但增强了复合分区策略,而且增强了间隔和 REF 分区功能。 分区适用于每一个人。Oracle 分区可以大大增加几乎任何数据库应用程序的易管理 性、性能和可用性。由于分区对应用程序是透明的,因此,可以对任何种类的应用程 序轻松执行分区,并且不需要对应用程序进行成本高昂和费时的更改。

8


Oracle 白皮书 — Oracle Database 11g Release 2 的分区功能

© 2009,Oracle 和/或其附属公司版权所有。保留所有权利。本文档仅供参考,若有任何内容更改,恕不另行通知。本文档不保证无 错误,也不受任何口头明示或法律暗示的其他保证或条件限制,包括适销性或其他特定用途的暗示保证或条件。我们特此声明将不会 承担与本文档相关的任何责任,且本文档不直接或间接构成任何合同义务。未经我们事先书面同意,不得以任何形式或方式(电子或 实物)为任何目的复制或传送本文档。 Oracle Database 11g Release 2 的分区功能 2009 年 9 月 作者:Hermann Baer Oracle Corporation

Oracle 是 Oracle Corporation 和/或其附属公司的注册商标。其它名称可能是各自所有者的商标。

0109

全球总部 500 Oracle Parkway Redwood Shores, CA 94065 U.S.A. 全球询价: 电话:+1.650.506.7000 传真:+1.650.506.7200 oracle.com

9


Oracle Database 11g Release 2 的 分区功能