【IT168 专稿】海量数据处理是衡量数据库数据处理能力的重要指标。为了提高数据库对大数据量处理性能,DM7实现了水平分区技术,以满足企业级应用对大数据量处理的性能需求。
概述
水平分区是按照设定的边界值把数据行映射到不同的分区中。
DM7支持三种水平分区方式,范围分区、哈希分区和列表分区,每种分区有各自的适用场景。技术人员可以根据系统数据分布特征和应用需求,选用合适的分区方式,设置每个分区的存储参数,达到均衡IO、降低维护成本和提高查询性能的要求。
功能介绍
下面分别对DM7支持的三种水平分区方式进行阐述。
(1)范围分区
范围分区按照分区列的范围值,把数据行映射到不同的分区,适用于数据行按照某种范围值分布。例如,产品销售表可以把日期列按月、季度或年划分,把同一时间段的数据集中存储,便于进行统计分析。
例1:
partition by range(sale_time)
(partition p1 values equ or less than(‘2001-12-31’),
partition p2 values equ or less than(‘2002-12-31’),
partition p3 values equ or less than(‘2003-12-31’);
例1中的范围分区表包含2个分区,其中P1分区的范围值<=(‘2001-12-31’);P2分区的范围值>(‘2001-12-31’) 并且<=(‘2002-12-31’);P3分区的范围值>(‘2002-12-31’) 并且<=(‘2003-12-31’)。
(2) 哈希分区
哈希分区按照分区列的哈希值来确定数据行映射到哪个分区,适用于数据分布没有规律,需要数据均匀分布的情况。通过在不同的I/O设备上进行散列分区,使得每个分区大小基本一致,达到均衡IO的目的。可以指定每个分区的名字,也可以直接指定数目来创建。
例2:
(partition p1, partition p2);
例3:
哈希分区支持例2和例3两种创建方式,均为创建2个子分区。
(3) 列表分区
列表分区按照分区列的离散值集,把数据行映射到不同的分区,适用于数据分布不连续,数据行在分区列的部分值集中分布。 例如,产品销售表可以把地区列作为分区列进行划分,在(‘北京’,‘上海’,‘天津’)直辖市作为一个分区,在(‘武汉’,‘西安’,‘成都’)省会城市作为一个分区,来统计产品在不同区域的销售情况。
例4:
(partition p1 values(‘上海’,’北京’,’天津’,’重庆’),
Partition p2 values(‘武汉’,’西安’,’成都’,’南京’));
例4创建的列表分区,包含2个子分区,其中city列数据为(‘上海’,’北京’,’天津’,’重庆’)的数据行存储在P1分区,city列数据为(‘武汉’,’西安’,’成都’,’南京’)的数据行存储在P2分区。
除了对分区表的基本功能支持,DM7对分区表的ALTER操作也进行了扩展。见表1所示:
表1 分区扩展功能表
增加分区 | 删除分区 | 合并分区 | 拆分分区 | 交换分区 | |
范围分区 | 支持 | 支持 | 支持 | 支持 | 支持 |
列表分区 | 支持 | 支持 | 不支持 | 不支持 | 支持 |
哈希分区 | 不支持 | 不支持 | 不支持 | 不支持 | 不支持 |
表1中的扩展功能描述为:
增加分区:新增一个子分区;
删除分区:删除一个现有分区;
合并分区:合并相邻的两个分区,两个分区的数据保存到新分区中;
拆分分区:把现有的一个分区分割为两个新分区,新分区的范围值不能与其他分区重复;
交换分区:把一个子分区与一张同构的普通表进行数据交换,可快速实现分区数据的迁出。
并行查询
分区表的DML操作会包含一个或几个分区子表,分区子表之间相互独立,如果可以并行处理分区子表,对分区表的查询效率会有较大的提升。基于性能优化的考虑,DM7实现了水平分区的并行查询。DM7会根据服务器CPU数目、分区表涉及到的子分区数目以及分区的代价,来确定查询的并行度,无需用户干预即可实现并行查询,满足用户对大数据量数据查询的性能需求。此外,对于DBA等有经验用户,也支持通过参数来控制并行度。
水平分区的优势
(1) 提高可用性
由于每个分区具有一定的独立性,如果某个分区损坏,其他分区仍是可用的。只要DML操作不涉及到损坏的分区,就不影响系统运行,可以在空闲时间对损坏分区进行修复。
(2) 降低维护代价
由于每个分区都是一个独立的对象,可以单独处理,对大表的维护可转换为对小分区的维护,可以大大降低维护成本。对单个子分区进行备份、恢复,对于大数据表,大大减少了数据备份恢复的时间,也更有针对性进行数据维护。
(3) 提高查询性能
当一个查询涉及多个分区扫描时,由于各个分区的扫描是相互独立的,DM7会启动并行执行的扫描方式。即结合系统的一些运行参数和需要扫描的子表数目,生成适当的扫描子任务放入任务队列进行并发处理。使得水平分区表并行查询性能有较大优势。根据测试结果,比普通表查询性能平均提升26%,比水平分区无并行平均有30%的性能提升。
例如:在TPC-H标准测试中,以Q6为例,对lineitem表进行单表查询,有4个过滤条件。相同的测试环境下,普通表耗时996毫秒,水平分区表并行查询耗时420毫秒,水平分区表无并行查询耗时905毫秒。从测试结果得出,并行查询比普通表高出57.8%,比水平分区无并行查询高出53.6%。
结论
DM7支持范围、哈希、列表三种水平分区方式,可以满足实际应用对大数据表操作的性能需求,把数据分而治之的设计思想,使得水平分区表的管理和维护变得简单。在分区表的DML操作中,结合并行查询技术,可以大大提升操作性能。