分区
可获得性
本特性自openGauss 1.1.0版本开始引入。
特性简介
数据分区是在一个节点内部对数据按照用户指定的策略做进一步的水平分表,将表按照指定范围划分为多个数据互不重叠的部分。
客户价值
对于大多数用户使用场景,分区表和普通表相比具有以下优点:
- 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。
- 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。
- 均衡I/O:可以把不同的分区映射到不同的磁盘以平衡I/O,改善整个系统性能。
特性描述
目前openGauss数据库支持范围分区表、列表分区表、哈希分区表、间隔分区表、二级分区表:
-
范围分区表:将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的。
范围分区功能,即根据表的一列或者多列,将要插入表的记录分为若干个范围(这些范围在不同的分区里没有重叠),然后为每个范围创建一个分区,用来存储相应的数据。
-
列表分区表:将数据基于各个分区内包含的键值映射到每一个分区,分区包含的键值在创建分区时指定。
列表分区功能,即根据表的一列或多列,将要插入表的记录中出现的键值分为若干个列表(这些列表在不同的分区里没有重叠),然后为每个列表创建一个分区,用来存储相应的数据。
-
哈希分区表:将数据通过哈希映射到每一个分区,每一个分区中存储了具有相同哈希值的记录。
哈希分区功能,即根据表的一列,通过内部哈希算法将要插入表的记录划分到对应的分区中。
-
间隔分区表:间隔分区是一种特殊的范围分区,相比范围分区,新增间隔值定义,当插入记录找不到匹配的分区时,可以根据间隔值自动创建分区。
-
二级分区表:二级分区表是在一级分区的基础上再进行分区,分区方案是由两个一级分区的分区方案组合而来的,目前二级分区表支持范围分区,列表分区,哈希分区交叉组合的9种分区策略。
用户在CREATE TABLE时增加PARTITION参数,即表示针对此表应用数据分区功能。用户可以在实际使用中根据需要调整建表时的分区键,使每次查询结果尽可能存储在相同或者最少的分区内(称为“分区剪枝”),通过获取连续I/O大幅度提升查询性能。
实际业务中,时间经常被作为查询对象的过滤条件。因此,用户可考虑选择时间列为分区键,键值范围可根据总数据量、一次查询数据量调整。
特性增强
支持范围分区表的合并功能。
性能增强
openGauss 6.0.0-RC1版本性能增强:
- List分区增强:List分区检索由原先顺序检索修改为Hash检索,大幅提升在多List分区场景下分区表的性能。
- 分区索引可见性优化:分区表索引可见性调整至syscache中,提升优化器阶段索引可见性判断性能。
- 取消计划缓存冗余有效性判断,采用消息机制通知的方式维护计划缓存的更新,提升了PBE执行性能。
- 优化在非分区表达式分区表下的分区表的执行逻辑。
在多分区表场景(大于3000分区),TPCC数据导入耗时下降13%,TPCC性能提升30%。分区表数据操作(查询、插入、更新、删除等)耗时下降50%,
特性约束
无。
依赖关系
无。
#openGauss #入门 #数据库 #开源