DB2分区数据库浅析

1、概念描述

DB2 数据库分区是 DB2 企业版 DPF(Data Partitioning Feature)选件提供的,它主要用来个分区(逻辑的或物理的)上分布大型数据库提供了必要的可伸缩性,并利用了一个无共享(shared-nothing)结构。数据库在一个非共享的环境中被分解为独立的分区,每个分区都具有自己的资源,例如内存,CPU 和磁盘以及自己的数据、索引、配置文件和事务日志。数据库分区有时称为节点或数据库节点。通过 DPF“分治”的处理,可伸缩性可在单一服务器(纵向扩展)或跨服务器集群(横向扩展)中获得增强。

使用 DPF最显而易见的理由之一就是提高查询工作负载和 INSERT/UPDATE/DELETE 操作的性能。DPF 还可以克服部分 DB2 的架构限制。例如,在 DB2 中,对 4 KB 的页面大小而言,表的最大大小是 64 GB;对于 8 KB 的页面大小而言,表的最大大小是 128 GB;对于 16 KB 的页面大小而言,表的最大大小是 256 GB;对于 32 KB 的页面大小而言,表的最大大小是 512 GB。在 DB2 中,表和表空间的大小限制是根据每个分区进行规定的。跨多个分区划分数据库将允许您根据环境中分区数目的因数来增加表的最大大小。

DB2数据库分区实例图:

2、DPF对数据库性能产生的影响

数据是通过Hash算法均允地散列到不同的分区内的,每个分区只负责处理自己的数据。用户发出 SQL 操作后,被连接的分区被称为 Coordinate Node,它负责处理用户的请求,并根据 Partition key(分区键)将用户的请求分解成多个子任务交由不同分区并行处理,最后将不同分区的执行结果经过汇总返回给用户,分区对应用来说是透明的。

在 DB2 中,数据库分区可以部署在集群或 MPP(多台单个CPU的机器上,建立的一个有多个partition的DB2实例,在其中的每台机器上建立1个Partition)环境下,也就是说数据库分区分布在不同的机器上;数据库分区也可以部署在同一台 SMP(一台有多个CPU的机器上,建立的一个有多个分区的DB2实例,其中分区数量不超过已有CPU的数量)机器上,在同一台机器上的分区我们称为逻辑分区。同时,我们还可以在集群或 MPP 环境下部署多个分区,在集群或 MPP 每一个节点上部署多个逻辑分区。

采用数据库分区有几个好处,以下简单介绍一下:

查询扩展性

这是采用数据库分区最主要的原因之一。将一个大的数据库分成多个小的数据库可以提高查询的性能,因为每个数据库分区拥有自己的一部分数据。假设现在扫描10万条记录,对一个单一分区的数据库来讲,该扫描操作需要数据库管理器独立扫描10万条记录,如果将数据库系统做成10个分区,并将这10万条记录平均分配到这10个分区上,那么每个数据库分区的数据库管理器只扫描10万记录。

架构限制

非分区数据库的最大的表取决于页面大小,4K页最大支持64 GB,32K页最大支持512 GB数据量。表和表空间大小限制是每个分区上的限制,因此将数据库分成N个分区可以将表的最大尺寸增加为单个分区表最大尺寸的N倍。内存也可能是个限制,特别是在32位操作系统环境,因为每个数据库分区管理并拥有自己的资源,因此通过数据库分区可以克服这个限制。

数据库装载性能

数据库分区可以并行装载数据到所有数据库分区,极大减少单表的装载时间,这对于像实时商业智能系统那样对数据装载的时间要求特别高的系统特别重要。

数据库维护性能

将数据库分散到多个数据库分区服务器可以加快系统维护,因为每个操作都运行在分区所管理的一个数据子集上面,这样可以通过数据库分区进一步减少创建索引的时间,减少搜集统计信息的时间,因为runstats仅运行在一个数据库分区上面,减少表重整(reorg)的时间。

备份/恢复性能

将数据库分区到不同的数据库服务器上可以大大减少数据库备份的时间,这也是是决定是否使用数据库分区很重要的一点。DB2 通过为每个表空间分配独立的进程或线程来实现备份和恢复操作的并行处理。在分区数据库环境的备份中,每个分区的备份是独立的,通过并行备份数据库分区可以大大减少备份整个数据库的时间。

