Some DPF notes

转自:http://www.db2china.net/home/space.php?uid=101123&do=blog&id=37899

Some DPF notes

 1、体系结构

1. DPF适合数据仓库和数据分析, 当数据量达到10T的时候Db2会遇到性能问题,考虑使用DPF

2. 做数据仓库好的产品:Teradata/Greenplum/Netezza(都是一体机)  DPF

3. CAP:(一致性,高可用性,分区)只能达到两条,(高可用/分区独立性不可兼顾),DPF(MPP)只能解决CP,不能解决高可用性。

4. sql-->nosql(not onlysql)-->newsql(在hadoop之上写的sql)

5. purescale是一个集成架构,使用客户不多,有一些问题,实验室已经快放弃对其支持.

6. nfs优缺点,优点:稳定,成本低。缺点:1)因为是主从,如果server出问题,那client不能用,2)数据不能放nfs上。

7. 徐做过测试,db210.5blue性能还不如DPF

8. 多分区架构特点:

Share-nothing的体系结构

每个分区有自己的存储、bufferpool、锁

无限扩展能力(最多999个节点)

并行计算处理

适合数据仓库和数据分析

 

 

2、DPF数据库对象

1. db2 oralce  teredata,orace强项在交易,db2在分析(查询快)

2. 建索引是: 新版本是32k

3. 根据分区键字段value的hash值找到对应的分区。

4. dpf最影响性能的因素: 分区键,IO规划(DPF怎么建,储存怎么映射),sql语句

5. 常规单分区:实例,库,表空间,表

      DPF: 实例,库,分区组,分区,表空间,表

6. node和partition一样。dB2分区节点都是逻辑概念,aix上的airp可以对应

换了主机名(hostname)之后需要改db2nodes.cfg

/etc/service每个节点机器上都要有一份copy过去。

7. 实例路径:

node 0所在server上的实例路径被其他node所在server上通过nfs/gpfs所共享,实例目录可以通过 db2greg -dump得到(I: instance)

8. 实例启动:在0节点db2start

9. DPF节点配置文件db2nodes.cfg

Path: 实例路径下: $HOME/sqllib/db2nodes.cfg

0 bldbzt0084 0

1 bldbzt0085 0

2 bldbzt0085 1

3 bldbzt0085 2

4 bldbzt0085 3

5 bldbzt0085 4

6 bldbzt0085 5

7 bldbzt0085 6

8 bldbzt0085 7

第一列:node(partition)号. 一般0节点独占一个server,是主节点,负责分发数据,任务重,适合存放小表,字典表。其他节点被称为数据节点,放大表。

第二列:主机名字,hostname。如果主机名字做了修改,此处需要修改。

第三列:端口号port,每个server上有多少个node就必须分配多少个port,比如bldbzt0085上有1-8的8个节点,那port就是0-7的8个port,即单个server上每个node的port是唯一的。

       (注:此处0--7是port的逻辑序号,具体port值在/etc/services中)

 

10. 查看当前节点:

db2 query client

        CONNECT_MEMBER   = 0

        ATTACH_MEMBER   = 0

则当前节点就为0,如果返回-1表示还没有指定node,如果没有设定,则默认为port0对应的node,

如上例,bldbzt0084上port0对应0节点,bldbzt0085server上port 0 对应node 1.即为他们的默认node

 

11. DPF对象体系结构:

实例-->数据库-->分区组(包含N个分区)-->表空间-->表

表空间建立在分区组中,表建在表空间中; 分区组包含一个或多个分区;

 

12. 数据分发

0节点:存放小表,字典表,因为0节点任务重,分发数据。

哈希函数根据分区映射图将数据散列到相关分区. 通过分区键的hash值去寻找对应分区, 比如分区键EMPNO=000120的hash值为9对应的分区为node1

 

13. 创建DPF分区组/表空间/表        (refer to Xu(2)DPF数据库对象.pdf)

分区组包含db2nodes.cfg里定义的分区

1) 创建分区组:

CREATE DATABASE PARTITION GROUP pg_data ONDBPARTITIONNUMS(1,2,3)

三个缺省的分区组:

IBMCATGROUP: 包含系统表空间,只在0节点

IBMTEMPGROUP:系统临时分区组,跨所有节点

IBMDEFAULTGROUP: 包含用户定义数据,跨所有节点

 

2) 表空间创建在分区组里,创建表空间:

CREATE TABLESPACE tbs_ods in database partitiongroup pg_data managed by database

USING (file '/data2/datats/cont1' 10M) ondbpartitionnum(1)

USING (file '/data2/datats/cont2' 10M) ondbpartitionnum(2)

USING (file '/data2/datats/cont3' 10M) ondbpartitionnum(3)

bufferpool bp_data;

 

3) 在表空间里创建表:

CREATE TABLE ORDERS

(ordernum int not null,

orderdate date not null)

DISTRIBUTE BY HASH (ordernum) intbs_ods

 

14. 查询数据在各个分区的分布倾斜情况

db2 "select dbpartitionnum(id), count(*)from ORDERS group by dbpartitionnum(id)"

 

15. 常见DPF查询命令

1) 查看分区个数:

db2 list DBPARTITIONNUMS

 

2) 查看分区组:

db2 list db partition groups [show detail]

 

3) 查看节点(同1)):

db2 list nodes

 

4) 查看当前节点:

db2 query client

-1表示默认节点(本server上port0对应的节点)

 

5) 切换分区节点:

export DB2NODE=2

db2 terminate

 

 

6) 查看启动的分区节点:

ps -ef|grep db2sysc

 

7) 列出某个表空间所在的分区:

