DB2分区数据库的Export程序提速

来源:互联网 发布:淘宝网最热销的产品 编辑:程序博客网 时间:2024/04/30 08:17

《请勿转载-谢谢》

  • 摘要:介绍如何在DB2分区数据库环境下,利用并行机制来提升数据库的导出速度,本文通过一个简单的导出例子来讲解并行EXPORT数据的调用,供大家参考!
  • 标签:DB2  EXPORT DB2_ALL HPU 并行机制

 

在数据库的日常维护管理中,数据库的导入以及导出功能经常用到,在日常的数据迁移、数据备份的过程中,数据库的导出功能的速度显得尤为的重要,数据库自带的导出功能速度一般,特别大数据量的导出时,导出速度的提高能极大的节省时间。

 

DB2数据库的常规导出命令Export概述

 

Export 实用程序将数据库数据导出到操作系统文件中,该文件可以是任一种外部文件格式。您可以通过提供 SQL SELECT 语句或类型表分层信息来指定要导出的数据。然后,可以使用此操作系统文件进行数据的备份或迁移.

但在日常的使用过程中, Export命令的导出速率一般,在DB2分区数据库环境下,跨分区的大数据量表的数据是通过协调节点将各数据节点进行导出。这样在进行数据备份以及数据迁移的时候,需要很的时间窗口进行数据的导出。虽然可以通过调整数据库的参数,提高导出速度,但提高的幅度毕竟的很有限的。

 

IBM DB2 High Performance Unload的描述

 

在日常的维护中,如果想获得高速的导出速率的话,IBM公司提供了一种叫IBM DB2 High Performance Unload的工具。DB2 High Performance Unload通过高速卸载功能帮助您满足服务水平协议。因为 DB2 High Performance Unload 使用指定管道来并行执行加载和卸载步骤,所以迁移过程非常快。系统资源得到了有效利用。此外,在许多情况下,DB2 High Performance Unload 能够直接处理容器,避免了通过DB2 处理的开销。DB2 High Performance Unload 还能够重新分配数据,帮助提高备份和恢复操作的速度,它启用了从完整的数据库备份卸载和恢复单个表的功能。

主要特性:

帮助缩短维护时窗。

直接从表空间文件读取,以提供对 DB2 数据的快速访问。

根据您指定的格式,将表卸载到一个或多个文件中,而不会影响您的生产表。

卸载数据样本(例如,每个第 n 行)。

      据说,IBM DB2High Performance Unload导出的速度是常规导出速度的10倍左右,但DB2任何数据库版本都不包含这个工具。IBM DB2 High PerformanceUnload工具需要单独进行购买,需要花费大量的Money才行。

 

Db2分区数据库并行导出实现提速

  

   即然DB2分区数据库在处理大数据量的加载以及运算,性能特别突出。我们就想有没有一个方法利用分区的特点来提高导出的速度呢?在这里首先看一下

Db2分区数据库的特征,将一个DB2数据库分区时,把它分成一些独立的部分,每一部分都包含各自的数据、配置文件、索引和事务日志。每一部分就是一个数据库分区,能单独正常的运行,可以将多个分区分派到一台物理机器上。DB2分区数据在存储大数据量表的时候根据分区键均匀的分布到各个节点上。

我们就要考虑能不能写一个程序,实现并行让每一个节点数据库单独导出数据,这样每个数据库导出的数据量就很小,速度肯定会有提升。

如何才能实现并行的机制呢,首先自己手工写程序能实现,但比较麻烦,并且需要控制多台机器,通不过。还是从DB2数据库提供的命令里面去找,经过仔细的查找,发现db2数据库提供了一个db2_all的命令,db2_all功能是在指定的所有数据库分区服务器上运行命令,既可以串行,又可以并行的运行。

虽然解决了并行了问题,但是又出现了结果文件的命名问题,因为在同一个命令中如何实现导出的文件名不重复,首先考虑到使用db2分区数据库的节点号进行区分(这样也方便后期数据的加载),通过仔细的研究db2的各种文档后发现,在db2_all的命令中可以使用##来表示各个节点。至此,db2分区数据库的并行导出的功能所有问题全部解决。以下是一个实例,能过实例可以看出,数据导出的速度上的提升有多少。

 

Db2分区数据并行导出实例

 

环境如下:

主  机:IBMP550  半配 1台,IBM P570  半配 3台

数据库:DB2 V9.1.0.4

节  点:P550为管理节点,分2个节点,3台P570为数据节点,每台机器分8个节点,共26个节点

 

 条件:首要条件是指定表的数据均匀的分布在各个节点上

 

1、连接数据库,指定所要导出的表以及导出的行数。

                             

 

   

                  图1 连接数据库查询指定表的行数

 

从 图1 可以看到所要导出数据的行数为16493009行。

 

 

2、使用db2数据库常规export进行数据的导出,为了实现方便我写成了一个shell文件,只显示导出前后的两个时间。

 

 

图2  常规EXPORT导出所需时间

 

从 图2 中可以看到使用常规的export,导出时间近4分钟,生成的文件大小为3.3G,速率约7万行/秒(16493009/4*60)

 

3、使用并行机制看一下,查看导出这16493009行数据需要多少分钟

 

图3  并行EXPORT导出所需时间

 

从图3上看到,并行导出的时间仅用了33秒,文件大小总共约3.3G(0.14*24),导出速率为50万/s(16493009/33),计算每个节点的话,才2万/秒多一点,但从整体上来看,整个的导出过程提高了7倍。效率高的确实有些惊人。

 

总之,在DB2分区数据库环境下,当你不想花费Money购买外部工具,又想提高导出的速率的话,可以试用一下这种方法,希望对大家有所帮助。最后,本文当中所描述的内容如果有不当之处,还望大家给予指正。

原创粉丝点击