初探列式存储---BLU

传统的关系型数据库都是按照行记录进行存储数据,但是在有些场景,这个行存储方式并不能满足性能要求,尤其是OLAP库中,要按照某个字段纬度进行统计,例如查询男性用户的总数,在这个纬度查询中,是用户只需要某个列的数据,其它列的数据完全不需要,而传统的行存储数据库会将整行记录都读出来,这样会浪费很多IO,进而影响查询速度。

     为解决上述问题,数据库厂商退出列式存储数据库,列存储最大的特点是数据是按列存储的,比较适合OLAP应用中获取一部分列的场景。下图是列存储和行存储的区别

初探列式存储---BLU_第1张图片

  从上图可以看出,列存储是将原来行存储表,按照列拆分成多个小表进行存储,经过这种拆分,就将一张大表拆分成若干小表,进而提升查询速度

   db2 v10.5版本推出BLU特性,数据库支持列式存储表和行存储表共存,并且可以将行存储表转换成列式存储表,为提升查询速度,采用高度压缩技术,将用户进行压缩,大大减少存储空间,并且在用户查询数据时,不需要解压数据库,这样大大减少IO,进而提升查询速度。

    下面看看db2 v10.5怎么使用行存储特性,首先需要设置以下实例参数,开启BLU特性

   db2set DB2_WORKLOAD=ANALYTICS

重启实例之后生效

在使用BLU特性之后,需要按照实际需求,调整排序区大小SORTHEAP,SHEAPTHRES_SHR,如果设置过小,则会报以下错误

SQL0955C  Sort memory cannot be allocated to process the statement. Reason

code = "3".  SQLSTATE=57011


同时调整实例的并行参数,并行度可以参照机器的cpu核数

db2 update dbm cfg using INTRA_PARALLEL on

db2 update dbm cfg using MAX_QUERYDEGREE 2


下面是一个简单的创建列式存储模式的表sql

CREATE TABLE TEST  (

                  "ID" VARCHAR(10 OCTETS) NOT NULL WITH DEFAULT '' , 

                  "NAME" VARCHAR(10 OCTETS) )   

                 IN "IBMDB2SAMPLEREL"  

                 ORGANIZE BY COLUMN; 


ALTER TABLE TEST

        ADD PRIMARY KEY

                ("ID");


在使用列式存储表时,也有一些限制

  1. 不能创建索引

  2. 不能使用分区

  3. 不能使用optimizer hints

  4. 不能使用静态视图



db2提供工具,可以将行存储模式表,变成列式存储,方式如下所示

db2convert -d sample -z test -t test2



下面是我的公众号二维码,欢迎添加

你可能感兴趣的:(架构设计)