当前位置:Gxlcms > mysql > OracleDatabasePartition技术

OracleDatabasePartition技术

时间:2021-07-01 10:21:17 帮助过:28人阅读

分区就是将一个非常大的table或者index 按照某一列的值,分解为更小的,易于管理的逻辑片段---分区。将表或者索引分区不会影响SQ

Partition介绍

分区就是将一个非常大的table或者index 按照某一列的值,分解为更小的,易于管理的逻辑片段---分区。将表或者索引分区不会影响SQL语句以及DML语句,就和使用非分区表一样,每个分区拥有自己的segment,因为,DDL能够将比较大的任务分解为更小的颗粒。分区表只有定义信息,只有每个存放数据的分区才有各自的segment。

就好象拥有多个相同列名,列类型的一个大的视图。

收益

使用分区功能,可以提供的收益,可以从下面几个方面阐述:

性能

可以减少检索数据的总量,因为拥有partitionpruing 以及partition-wise joins。

partition pruing:当谓词中(连接条件)带有partition key的时候,OracleDatabase可以自动的将不需要的partition裁剪掉,不需检索额外的partition 。

partition-wise joins:两个表做join的时候,partitionkey 作为连接条件,OracleDatabase可以将连接操作分成多个单表和每个partition的join piece。对于单线程来说,每次join的工作量小了,可以减少系统的开销。而对于多线程来说,每个join piece 都可以使用多线程,可以加快检索时间(但是消耗更多的cpu)。

管理

使用分区技术,可以将管理维护大表或者索引的操作,分成多个维护片段,可以更灵活的管理和维护这些schema object。举个具体的例子来说,这里有一个装有重要文件的重达100公斤的箱子,你需要将它搬到办公室去,这是非常累的,甚至是无法达成的。但是如果使用了分区技术,等于将100公斤的箱子10等分,这时候,就可以每次搬一个小箱子即可。

可用性

因为分区表中的每个分区在物理层面上都是隔离的------每个分区拥有自己的segment。所以当其中的一个分区不可用的时候,不会影响另外的分区。

Partition 分类

Partition可以简单分为范围、哈希、列表三种方式。以下说明了每种分区方式的适用场景。

Range Partitioning 适用场景

Range Partitioning 比较适用时间列,当然也有其他的适用场景,比如说那些连续的Column Value映射的行有特殊意义的,人的年龄、商品价位等。

11g开始,,支持一种新的RangePartition方式,Interval partition,它可以根据选项自动创建需要的分区。

List Partitioning适用场景
  • 相对于Range Partition ,适合分散的Column Value 映射的行有特殊意义的情况。比如说统计国内数据,可以使用区域来创建分区。这样可以在加载或者统计区域数据的时候更加有效率。
  • Hash Partitioning适用场景
  • 这个分区比较适合平均I/O的场景。比如说,有一个大表,经常被访问,那么大表所在的表空间上面的I/O操作将非常频繁,这个时候可以将Hash Partition 放在不同的表空间上(表空间在不同的物理磁盘上),平均每个磁盘上面的I/O负载。防止单一磁盘I/O负载过高的情况。(Hash partition 也支持partition pruing ,但这无疑是没有意义的)
  • 人气教程排行