日志

在高度活动的系统中,数据库日志的性能可能会限制系统的整体吞吐量。在分区数据库环境中,每个分区有自己一套日志。当大量插入、更新、删除操作时,多个数据库分区可以提高性能,因为日志是在每个数据库分区上并行写入,而且每个分区需要记录的日志更少。

DB2 随数据量或处理器和分区的增加,可以提供近线性的扩展能力,可是,数据库分区是否提供最多的益处依赖于处理的工作负荷、最大表的大小及其他因素。目前我们项目的数据仓库也是使用数据库分区,因为数据量较大,并且业务对CPU的需求也比较大,但是机器较老,单机无法增加更多CPU,并且一个实例上要实现多个分区,所以采用了另外一种SMP Cluster(多台有多个CPU的机器上,建立的一个有多个partition的DB2 Instance,在其中的每台机器上建立多个Partition)

3、DB2分区与Oracle的比较

Oracle分区

DB2分区

Oracle 10g语法

DB2 V9语法

区间分区(Range   Partitioning)

表分区(Table   Partitioning)

PARTITION BY RANGE

PARTITION BY RANGE

哈希分区(Hash   Partitioning)

数据库分区(Database   Partitioning)

PARTITION BY HASH

DISTRIBUTE BY HASH

列表分区(List   Partitioning)

带生成列表分区(Table   Partitioning With Generated Column)

PARTITION BY LIST

PARTITION BY RANGE

不支持

多维集群(Multidimensional   clustering)

ORGANIZE BY DIMENSION

以数据库分区为例,以下是DB2的数据库分区与Oracle哈希分区特性的比较:


DB2分区


Oracle分区


分区架构


Share-nothing


Share-disk


分区特性


每个CPU都有私有内存区域和私有磁盘空间,并且两个CPU不能访问相同磁盘空间,CPU之间的通讯通过网络连接。


每个CPU使用自己的私有内存区域,通过内部通讯机制直接访问所有磁盘系统。


两者区别


可伸缩性 —— 随着数据库的增长可物理性的增加计算资源(也就是数据库分区)


无法通过增加物理的partition来给数据库扩容


语句示例


partition_tablename表选择partition_ id字段作为分区键


hash_tablename表按照hash_part字段进行哈希分区,每个分区以循环的方式放置在表空间tbsp1和tbsp2中。


CREATE TABLE partition_tablename
    (partition_id id NOT NULL,
     partition_id VARCHAR(20) NOT NULL)
       IN tbsp_parts
   DISTRIBUTE BY   HASH (partition_id);


CREATE TABLE hash_tablename
    (hash_part id,
       hash_id varchar2(20))
       PARTITION BY   HASH(hash_id)
      (partition p1 tablespace tbsp1,
    partition p2 tablespace   tbsp2);

4、总结

此次分享旨在简单介绍DB2分区的概念,并与Oracle的分区做比较。分区数据库为提高查询工作负载和 DML操作的性能提供了便利。 如果数据量较小,性能提升并不会很明显,所以分区数据库一般用在数据量较大,查询需求较频繁的数据库。其实使用Oracle好还是DB2好并没有绝对的选择。例如Oracle采用完全开放策略,可以使客户选择最适合的解决方案,对开发商全力支持;DB2则最适于海量数据,并且在企业级的应用最为广泛,可伸缩性及并行性强。就像广东的老火汤很有味道,很滋补,中国人可能都喜欢喝,但是外国人觉得他们的罗宋汤那种很粘稠的才叫做汤,中国这种顶多叫Water!所以,自己需要的,才是最好的。

原文地址:http://blog.51cto.com/5063935/2074288

时间: 2024-11-05 21:48:02

DB2分区数据库浅析的相关文章

MYSQL,DB2,SQLSERVER数据库不同点浅探(一)

简单地比较一下MYSQL,DB2,SQLSERVER数据库设计不同点,为日后看MYSQL源代码先打打底,今天先比较数据库对象吧: 1.DB2上关于表有一个表空间的概念,简单地说, 表空间是数据库系统中数据库逻辑结构与操作系统物理结构之间建立映射的重要存储结构,一般来说一个表空间对应一个表.DB2在表空间上分配表空间对应表的一切物理属性,比如首次分配大小,扩展大小,页面每页初始空闲空间,空闲页面占总页面百分比等.因此,DB2上的系统DBA对表的操作更多是基于表空间上.比如因为表上的删改查不可避免地

