《DB2数据仓库集群设计.ppt》由会员分享,可在线阅读,更多相关《DB2数据仓库集群设计.ppt(40页珍藏版)》请在三一办公上搜索。
1、1,DB2数据仓库集群设计,日程,不同的并行类型 硬件软件DB2 DPF 并行架构数据库分区Database partitioning 服务器分区Server partitioningIO 并行物理数据库设计分区键Partitioning keys对性能和扩展性的影响应用并行何时分区?,目标,通过本文介绍,您将能够:理解不同种类的并行架构理解DB2 MPP并行架构的原理理解DB2是如何处理并行SQL的理解并行机制是怎样影响BI架构设计的知道何时需要进行数据库分区了解IBM BCU,从单处理器到大规模并行处理,支持海量数据库扩展性所有都并行(MPP支持)集成的数据仓库/商业只能函数开放的企业级解
2、决方案64位全面支持,单处理器,SMP,群集,MPP,相同功能所有架构 所有平台,平台:AIXHP/UXSolarisLinuxWindows,概念和术语,非共享体系架构Shared-nothing软件概念:应用(数据库/ETL等)并行处理单一任务的能力,每个子任务处理一部分数据大规模并行处理(MPP)硬件概念:一组服务器/节点,通过高速网络通讯,运行非共享应用(数据库、ETL等)群集大规模并行计算、各节点共享磁盘子系统;当一个节点宕掉,另一个能访问相同物理磁盘的节点将会接管失效节点的工作负荷。扩展性架构扩展能力:垂直扩展 通过增加单节点组件(CPU内存等)来扩展水平扩展 通过增加更多的节点来
3、扩展线性线性扩展 效率指标,增加资源将线性提升性能,分区数据库模型数据库被分为多个分区数据库分区可运行在不同的节点上每个数据库分区有独立的资源(引擎、日志管理、锁管理、缓存管理等)所有分区并行处理,由数据库系统进行统一协调和管理对用户和应用来讲是单一系统映象,高速通讯管理(FCM),数据,日志,数据库分区,DB2 非共享体系架构,DB2 数据库拓朴,高速网络,table,CPU,MEM,CPU,MEM,CPU,MEM,CPU,MEM,MPP 小服务器LinuxWindowsRS/SP,SMP 大服务器RegattaSun StarFireHP,CPU,MEM,CPU,CPU,CPU,table
4、,CPU,MEM,CPU,CPU,CPU,table,CPU,MEM,CPU,CPU,CPU,高速网络,群集SMP群集,数据库分区与节点关系,DB2实例目录,操作系统级:完全相同的user,group(包括user_id,group_id)设置共享目录,NFS或者GPFS,作为DB2的实例目录。确认所有服务器的hosts相同并包含所有的服务器名和IP地址。确保所有服务器的/etc/services中都包含DB2的服务端口确保所有服务器的/etc/filesystems中都配置了NFS挂载信息。,数据库分区与节点关系,#sqllib/db2nodes.cfg#0 node1 01 node1 1
5、2 node2 03 node2 1,节点1分区 0 在0号逻辑端口上监听,节点2分区 3 在1号逻辑端口上监听,节点2分区 2 在0号逻辑端口上监听,节点1分区 1 在1号逻辑端口上监听,db2nodes.cfgDB2 实例配置文件所有数据库共享该配置位于DB2实例目录Sqllib 在其中一个节点上NFS共享给其他节点,I/O 层次,页面Page读写的基本单位扩展块Extent分配的基本单位页面数可定制能且只能用于存放数据库的一个对象(表、索引)通常为大的块I/O大小容器Container DB2从中分配扩展块DMS文件(/hello.dat)DMS 裸设备(/dev/rhello)SMS:
6、目录(/hello)表空间Tablespace一组容器,Extent:一组页面,Page:4k,8k,16k or 32k,Container:包含扩展块的文件,Tablespace:表和索引的存放空间,Cont 1,Cont 2,Cont 3,总结:并行 I/O,buffer,Partition 0,buffer,Partition 2,buffer,IO,IO,IO,IO,IO,IO,IO,IO,IO,agent,agent,agent,Partition 1,coord,extents,i/o servers,Containers,Containers,Containers,db age
7、nts,并行预取,agent,agent,agent,创建单节点Partition Group,create database partition group sdpg on dbpartitionnums(0);create database partition group pdpg on dbpartitionnums(1 TO 8);,创建多节点Partition Group,创建跨节点表空间,create tablespace ts_demo in database partition group pdpg pagesize 4kmanaged by database using(fi
8、le/database/zhouxzh/tbs_demo$N 20M)extentsize 16 prefetchsize automatic bufferpool bp4k autoresize yes no file system caching;,DB2 表定义 从逻辑到物理,Physical Data ModelCREATE TABLE customer(cust_id INTEGER NOT NULL,tel CHAR(20),zip CHAR(5)NOT NULL,birth_date DATE NOT NULL,PRIMARY KEY(cust_id)DISTRIBUTE BY
9、HASH(cust_id)COMPRESS YESIN data_tbs;CREATE TABLE sales(cust_id INTEGER NOT NULL REFERENCES customer(cust_id),Foreign key(确保存在)sales_date DATE NOT NULL,region CHAR(5)NOT NULL,prod_id INTEGER NOT NULL PRIMARY KEY(cust_id,sales_date)Primary key(确保唯一)DISTRIBUTE BY HASH(cust_id)Partitionning key(分散数据)IN
10、 data_tbs;CREATE INDEX sales_cust ON sales(cust_id);Non unique index(加速查询),使用哈希(Hashing)和分区位图(Partition Map)自动分布数据,customer,sales,CREATE TABLE customer(cust_id VARCHAR(80),gender CHAR(5)DISTRIBUTE BY HASH(cust_id);CREATE TABLE sales(cust_id VARCHAR(80),qty INTEGER)DISTRIBUTE BY HASH(cust_id);,Hash(c
11、ust_id),数据分区 目标 1:保证数据跨所有分区平均分布,选择分区键 值多的字段数据分布均匀值少的字段导致数据不均匀某些分区比别的分区有更多的数据系统的性能取决于装载数据最多的分区的性能,CREATE TABLE customer(cust_id VARCHAR(80),gender CHAR(5),PRIMARY KEY(cust_id)DISTRIBUTE BY HASH(cust_id);,part0,part1,part2,part3,好!-所有分区相同的数据量,差!-某些分区装满了数据而其他的分区没有数据不均匀,数据分布 目标 2:优化连接处理和并行查询,Colocation连
12、接匹配的数据行位于同一个分区,否则将发生跨数据分区的数据迁移(非 colocated 连接)连接方法 访问路径选择嵌套循环Nested-loop排序归并Sort/merge哈希Hash笛卡尔连接Product join星型连接Star join分区和表队列广播Broadcast定向Directed(inner/outer)合并Merge例如:Select*from cust,sales where cust.cust_id=sales.cust_id,Partition 1,Partition 2,CUST cust_id其他字段,SALEScust_id其他字段,Partition 0Coo
13、rdinator,Colocation,概念如果一个查询需要连接两张或多张表,collocation可以保证在分区内部连接,无需将表重新做哈希分布否则,数据重定向将会发生实现如果所有连接的表在同一个数据库分区组,且分区键值有相同数量的字段,且分区健字段的数据类型成对兼容那么,具有不同表具有相同分区键的数据行将会存放在同一个数据分区,Collocated 连接,CUST和SALES 表的分区键均定义CUST_ID字段上连接将在每个数据库分区本地发生,Partition 1,Partition 2,CUST:pk(CUST_ID),SALES:pk(CUST_ID),1,3,2,Partition
14、 1,Scan CUSTApply predicatesScan SALESApply predicatesJoinInsert into q1,Partition 2,Scan CUST Apply predicatesScan SALESApply predicatesJoinInsert into q1,Partition 0,Read q1 Process Return results,q1,q1,1,1,3,2,2,广播连接,SALES 的分区键是 CUST_ID 字段CUST的分区键是另外一个字段CUST表数据将发送到有SALES表的所有数据库分区,Partition 1,Part
15、ition 2,SALES:pk(CUST_ID),定向的外表连接,CUST 的分区键是 CUST_ID字段SALES表的分区键是另外一个不同的字段SALES表用CUST_ID字段重新哈希,并发送到正确的数据库分区,Partition 1,Partition 2,Partition 0,Read q1 Process Return results,q1,q1,Scan SALESApply predicatesHash CUST_IDInsert into q2,Scan CUSTApply predicatesRead q2 JoinInsert into q1,Scan SALESAppl
16、y predicatesHash CUST_IDInsert into q2,Scan CUSTApply predicatesRead q2 JoinInsert into q1,Partition 1,Partition 2,CUST:pk(CUST_ID),SALES:pk(其他字段),1,1,3,2,2,1,3,2,1,2,2,2,定向的内表和外表连接,没有一张表的分区键是CUST_ID字段两张表均重新哈希,发送到新的数据库分区后再连接表队列q2 和q3都定向,Partition 0,Read q1 Process Return results,q1,q1,Partition 1,Pa
17、rtition 2,CUST:pk(其他字段),SALES:pk(其他字段),1,3,2,1,2,3,1,1,3,2,2,2,1,2,Insert/Select,CREATE TABLE T1(col1,col2)PARTITIONING KEY(col1);CREATE TABLE T2(col1,col2)PARTITIONING KEY(col1);INSERT INTO t2 SELECT*FROM t1;,CREATE TABLE T1(col1,col2)PARTITIONING KEY(col1);CREATE TABLE T2(col1,col2)PARTITIONING KE
18、Y(col2);INSERT INTO t2 SELECT*FROM t1;,分区键选择,做:分区键包含表连接中需要经常使用的字段分区数据均匀分布分区键取值更广泛整形字段比字符型字段更高效、字符型比十进制数据类型更高效不做:长型字段不运行唯一索引或主键必须是分区键的超集分区键不允许更改避免更新分区键字段V8.2开始提供分区建议向导,数据迁移-Import,Import程序将输入文件数据插入表或可更新视图,如果接收数据的表或视图已经包含数据,可以选择替换或追加方式导入数据,迁移数据-Import 使用缓冲区方式,使用缓冲区模式下装载效率更高,因为数据在缓冲区满时发送到目标数据库分区,绑定选项:i
19、nsert buf,迁移数据 并行插入,需要写程序将数据哈希分区到正确的分区产品如Ascential Parallel Extender提供并行插入支持,迁移数据-DB2 Load,协调程序Coordinator创建并监控其他代理预分区代理Pre-partitioning agent 每个输入源一个代理运行在协调分区上分区代理Partitioning agent代理数量和运行的分区可配置介质读程序Media reader 每个目标分区一个,file,file,DB2 SQL:并行方式思考,DB2 SQL非常强大,几乎在所有情况下,在数据库中执行完整的SQL比应用程序从游标中选择获取更快、扩展性
20、更强获取数据行是串行的,在ETL处理中应尽量避免(除非使用并行实用程序,如Ascential Parallel Extender 或Ab Initio)在任何情况下,运行EXPLAIN 观察在协调节点上运行的子任务:触发器SQL/PL,并行SQL举例,BEGIN ATOMICFOR row AS SELECT new.cust_id,new.gender,old.cust_id old_cust FROM dss.customer_staging new LEFT OUTER JOIN dss.customer old ON new.cust_id=old.cust_id DO IF row.
21、old_cust is NULL THEN INSERT INTO dss.customer VALUES(row.cust_id,row.gender);ELSE UPDATE dss.customer SET gender=row.gender WHERE cust_id=row.cust_id;END IF;END FOR;END,MERGE INTO dss.customer AS old USING dss.customer_staging AS newON old.cust_id=new.cust_idWHEN MATCHTHEN UPDATE SET old.gender=new
22、.genderWHEN NOT MATCHEDTHEN INSERT VALUES(new.cust_id,new.gender);,游标处理将会慢(在协调节点上每次处理一行)-有限的扩展性,功能上和上述等价,但是运行更快(所有数据分区并行处理)-高扩展性,为什么要分区?,查询扩展性架构限制数据装载维护操作并行插入/删除备份和恢复恢复日志,查询扩展性,最显著的原因之一将一个大的数据库分成多个小的数据库可以提高查询的性能,因为每个数据库分区拥有自己的一小部分数据假设您想扫描1亿条记录对一个单一分区的数据库来讲,该扫描操作需要数据库管理器独立扫描一亿条记录如果您将数据库系统做成50个分区,并将这1
23、亿条记录平均分配到这50个分区上,那么每个数据库分区的数据库管理器将只扫描200万记录,架构限制,在DB2 V8和以前版本,非分区的最大的表取决于页面大小64 GB 到 512 GB这是表空间限制造成的表和表空间大小限制是每个分区上的限制 因此将数据库分成N个分区可以将表的最大尺寸增加为单个分区表最大尺寸的N倍内存也可能是个限制,特别是在32为操作系统环境因为每个数据库分区管理并拥有自己的资源,因此通过数据库分区可以克服这个限制,数据库装载,可并行装载数据到所有数据库分区,极大减少单表的装载时间数据装载的时间特别重要,特别是我们期望一个实时商业智能系统时,数据库维护,将数据库分散到多个数据库分
24、区服务器可以加快系统维护,因为每个操作都运行在分区所管理的一个数据子集上面尽管DB2中创建索引是并行的,您可以通过数据库分区进一步减少创建索引的时间分区数据库环境可以减少搜集统计信息的时间,因为runstats仅运行在一个数据库分区上面 在DB2 V8中,Runstats取样选项可以进一步减少运行时间(有无数据库分区均可)将数据库分区可以减少表重整(reorg)的时间,并行INSERT/DELETE,一个数据库分区内部并行SQL操作在一个使用SQL大量并发插入和删除的数据库环境中,多个数据库分区可以提高交易的吞吐量,因为所有数据库分区都在并行处理插入和删除,这个好处也体现在insert/sel
25、ect中,备份/恢复,将数据库分区到不同的数据库服务器上可以大大减少数据库备份的时间,这往往是觉定是否使用数据库分区很重要的一点DB2通过为每个表空间分配独立的进程或线程来实现备份和恢复操作的并行处理的。在分区数据库环境的备份中,每个分区的备份是独立的,通过并行备份数据库分区可以大大减少备份整个数据库的时间,恢复,分区数据库环境可以加速前滚和重启恢复 在分区数据库环境中,必须前滚的日志对每个分区是特有的,对每个数据库分区“分而治之”的策略可以加速整个处理过程,如果每个数据库分区不需要前滚,在重启恢复中将跳过,日志,在高度活动的系统中,数据库日志的性能可能会限制系统的整体吞吐量。在分区数据库环境中,每个分区有自己一套日志。当大量插入、更新、删除操作时,多个数据库分区可以提高性能,因为日志是在每个数据库分区上是并行写的,且每个单一的分区需要记录的日志更少。,扩展性,DB2随数据量或处理器和分区的增加,提供近线性的扩展能力可是,数据库分区是否提供最多的益处依赖于处理的工作负荷、最大表的大小及其他因素,