ITPub博客

首页 > Linux操作系统 > Linux操作系统 > RANGE分区的规范

RANGE分区的规范

原创 Linux操作系统 作者:DataKW 时间:2013-05-19 22:17:27 0 删除 编辑

RANGE分区的规范

原则

大数据量的表需进行分区化

衡量

当表的数据量超过500万, 请数据组参与设计成分区表,当表的数据量超过5000万,请DBA参与设计

方法

SQL常依据某列的范围访问表,则对表使用RNAGE分区,常见情况是SQL根据时间范围进行查新,则使用时间字段作为分区关键字进行RANGE分区;

将对表的多种访问结合考虑来确定分区的细度:

1.大多数SQL操作的分区关键字值的范围;

2.数据维护的需要,比如以月为单位删除历史数据;

3.数据访问的性能,以操作范围确定的分区数据量还是过大,比如大于500万,则还需要进行细分;

4.一个分区的数据量要小于500万,这是一个硬性的尺度,但从技术上来看,每个分区10万数据量的情况比每个分区20万数据量的情况要快很多,所以需要灵活掌握;

实施

1.当各个分区中的数据能均等划分时性能最好,如果相差太大,则考虑采用其它分区,或者将大数据量的分区再进行HASH子分区;

2.各分区采用各自的表空间存储,使用user_tab_partitions字典来查看确定每个分区的表空间位置;

3.分区表的索引采用本地索引,因为常会根据分区关键字(比如时间)进行分区维护(比如删除1年前的数据,也就是删除1年前的分区),分区维护时全局索引会失效,而本地索引不会失效,这能保证访问表时索引正常可用;

 

3.2、LIST分区的规范

原则

大数据量的表需进行分区化

衡量

当表的数据量超过500万, 请数据组参与设计成分区表,当表的数据量超过5000万,请DBA参与设计

方法

SQL常居于某列的散列值访问表,则对表使用LIST分区,LIST分区不支持多列分区关键字;常见情况针对某个地区或者某个业务进行数据访问,那么就使用地区编号或者业务编号作为分区关键字;

将对表的多种访问结合考虑来确定分区的细度:

1.一般使用一个分区关键字的值来划定一个分区;

2.可以把分区关键字的值相对应数据比较少的几个分区合并作一个分区;

3.如果一个分区关键字值所对应的数据量过大,比如大于500万,则应该对表采用RANGE分区,对该值的分区再采用HASH子分区;也就是说,一个可以采用LIST分区的表,肯定可以转化成RANGE分区(可带子分区),反之不然;

4.一个分区的数据量要小于500万,这是一个硬性的尺度,但从技术上来看,每个分区10万数据量分区方法比每个分区20万数据量的分区方法要快很多,所以需要灵活掌握;

实施

1.各分区采用各自的表空间存储,使用user_tab_partitions字典来确定每个分区的表空间;

2.分区表的索引采用本地索引

 

3.3、HASH分区的规范

原则

大数据量的表需进行分区化

衡量

当表的数据量超过500万, 请数据组参与设计成分区表,当表的数据量超过5000万,请DBA参与设计

方法

SQL访问表不按照某列的范围进行,也不按某列离散值进行,而且对该表的数据不会依据某列的值范围或者离散值进行定期维护,那么使用HASH分区;HASH分区是不知道应该选择何种分区时的选择;HASH分区的各分区都可能存有各种情况的数据,故而不能用于依据分区清理数据的情况;

对确定分区细度的考虑:

1.依据分区的数据量规划和表的最大数据量来确定分区数;

2.一个分区的数据量要小于500万,这是一个硬性的尺度,但从技术上来看,每个分区10万数据量分区方法比每个分区20万数据量的分区方法要快很多,所以需要灵活掌握;

实施

1.各分区采用各自的表空间存储,使用user_tab_partitions字典来确定每个分区的表空间;

2.对于HASH分区表,大多数情况下依然要求采用本地索引,但是如果分区过细,也可以采用全局索引,因为根据HASH分区表的特征(各分区无业务区分,都有数据),该表很少会发生分区维护的工作;

 

3.4、RANGE-LIST分区的规范

原则

大数据量的表需进行分区化

衡量

当表的数据量超过500万, 请数据组参与设计成分区表,当表的数据量超过5000万,请DBA参与设计

方法

SQL访问表时,既依据某列值的范围,又依据其他列的离散值或者范围,这种情况下采用RANGE-LIST复合分区,常用于语表中的数据需要依据一个时间字段做周期性删除等维护,并且正常业务SQL访问既依据时间字段,又依据其他字段的散列值进行访问的情况;

比如:电信增值业务计费表,既有时间又有业务属性列,统计的时候,会选择时间范围和业务属性,所以可以以时间列为分区关键字建立RANGE分区,以业务属性列为关键字建立LIST子分区;

分区划分的方法:

1.就按照大多数范围访问的范围值来划定RANGE分区的范围,依据单个LIST子分区关键字的值来划分子分区;

2.如果LIST子分区中数据量较小而且又常被一起访问的子分区可以合并成一个子分区;

3.如果LIST子分区中一个子分区关键字值对应的子分区数据量还是很大,超过500,影响性能,那么可以通过细分RANGE分区来达到减少LIST子分区数据量的目的,这点和LIST分区在该情况下的处理方法(转化成RANGE-HASH)不同;

实施

1.各子分区应该尽量分散到不同的表空间中存储,使用user_tab_subpartitions字典来确定每个子分区的表空间;

2.RANGE-LIST大多数情况采用本地索引,因为常根据RANGE分区关键字的来进行分区维护;

3.5、RANGE-HASH分区的规范

原则

大数据量的表需进行分区化

衡量

当表的数据量超过500万, 请数据组参与设计成分区表,当表的数据量超过5000万,请DBA参与设计

方法

SQL访问表时,主要依据某个列的范围进行访问,即访问特征符合RANGE分区的要求,或者数据维护特征符合RANGE分区的要求,但是以SQL或者维护的数据范围来划定分区,分区数据量又很大,对性能有影响,需再进行子分区,由于分区中的数据都会被访问到,所以子分区采用HASH方法,整个表就是RANGE-HASH分区;

划定分区的方法:

先按照大多数范围访问的范围值来划定RANGE分区的范围,再依据性能情况来确定HASH子分区的数据量;

实施

1.各子分区应该尽量分散到不同的表空间中存储,使用user_tab_subpartitions字典来确定每个子分区的表空间;

2.RANGE-HASH大多数情况采用本地索引,因为常根据RANGE分区关键字的来进行分区维护;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/27573546/viewspace-761475/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 表的设计规范
下一篇: 索引的设计规范
请登录后发表评论 登录
全部评论

注册时间:2012-08-12

  • 博文量
    132
  • 访问量
    331526