DB2报“数据库日志已满”问题解决

用控制中心直接改会比较容易一点,在数据库名称上点右键-->配置-->日志-->日志文件大小.主日志文件数.辅助日志文件数改大一点. 也可用命令行db2cmd db2 update db cfg for mymakro using LOGFILSIZ 512 --日志文件大小 db2 update db cfg for mymakro using LOGPRIMARY 20 --主日志 db2 update db cfg for mymakro using LOGSECOND5 10 --

DB2重启数据库实例

DB2重启数据库实例时,有时停止实例会失败,此时需要先确认没有应用链接数据库,然后再关闭数据库实例,并重新启动. 1.查看是否有活动的链接 命令:db2 list applications for db db_name 发现有两个活动链接,此时需要将链接进行关闭. 2.关闭连接 命令:db2 force application all 3.再执行一次步骤1中的命令,查看链接是否全部关闭. 4.执行停止实例命令 命令:db2stop 注意:命令中没有空格 5.执行实例启动命令 命令:db2star

DB2通用数据库性能调整的常用方法

DB2通用数据库性能调整的常用方法 Agenda 统计值更新--runstats  调整Buffer pool  调整日志缓冲区大小  应用程序堆大小  排序堆大小和排序堆值  代理程序的数目  锁  活动应用程序的最大数目  页清除程序的数目  I/O服务器的数目  编入组的提交数目 统计信息更新 当对SQL 查询进行优化时,SQL 编译器所做出的决定会受到优化器的数据库内容模型的重大影响.  优化器使用该数据模型来估计可以用于解决某个特定查询的其它存取路径的成本.  数据模型中的关键元素是一

(转)Oracle与DB2在数据库高可用技术上的相同与差异探讨

原文:http://www.talkwithtrend.com/Article/178339 数据库建设过程中,高可用是每一个企业数据中心数据库建设过程中至关重要的一个关注点,直接关系到业务连续性和稳定性.要想将这个工作做好,我们必须从其底层原理.机制.架构等方面进行深入了解,深入分析,深入对比才能知道我们应该如何去实践.下面的几个关键点,不仅仅是每一个DBA应该琢磨的事情,同时也是搞企业IT架构规划和建设的人必须了解和知道的事情. 下面总结了一些Oracle与DB2在数据库高可用技术上的相同与

db2新建数据库

一.建表空间和数据库 1.在db2ad.db2db和db2ap上均执行: [sql] view plaincopyprint? db2set db2comm=tcpip db2set db2codepage=1386 db2set db2comm=tcpip db2set db2codepage=1386 2.新建数据库: [sql] view plaincopyprint? db2 create db <dbname> using codeset gbk territory CN colla

DB2查看数据库中的锁信息

利用"db2 connect to <db name>"连接到数据库后,执行相关指令 查询锁快照信息 db2 get snapshot for locks on <db name> 查询目前存在的锁 db2 SELECT AGENT_ID, LOCK_OBJECT_TYPE, LOCK_MODE, LOCK_STATUS FROM SYSIBMADM.SNAPLOCK 某一个用户的锁的情况 get snapshot for locks for applicati

NoSQL数据库浅析(一):Redis和Memcached

NoSQL(Not Only SQL),泛指非关系型数据库,它的出现告诉我们:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储. NoSQL简介 关系型数据库的不足 关系型数据库的性能非常高,但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途,具体来说它并不擅长以下处理: - 大量数据的写入处理 - 为有数据更新的表做索引或表结构变更 - 字段不固定时应用 - 对简单查询需要快速返回结果的处理 这里逐一进行说明: 1.

DB2还原数据库备份

用命令还原数据库备份 1.建立一个新的数据库db2 create db 数据库名 on 路径 using codeset GBK territory zh_CN 2.将需要恢复的数据库恢复得到这个新的数据库中db2 restore db 数据库 from 路径 taken at 时间戳记 into 数据库名 redirect without rolling forward 3.重新定向表空间(这一步老是不成功)必须事先知道表空间容器的类型和大小,通过 list tablespaces命令查看数据