《Oracle 数据库分区技术经验分享》由会员分享,可在线阅读,更多相关《Oracle 数据库分区技术经验分享(39页珍藏版)》请在金锄头文库上搜索。
1、Oracle 数据库分区技术经验分享数据库分区技术经验分享 大唐软件技术股份有限公司 刘兵兵 大唐软件技术股份有限公司 刘兵兵 2 议题:议题: 1.1. 分区技术的现状分析分区技术的现状分析分区技术的现状分析分区技术的现状分析 2.2. 分区技术简介和最新的发展分区技术简介和最新的发展分区技术简介和最新的发展分区技术简介和最新的发展 3.3. 分区设计经验分享分区设计经验分享分区设计经验分享分区设计经验分享 3 议题一:分区技术的现状分析议题一:分区技术的现状分析 4 5 什么是分区?什么是分区? Large Table 管理困难管理困难 Partition 分割存放 易于管理 提高性能 分
2、割存放 易于管理 提高性能 复合复合 Partition 比较好的性能 针对业务需求有更好的灵 活性 比较好的性能 针对业务需求有更好的灵 活性 JAN FEB JAN FEB USA EUROPE ORDERS ORDERS ORDERS 应用透明应用透明 支持多个存储位置,支持不同的物理存储特性支持多个存储位置,支持不同的物理存储特性 Simple Yet Powerful 6 分区的一些限制分区的一些限制 表或索引的所有分区必须具备相同的逻辑结构表或索引的所有分区必须具备相同的逻辑结构 例如列名(例如列名(column namecolumn name),数据类型(),数据类型(datat
3、ypedatatype),及数),及数 据约束(据约束(constraintconstraint)等)等 但每个分区的物理属性可以不同但每个分区的物理属性可以不同 例如例如 pctfreepctfree,pctusedpctused,及表空间等。,及表空间等。 表空间的块大小表空间的块大小 一个分区对象的所有分区必须存储在数据块容量(block size)相同的表空间中。 但一个表的不同的分区索引可以放在不同块大小的表空间 中。 7 分区技术得到了广泛的应用分区技术得到了广泛的应用 OLTP OLTP 系统能够利用分区技术提高系统能够利用分区技术提高 可管理性(可管理性(manageabili
4、tymanageability)及可用性()及可用性(availabilityavailability)。)。 数据仓库系统则可以通过分区技术提高数据仓库系统则可以通过分区技术提高 性能(性能(performanceperformance)及可管理性)及可管理性 (manageabilitymanageability) 。 通常下列情况下推荐使用分区通常下列情况下推荐使用分区 1、表的大小超过2GB。 2、表中包含历史数据,新的数据被增加到新的分区中。 3、表中数据要分布在不同的存储设备上。 8 分区技术的好处分区技术的好处 性能性能 Select和DML操作只访问指定分区 并行DML操作 P
5、artition-wise Join 可管理性:数据删除,数据备份可管理性:数据删除,数据备份 历史数据清除 提高备份性能 减小维护窗口,只在指定分区的数据维护操作 可用性可用性 将故障局限在分区中 缩短恢复时间 9 使用的现状分析使用的现状分析 设计上思考不够,为分区而分区。设计上思考不够,为分区而分区。 比如,哪些表需要做分区?分区字段该选哪个?是不是进行压 缩存储? 分区类型简单分区类型简单 分区类型没有经过深思熟虑 索引类型键值的选择不合适,索引分区的使用存在误索引类型键值的选择不合适,索引分区的使用存在误 区。区。 往往是表做了分区就完成了,索引的设计很单一和随意。 10 议题二:分
6、区技术简介和最新的发展议题二:分区技术简介和最新的发展 11 分区表与非分区表的区别分区表与非分区表的区别 分区表及非分区表既可以使用分区索引,也可以使用非分区索引。 分区技术是针对表,索引组织表和索引的技术。 12 1、分区类型、分区类型 13 分区类型分区类型 范围分区(范围分区(Range PartitioningRange Partitioning) 哈希分区(哈希分区(Hash PartitioningHash Partitioning) 列表分区(列表分区(List PartitioningList Partitioning) 间隔分区(间隔分区(Interval Interval
7、 Extension to Range Partitioning Extension to Range Partitioning (11(11g g) ) ) (PARTITION BY RANGE(XXX) INTERVAL (NUMTOMYINTERVAL(1,MONTH) 参考分区(参考分区(Referential Partitioning (11Referential Partitioning (11g g) )) (PARTITION BY REFERENCE(外键约束) 虚拟字段分区(虚拟字段分区(Virtual Column Partitioning (11Virtual Col
8、umn Partitioning (11g g) )) (先定义一个虚拟字段YY AS .,然后 PARTITION BY YY) 系统分区(系统分区(system partitionsystem partition(11g11g) ( PARTITION BY SYSTEM ,由insert指定插入哪个分区) 复合分区复合分区 Range-Hash, Range-List Extensions in Oracle Database 11g List-Range Range-Range List-Hash List-List 14 2、分区索引、分区索引 15 分区索引分区索引 不分区不分区分
9、区分区 不分区不分区 分区分区 表 索引 表 索引 16 Global Nonpartitioned index Local partitioned index Global Partitioned Index 不同的分区索引不同的分区索引 绍兴绍兴杭州杭州温州温州 03年年04年年08年年 17 分区表与分区索引分区表与分区索引 与分区表类似(与分区表类似(partitioned tablepartitioned table),分区索引),分区索引 (partitioned indexpartitioned index)也能够提高系统的可管理性,)也能够提高系统的可管理性, 可用性,可伸缩性
10、,及系统性能。可用性,可伸缩性,及系统性能。 分区索引既可以与分区表相对独立(全局索引分区索引既可以与分区表相对独立(全局索引 (global indexglobal index),也可以采用与分区表相同的分),也可以采用与分区表相同的分 区方式(本地索引(区方式(本地索引(local indexlocal index)。)。 普通表可以建分区索引 分区表可以建非分区的global index,也可以建 range 或hash分区的global index,也可以建基于 分区的local index 18 Types of Index Partitioning Local (Partition
11、ed)Local (Partitioned) Pre-Fixed(前缀型) o分区键值是索引的键值或索引键值的第一个字段 Non Pre-Fixed(非前缀型) o分区键值不是索引键值或索引键值的第一个字段 Global (Partitioned)Global (Partitioned) Index is Partitioned using Range or Hash 索引分区键值必须与索引键值相同或左前缀(前缀 型) Global (NonGlobal (Non- -Partitioned)Partitioned) Normal B-Tree index 19 global index 全局
12、索引以整个表的数据为对象建立索引全局索引以整个表的数据为对象建立索引 全局索引和表之间没有直接的联系,这一点和本地索引不同。全局索引和表之间没有直接的联系,这一点和本地索引不同。 例例1 1:CREATE INDEX month_ix ON sales(:CREATE INDEX month_ix ON sales(sales_monthsales_month) ) GLOBAL PARTITION BY RANGE(GLOBAL PARTITION BY RANGE(sales_monthsales_month) ) (PARTITION pm1_ix VALUES LESS THAN (2
13、) (PARTITION pm1_ix VALUES LESS THAN (2) PARTITION pm2_ix VALUES LESS THAN (3) PARTITION pm2_ix VALUES LESS THAN (3) PARTITION pm3_ix VALUES LESS THAN (4) PARTITION pm3_ix VALUES LESS THAN (4) PARTITION pm4_ix VALUES LESS THAN (5) PARTITION pm4_ix VALUES LESS THAN (5) PARTITION pm5_ix VALUES LESS TH
14、AN (6) PARTITION pm5_ix VALUES LESS THAN (6) PARTITION pm6_ix VALUES LESS THAN (7) PARTITION pm6_ix VALUES LESS THAN (7) PARTITION pm7_ix VALUES LESS THAN (8)PARTITION pm7_ix VALUES LESS THAN (8) PARTITION pm8_ix VALUES LESS THAN (9) PARTITION pm8_ix VALUES LESS THAN (9) PARTITION pm9_ix VALUES LESS
15、 THAN (10) PARTITION pm9_ix VALUES LESS THAN (10) PARTITION pm10_ix VALUES LESS THAN (11) PARTITION pm10_ix VALUES LESS THAN (11) PARTITION pm11_ix VALUES LESS THAN (12) PARTITION pm11_ix VALUES LESS THAN (12) PARTITION pm12_ix VALUES LESS THAN (MAXVALUE); PARTITION pm12_ix VALUES LESS THAN (MAXVALU
16、E); 例例2 2:CREATE INDEX hgidx ON tab (CREATE INDEX hgidx ON tab (c1,c2,c3c1,c2,c3) ) GLOBAL PARTITION BY HASH (GLOBAL PARTITION BY HASH (c1,c2c1,c2) ) (PARTITION p1 TABLESPACE tbs_1, PARTITION p2 TABLESPACE tbs_2); (PARTITION p1 TABLESPACE tbs_1, PARTITION p2 TABLESPACE tbs_2); 20 local 分区分区 本地索引的分区和其对应的表分区数量相等,因此每个表分区都对应着相应的索本地索引的分区和其对应的表分区数量相等,因此每个表分区都对应着相应的索 引