Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1892567
  • 博文数量: 389
  • 博客积分: 7877
  • 博客等级: 少将
  • 技术积分: 4521
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-10 14:02
文章分类

全部博文(389)

文章存档

2024年(1)

2022年(1)

2021年(1)

2020年(1)

2019年(1)

2018年(3)

2017年(6)

2016年(4)

2015年(8)

2014年(15)

2013年(31)

2012年(19)

2011年(47)

2010年(33)

2009年(105)

2008年(109)

2007年(4)

分类:

2011-04-20 09:36:42

在我这边的两个DPF环境里面,在做import的时候发现每秒写进数据库的数据量仅仅在1000条左右,而在比这更差的非DPF环境的db2数据库,则在import的时候都可以达到每秒4000条数据以上,而且我发现即使我这个表是建立在1号节点上,而不是分布在所有节点时import数据同样很慢,只有在使用如下命令时import性能才算正常:
db2_all "<<+1< db2 connect to zhsjptdb;db2 import from file.del of del replace into tablename"

这个问题困扰了我很久,我一直怀疑我的配置是否有什么问题,我也就这个问题咨询过800电话,他们只是告诉我慢是正常的,但是也觉得慢这么多比较奇怪,他们给我的方法是做db2trace然后把结果发给他们,让他们来分析。

实际做下来的时候,trace生成的文件非常大,他们的响应时间也有点慢,这个时候我还是不断的搜索相关内容,终于在一个小的论坛找到一个关于db2uimpm.bnd的东西,说做了这个bind后import的性能就会有所提升,于是顺着这个关键字继续搜索,并且在实际环境中测试了一下,发现性能果然提升了很多,现在我有8个数据节点,还有0号协调节点,在做import的时候每秒数据量可以超过6000条。

但是做了这个bind之后,也会牺牲import的某些功能,如它不会在遇到错误后报出详细错误信息,以及没有办法做到INSERT_UPDATE这种方式,详细信息如下:


缓冲插入导入

在分区数据库环境中,可以允许 IMPORT 实用程序使用缓冲插入功能。这将减少导入数据时进行的消息传递工作,从而提高性能。

仅当您不关心错误报告时才应启用缓冲插入选项,原因是启用此选项后不会返回有关失败的缓冲插入的详细信息。

使用缓冲插入后,导入会将缺省 WARNINGCOUNT 值设置为 1。因此,如果任何行被拒绝,操作将失败。如果拒绝某个记录,那么该实用程序还会回滚当前事务。可以使用已落实记录数来确定已成功插入数据库的记录。仅当指定了 COMMITCOUNT 选项时,已落实记录数才会是非零值。

如果在导入命令上显式指定了另一 WARNINGCOUNT 值,并且拒绝某些行,那么实用程序的行摘要输出将是不正确的。这是由以下两方面原因引起的:缓冲插入功能使用异步错误报告功能;如果在插入一组行期间检测 到错误,那么会导致回退该组中所有的行。由于此实用程序无法可靠地报告拒绝的输入记录,所以难以确定已落实的记录以及需要重新插入到数据库中的记录。

使用 DB2® Bind 实用程序来请求执行缓冲插入功能。必须使用 INSERT BUF 选项对数据库重新绑定导入包 db2uimpm.bnd。例如:
   db2 connect to your_database
      db2 bind db2uimpm.bnd insert buf

缓冲插入功能无法与 INSERT_UPDATE 方式下的导入操作配合使用。绑定文件 db2uImpInsUpdate.bnd 将强制执行此限制。不应使用 INSERT BUF 选项绑定此文件。这会导致 INSERT_UPDATE 方式下的导入操作失败。绑定新文件不会影响 INSERTREPLACEREPLACE_CREATE 方式下的导入操作。


对于DPF环境的import性能方面的问题,IBM网站上在2004年的时候都已经有了,不知道为什么我直到解决问题后才搜索到这个地方,详细信息在下面:

http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0405wilkins/index.html

至此您应该知道,在 DPF 环境中,每一个要插入的行都必须将其分区键映射到一个分区号。然后必须将该行从协调分区发送到其他分区,这一传送过程大大增加了每条插入的时间。主要有两种方法可以减少这种开销:

  1. 缓存插入: 在这种技术中,行在被发送到目标分区之前会先缓冲起来,这样实际上就减少了通信开销。为了激活缓冲插入,可以用 INSERT BUF 选项 PREP 或 BIND 应用程序;对于 IMPORT,可以 PREP 或 BIND import 包 db2uimpm.bnd(在 sqllib/bnd 中)。如果在没有干扰活动的情况下插入大量的行,则应该使用缓冲插入。只所以需要在没有干扰活动下进行的原因是,DB2 服务器一次只能报告对于整个块的错误,因此在异常情况下有很多特殊的考虑。在 Application Development Guide: Programming Client Applications 的第 17 章 "Programming Considerations for Partitioned Database Environments" 中,在对缓冲插入的广泛讨论当中对这些考虑作了描述。 要了解关于使用了 IMPORT 的缓冲插入的信息,请参阅 Data Movement Utilities Guide and Reference
  2. 对于插入还有另一种可能性,这在 本地旁路中有描述。

阅读(2333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~