db2 "select substr(b.tbspace,1,20) asTBSNAME, a.DBPARTITIONNUM as DB_PARTITION_NUM from syscat.dbpartitiongroupdefas a, syscat.tablespaces as b where a.DBPGNAME = b.DBPGNAME andb.tbspace = 'ESA_DIMS_INDX' "

 

8) 查看分区组包含的分区:

select * from syscat.dbpartitiongroupdef;

 

syscat.tablespaces 和syscat.dbpartitiongroupdef联合查询,能得到分区组对应的表空间的详细信息:

db2 "select char(tbspace,20) as tablespace_name, tbspaceid,char(x.DBPGNAME, 20) as partitiongroup_name, z.pmap_id, y.dbpartitionnum aspartition_num, y.in_use from syscat.tablespaces x, syscat.dbpartitiongroupdefy, syscat.dbpartitiongroups z where x.DBPGNAME = y.DBPGNAME and y.DBPGNAME =z.DBPGNAME order by tbspaceid, y.dbpartitionnum"

notes: 临时表空间显示不了,因为临时表空间在syscat.dbpartitiongroupdef中没有存储.

 

16. DPF表空间备份

 db2 "backup dbesadm on all dbpartitionnums tablespace (ESA_PMHIST_P) online to/dev/null"

可用于fix表空间backuppending,用于对一个表空间ESA_PMHIST_P分布在不同的node上的情况。

 

17. 分区特性建表语句对比

CREATE TABLE 语句中的子句

DB2 特性名称

DISTRIBUTE BY HASH

DPF —— 数据库分区特性

ORGANIZE BY DIMENSION

MDC —— 多维聚类

PARTITION BY RANGE

TP —— 表分区

e.g.

1) table partition – 表分区

Create table TP_ATABLE(

)INDEX IN "ESA_PMHIST_IDX_P" PARTITION BYRANGE("DATA_PERIOD_KEY", "CRM_INSTANCE_CODE")

(PART "WEEK20090128_EM" STARTING(3495,'30')ENDING(3495,'30') IN "ESA_PMHIST_P",

 PART"WEEK20090128_AM" STARTING(3495,'AM') ENDING(3495,'AM') IN"ESA_PMHIST_P",

 PART"WEEK20090128_AP" STARTING(3495,'AP') ENDING(3495,'AP') IN"ESA_PMHIST_P",

 

2) DPF — 数据库分区

Create table DPF_ATABLE(

) COMPRESS YES ADAPTIVE 

  DISTRIBUTE BYHASH("DATA_PERIOD_KEY")  in ESA_SUM;

 

3)DPF/TP ---同时是数据库分区和表分区

Create table DPF_TP_ATABLE(

) COMPRESS YES ADAPTIVE 

  DISTRIBUTE BYHASH("DATA_PERIOD_KEY")  

  INDEX IN"ESA_SUM_IDX" PARTITION BY RANGE("DATA_PERIOD_KEY","GEO_KEY")

 (PART"WEEK20090128_AM" STARTING(3495,51) ENDING(3495,51) IN "ESA_SUM",

  PART"WEEK20090128_AP" STARTING(3495,52) ENDING(3495,52) IN"ESA_SUM",

  PART"WEEK20090128_EM" STARTING(3495,53) ENDING(3495,53) IN "ESA_SUM",

 

 

 

 

 

 

3、分布键设置注意事项

 

1. 分布键设计原则

一.分区键必须确保数据分布均匀,选择不同值基数比较大的字段

二.分区键必须作为主键或唯一索引的一部分

三.尽可能使用尽量少的字段作为分区键,最好选择1个字段作为分区键

四.频繁join的一些字段作为备选

五.考虑所有表中哪些字段包含的最多,比如对于银行业务来说,账号、卡号或客户号可能是用的最多的字段

六.根据业务类型确定合适的分布键,主键最好和业务场景有关联

七.避免选择时间、短字符串、值域窄(如交易类型)类字段

八.适合作为分区键的数据类型,int>char>decimal

 

 

2. 分布键对性能问题的影响

一.如果join条件使用的是两个表的分布键,join会分别在各个分区内进行,结束后对结果进行汇总。这样每个分区处理的都是小数据量的join,可以产生最佳的性能。

二.Join条件使用了其中一个表的分布键,另外一个表会按照使用表的分布键进行定向重新分布。

三.Join条件没有使用任何一个表的分布键,DB2会选择其中一个小表做广播,将数据在每个节点都复制一份,这种方式对资源的消耗最大,也是最差的场景,必须想办法避免。

 

3. 考虑因素

一.设计数据库分布键后的数据分布情况

二.SDM层到FDM层的ETL过程,尽量在分区内进行

三.应用程序或下游系统抽数时多表关联的连接条件

四.当前表的分布键设计要支持即将上线的系统,如GDM

五.确保查询连接再各自分区内完成,充分发挥DPF的优势

六.尽量为所有表都定义主键

七.优先完成FDM层的分区键设计

八.根据映射关系选择SDM层的表分区键

4. 针对ODS平台现状的分布键设计

1.单字段主键的表,主键作为分布键;

2.多字段作为复合主键的表,选择一个作为分布键

3.无主键的表,结合业务和数据分布规则,确定分布键

4.数据量小的代码表放在单分区,大于5万行数据的代码表放在多分区

5.汇总类的、数据量较小的报表,建议放在单分区

 

5. ETL程序中临时表的分布键选择

一.基本规则与普通表的分布键选择方式相同

二.简单情况下,临时表的分布键与原表的分布键相同

三.如果临时表是通过几张表关联而来,分布键选择有所不同

 

赞同1

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26224914/viewspace-2122327/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26224914/viewspace-2122327/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值