【IT168 专稿】5月18日消息,达梦即将推出新一代高性能数据库产品DM7.0。7.0版本在设计上延续了DM6.0开放的可扩展体系结构、高效的事务处理能力、海量的数据存储管理以及低廉的维护成本,在研发上秉持了达梦公司一贯的完全自主开发、完全自主知识产权的创新精神。DM7.0将极大提升达梦数据库产品性能:在可扩展性、高并发、海量数据管理、安全管理、PL/SQL、大对象支持、数据字典、数据处理、性能监控等方面全面提升,能更好的适应各种行业、各种环境下的各类应用需求。
为此,我们将推出系列文章,来为大家介绍DM7.0的新特性。今天,我们为大家介绍DM7.0的新特性之一:水平分区!
1、概述
在大型的企业应用或企业级的数据库应用中,要处理的数据量通常可以达到TB级。为了提高数据库在大数据量读写操作和查询效率,达梦数据库DM7提供了对表和索引进行分区的技术,以改善大型应用系统的性能。
DM7提供了最常用的范围分区方法,包括范围、哈希和列表,企业可以使用合适的分区方法,如日期(范围)、区域(列表),对大量数据进行分区。由于DM7划分的分区是相互独立,并可以存储于不同的存储介质上,完全可满足企业高可用性、均衡IO、降低维护成本、提高查询性能的要求。
2、功能简介
达梦数据库DM7对表提供以下三种分区方式:
1) 范围分区:范围分区就是对表中的某些列上值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。
2) 哈希分区:哈希分区是通过指定分区编号来均匀分布数据的一种分区类型,通过在I/O设备上进行散列分区,使得这些分区大小基本一致。
3) 列表分区:列表分区是通过指定表中的某些列的离散值集,来确定应当存储在一起的数据。例如,可以对表上的status列的值在(‘A’,‘H’,‘O’)放在一个分区,值在(‘B’,‘I’,‘P’)放在另一个分区,以此类推。
例如,在员工表EMPLOYEE上建范围分区,其部门号DEPT_ID小于5在分区P1,5到9之间的在分区P2,10到15之间在分区P3,那么部门id相近的员工信息就会存储在相同的分区中。
EMP_ID INT,
EMP_NAME VARCHAR(200),
DEPT_ID INT
)
PARTITION BY RANGE (DEPT_ID)
(
PARTITION P1 VALUES LESS THAN (5),
PARTITION P2 VALUES LESS THAN (10),
PARTITION P3 VALUES EQU OR LESS THAN (15)
);
DM7采用子表方式创建分区表,如上述的EMPLOYEE表,是分区表的主表,而每一个分区,会以一个子表作为实体而存在。即每一个分区都是一个完整的表,命名为主表名_分区名,如EMPLOYEE表的分区P1对应子表为EMPLOYEE_P1,并且子表跟主表结构完全一致。在DM7水平分区中,主表本身不存储数据,所有数据只存储在子表中,从而实现不同分区的完全独立性。
除了新增分区表,DM7还支持对子分区的修改。对于所有类型的分区表,DM7支持新增和删除分区,这对大规模数据应用系统提供灵活的分区管理功能。对于范围分区,DM7提供相邻分区的合并和拆分的功能,有利于范围分区子表的规模控制。另外,DM7支持分区数据跟普通表数据交换功能(partition exchange),使得分区数据管理更加灵活。
3、DM7水平分区的优势
分区有利于管理非常大的表和索引,引入了分区键的概念,使数据可以根据某些列的范围值、哈希函数值或者特定值列表执行数据的聚集。使用达梦水平分区,可以大大提高数据的可用性以及查询性能。
3.1 提高可用性
由于每个分区具有一定的独立性,对象中一个分区的可用性并不影响其他分区,如果某个分区被损坏,其他分区仍是可用的。
例如,如果上文提到的员工表EMPLOYEE每个分区都存储在不同的磁盘上,而P2分区所在的磁盘介质发生损坏。假设整个员工表有30GB的数据,每个分区平均10GB,那么故障恢复时间就会降为原来的1/3。
另外,对于分区表,每一个分区都对应一个分区子表,DM7支持对分区子表的单独操作,其DML操作跟普通表一致。例如,加入员工表的P2分区损坏了,仍然可以查询P1分区上的数据,从而大大提高系统的可用性。
3.2 降低维护代价
由于每个分区都是一个独立的对象,可以单独处理,对大表的维护可转换为对小分区的维护,可以大大降低维护成本。
例如,一个销售系统中ORDERLINE表需要维护最近12个月的订单信息,超过12个月的订单需要迁移到该月的历史订单表中(销售系统每一个月的订单记录分别存储在各自的历史表中)。如果没使用水平分区,需要较多的删除和插入操作,并产生大量的redo和undo日志。如果使用分区表,并且按照月份做范围分区,那么可以使用交换分区来实现分区和普通表数据的交换。
假设需要删除的分区是O_P_L,对应的销售历史订单表是O_H_L,那么只需执行以下命令即可满足销售系统的需求。
ALTER TABLE ORDERLINE EXCHANGE PARTITION O_P_L WITH TABLE O_H_L;
--删除原分区
ALTER TABLE ORDERLINE DROP PARTITION O_P_L;
通过交换分区实现分区O_P_L和表O_H_L的数据交换,采用数据字典信息交换的技术,几乎不涉及IO操作,因此效率非常高。
3.3 提高查询性能
通过水平分区,原主表的数据会根据分区键形成新的聚集,达梦优化器可以根据查询条件确定所需访问的分区(分区消除),减少很多不必要的分区访问,大大降低扫描的IO量,从而提高性能。
另外,在一个服务器上安装更多的CPU以及CPU的多核化已经是一个趋势。DM7逐渐跟上了硬件发展的步伐,针对水平分区,利用多CPU的特性,提供并行查询。
当一个查询涉及多个分区扫描时,由于各个分区的扫描是相互独立的,DM7对每个分区启动并行执行的扫描方式。即结合系统的一些运行参数和需要扫描的子表数目,生成适当的扫描子任务放入任务队列进行并发处理。通过对水平分区表的并行查询,可以大大提升查询效率。
4、结论
随着Internet的发展,数据库应用的大小和规模都在增长,这将导致越来越多庞大的数据集合,那么对数据进行分区显得越来越重要。DM7提供了最常用的三种水平分区机制,包括范围分区,哈希分区和列表分区,可以将大量数据划分为相互独立的小分区,满足大部分的应用需求。使用DM7水平分区,结合并行查询和分区消除,可以大大提升查询性能,并且由于分区的独立性,数据库的可用性可得到大幅度提升,并能降低维护代价,适用于大型数据仓库和事务处理应用系统。