一 基本概念
1. 概念
众所周知, 分区技术能提高性能,简化管理,提高高可用性,降低大数据的存储成本. 分区可以把表,索引,索引组织表分成小片,从而使得更细粒度的管理和访问那些数据库对象.
2. 分区策略
Oracle 分区技术提供三种基本的数据分布方法来作为基本的分区策略来控制数据如何被存储在单个分区里.
2.1 Single-level Partitioning
2.1.1 Range Partitioning (范围分区)
范围分区是最会广泛的分区,并通常以日期date作为分区键(partitioning key). 范围分区是根据分区键定义的范围值来存储数据的,由关键字VALUES LESS THAN(小于)和MAXVALUE(最大值)来划分区域.
2.1.2 Hash Partitioning(哈希分区)
哈希分区是基于运用到分区键上的哈希算法(Hash algorithm)来分布存储数据的. 哈希分区均匀地把数据分布到各个分区. 对于均匀地分布数据到多个设备,哈希分区是最合适的. 同样对于非历史性数据或没有明显特征的分区键也很适合.
2.1.3 List Partitioning(列表分区)
列表分区是根据分区键的列出的离散值显式地指定什么行存储到哪. 它的特性是可以对无序或无关联的数据自然地组织在一起. 例如: 分区键里有个北美(North America)分区,则这个分区也许包含加拿大,美国,墨西哥.
2.2. Composite Partitioning(组合分区)
组合分区是基本分区组合而来的.一个表使用一种分区方法来分布数据,然后每个分区由用一种分区方法来分布数据,相当于细胞的二次分裂,但二次分裂的方法可以不同. 一个分区的所有子分区表示数据的一个逻辑子集.
组合分区有如下类型:
1). Range-Range
2). Range-Hash
3). Range-List
4). List-Range
5). List-Hash
6). List-List
3. 分区的扩展(Partitioning Extensions)
除了基本的分区策略外,Oracle还提供了分区的扩展:
间隔分区是范围分区的一个扩展, 当被插入的数据超过了所有存在的范围分区时,数据库将自动根据指定的间隔来创建新的分区. 该类分区至少要指定一个范围分区.这个范围分区键的值决定了范围分区的上限值,也叫转折点(Transition Point), 并且在这个转折点之上为数据创建间隔分区.下界不包括上一个分区的上界或间隔分区.
例如: 如果创建一个以'月'为间隔的间隔分区,并且转折点设为1-Jan-2009,那么Jan-2009的下界为01-Jan-2009, July-2009的下界为01-July-2009,而不考虑是否有June-2009分区的存在.
间隔分区的限制:
1). 只能指定一个分区键列,且类型为NUMBER或DATE.
2). 对于索引组织表不能用间隔分区
3). 对于间隔分区的表不能创建域索引(Domain Index)
组合的间隔分区:
Partition Advisor 是SQL Access Advisor的一部分. 它可以从SQL Cache, SQL Tuning set里获得负载情况,然后提供建议的分区策略.
引用分区主要是利用两表间的引用约束来建立分区的,分区键必须是存在父子关系的列. 引用分区的好处是:有父子关系的表能通过分区键继承父表.
除了间隔分区外,其它分区方法都可以用于引用分区.
2). Virtual Column-Based Partitioning
在11g以前的版本中,一个表只能以实际存在的列作为分区键来进行分区. 然后从11g以后,虚拟列打破了一个约束, 允许虚拟列或表达式来作为分区键. 表达式只被存为元数据.
虚拟列表分区支持所有其它的分区方法.
4. Partitioning Indexes(分区索引)
正如分区表一样,分区索引也可以可以提升性能,简化管理,提高可用性和扩展性. 它们可以是独立的分区(Global Indexes)或者是自动连接到分区表的方法(Local Indexes). 一般来说应该使用全局索引于OLTP系统,使用局部索引于数据仓库或DSS应用系统. 但无论什么时候,应该考虑更容易管理的本地索引.
分区索引的选择:
1). 如果分区表的列是索引键的子集,那使用本地索引. 如果不是这种情况的话呢,继续往下看
2). 如果这个是唯一索引并且不包含分区键列,则使用全局索引. 如果不是这种情况的话呢,继续往下看
3). 如果易于管理是优先考虑的,那使用本地管理. 如果不是这种情况的话呢,继续往下看
4). 如果你的应用程序是OLTP系统,用户需要快速响应,那使用全局索引.如果是DSS,RDW系统,用户考虑的是数据吞吐量,那使用本地索引.
分区索引分为:
1). 本地分区索引(Local Partitioning Indexes)
本地索引分为本地前缀索引和本地非前缀索引.
本地分区更易于管理. 本地索引的每个分区都被关联到表的每一个分区,这就使得数据库可以自动的保持索引分区同步于表分区,并使得仍一'表-索引'对独立.
你不能显式地添加一个分区到一个索引, 仅当添加分区到对于的表时新分区才被添加到本地索引.同样地,你不能显式地从一索引里删除分区, 仅当从相应的表里删除分区时本地索引分区才被删除.
本地索引可以是唯一的, 不过为了本地索引唯一,表的分区键必须是索引列的其中之一.
2). 全局分区索引(Global Partitioning Indexes)
全局索引包括以下两种类型:
a). Range global partitioning indexes
全局范围索引分区在分区键独立于表的分区方法时很灵活. 全局索引的最高分区必须有个分区界限MAXVALUE. 这确保相对于表的所有行都能被索引引用.Global prefixed indexes可以是唯一的或不唯一的.
b). Hash global partitioning indexes
哈希全局索引分区在索引急速增长是可以提升性能.
本地索引和全局索引的区别:
全局索引以整个表的数据为对象建立索引,索引分区中的索引条目既可能是基于相同的键值但是来自不同的分区,也可能是多个不同键值的组合.
全局索引既允许索引分区的键值和表分区的键值相同,也可以不同.全局索引和表之间没有直接的联系,这点和本地索引不同.
全局索引必须是前缀的(索引键值必须和分区键值相同)
以下是其它一些需要主要的问题:
你可以在分区表上创建位图索引(bitmap indexes), 但位图索引必须是本地的,而不能是全局的.
全局索引可以是唯一的,但本地索引只有在分区键是索引键列其中之一时才可以是唯一的.
子分区索引总是本地的.
表空间可以被指定在索引分区层,也可以在子索引分区层.
1. 概念
众所周知, 分区技术能提高性能,简化管理,提高高可用性,降低大数据的存储成本. 分区可以把表,索引,索引组织表分成小片,从而使得更细粒度的管理和访问那些数据库对象.
2. 分区策略
Oracle 分区技术提供三种基本的数据分布方法来作为基本的分区策略来控制数据如何被存储在单个分区里.
-
Range
-
Hash
-
List
2.1 Single-level Partitioning
2.1.1 Range Partitioning (范围分区)
范围分区是最会广泛的分区,并通常以日期date作为分区键(partitioning key). 范围分区是根据分区键定义的范围值来存储数据的,由关键字VALUES LESS THAN(小于)和MAXVALUE(最大值)来划分区域.
2.1.2 Hash Partitioning(哈希分区)
哈希分区是基于运用到分区键上的哈希算法(Hash algorithm)来分布存储数据的. 哈希分区均匀地把数据分布到各个分区. 对于均匀地分布数据到多个设备,哈希分区是最合适的. 同样对于非历史性数据或没有明显特征的分区键也很适合.
2.1.3 List Partitioning(列表分区)
列表分区是根据分区键的列出的离散值显式地指定什么行存储到哪. 它的特性是可以对无序或无关联的数据自然地组织在一起. 例如: 分区键里有个北美(North America)分区,则这个分区也许包含加拿大,美国,墨西哥.
2.2. Composite Partitioning(组合分区)
组合分区是基本分区组合而来的.一个表使用一种分区方法来分布数据,然后每个分区由用一种分区方法来分布数据,相当于细胞的二次分裂,但二次分裂的方法可以不同. 一个分区的所有子分区表示数据的一个逻辑子集.
组合分区有如下类型:
1). Range-Range
2). Range-Hash
3). Range-List
4). List-Range
5). List-Hash
6). List-List
3. 分区的扩展(Partitioning Extensions)
除了基本的分区策略外,Oracle还提供了分区的扩展:
Manageability Extensions
间隔分区是范围分区的一个扩展, 当被插入的数据超过了所有存在的范围分区时,数据库将自动根据指定的间隔来创建新的分区. 该类分区至少要指定一个范围分区.这个范围分区键的值决定了范围分区的上限值,也叫转折点(Transition Point), 并且在这个转折点之上为数据创建间隔分区.下界不包括上一个分区的上界或间隔分区.
例如: 如果创建一个以'月'为间隔的间隔分区,并且转折点设为1-Jan-2009,那么Jan-2009的下界为01-Jan-2009, July-2009的下界为01-July-2009,而不考虑是否有June-2009分区的存在.
间隔分区的限制:
1). 只能指定一个分区键列,且类型为NUMBER或DATE.
2). 对于索引组织表不能用间隔分区
3). 对于间隔分区的表不能创建域索引(Domain Index)
组合的间隔分区:
-
Interval-range
-
Interval-hash
-
Interval-list
Partition Advisor 是SQL Access Advisor的一部分. 它可以从SQL Cache, SQL Tuning set里获得负载情况,然后提供建议的分区策略.
-
Partitioning Key Extensions
引用分区主要是利用两表间的引用约束来建立分区的,分区键必须是存在父子关系的列. 引用分区的好处是:有父子关系的表能通过分区键继承父表.
除了间隔分区外,其它分区方法都可以用于引用分区.
2). Virtual Column-Based Partitioning
在11g以前的版本中,一个表只能以实际存在的列作为分区键来进行分区. 然后从11g以后,虚拟列打破了一个约束, 允许虚拟列或表达式来作为分区键. 表达式只被存为元数据.
虚拟列表分区支持所有其它的分区方法.
4. Partitioning Indexes(分区索引)
正如分区表一样,分区索引也可以可以提升性能,简化管理,提高可用性和扩展性. 它们可以是独立的分区(Global Indexes)或者是自动连接到分区表的方法(Local Indexes). 一般来说应该使用全局索引于OLTP系统,使用局部索引于数据仓库或DSS应用系统. 但无论什么时候,应该考虑更容易管理的本地索引.
分区索引的选择:
1). 如果分区表的列是索引键的子集,那使用本地索引. 如果不是这种情况的话呢,继续往下看
2). 如果这个是唯一索引并且不包含分区键列,则使用全局索引. 如果不是这种情况的话呢,继续往下看
3). 如果易于管理是优先考虑的,那使用本地管理. 如果不是这种情况的话呢,继续往下看
4). 如果你的应用程序是OLTP系统,用户需要快速响应,那使用全局索引.如果是DSS,RDW系统,用户考虑的是数据吞吐量,那使用本地索引.
分区索引分为:
1). 本地分区索引(Local Partitioning Indexes)
本地索引分为本地前缀索引和本地非前缀索引.
本地分区更易于管理. 本地索引的每个分区都被关联到表的每一个分区,这就使得数据库可以自动的保持索引分区同步于表分区,并使得仍一'表-索引'对独立.
你不能显式地添加一个分区到一个索引, 仅当添加分区到对于的表时新分区才被添加到本地索引.同样地,你不能显式地从一索引里删除分区, 仅当从相应的表里删除分区时本地索引分区才被删除.
本地索引可以是唯一的, 不过为了本地索引唯一,表的分区键必须是索引列的其中之一.
2). 全局分区索引(Global Partitioning Indexes)
全局索引包括以下两种类型:
a). Range global partitioning indexes
全局范围索引分区在分区键独立于表的分区方法时很灵活. 全局索引的最高分区必须有个分区界限MAXVALUE. 这确保相对于表的所有行都能被索引引用.Global prefixed indexes可以是唯一的或不唯一的.
b). Hash global partitioning indexes
哈希全局索引分区在索引急速增长是可以提升性能.
本地索引和全局索引的区别:
全局索引以整个表的数据为对象建立索引,索引分区中的索引条目既可能是基于相同的键值但是来自不同的分区,也可能是多个不同键值的组合.
全局索引既允许索引分区的键值和表分区的键值相同,也可以不同.全局索引和表之间没有直接的联系,这点和本地索引不同.
全局索引必须是前缀的(索引键值必须和分区键值相同)
以下是其它一些需要主要的问题:
你可以在分区表上创建位图索引(bitmap indexes), 但位图索引必须是本地的,而不能是全局的.
全局索引可以是唯一的,但本地索引只有在分区键是索引键列其中之一时才可以是唯一的.
子分区索引总是本地的.
表空间可以被指定在索引分区层,也可以在子索引分区层.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9466564/viewspace-609255/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9466564/viewspace-609255/