DB2 LOAD 工具使用技巧集合

[复制链接]
查看11 | 回复2 | 2012-5-21 10:19:41 | 显示全部楼层 |阅读模式
DB2 LOAD 工具使用技巧集合
袁春光 ([[email protected]?subject=DB2 LOAD 工具使用技巧集合][email protected][/email]), 高级技术专家, 庄梁科技公司
袁春光是 IBM 官方高级培训讲师,于 2006 年获得“首届中国杰出数据库工程师奖”,作为庄梁科技公司的高级技术专家,长期为多个客户提供数据库、操作系统、中间件等产品的技术咨询和技术支持服务,积累了丰富的经验。获得了 IBM 的 DB2 高级管理员认证、AIX 高级技术专家认证、以及 SUN 的技术认证。
简介: 在 DB2 数据库的日常使用中,很重要的一项工作就是移动数据,那么在此时就经常会用到 LOAD 工具。DB2 的 LOAD 工具的功能非常强大,而且在很多方面与其他工具比较起来有着突出的优点,这使得 LOAD 工具在 DB2 数据移动方面有着不可替代的作用,尤其是在需要处理大规模数据的情况下表现尤其抢眼。下面结合本人的实践经验介绍一下在使用 LOAD 工具的过程中比较有帮助的一些技巧。

标记本文!

发布日期: 2009 年 2 月 23 日
级别: 初级
访问情况 1818 次浏览
建议: 0 (添加评论)
平均分 (共 2 个评分 )

影响 LOAD 性能的选项
LOAD 工具与其他数据移动工具比较起来的一大优势就是提供卓越的性能,这主要是由于 LOAD 对数据的加载时采取数据页级别的处理,这绕过了数据库管理系统的多个处理层次,因此可以极大的提高性能。除了 LOAD 工具本身的这一特点之外,我们还可以通过合理的设置 LOAD 的一些选项来进一步提高其性能。下面列出一些影响 LOAD 性能的选项及其合理设置的建议。
CPU_PARALLELISM n
此选项用于指定一个 LOAD 同时使用 n 个 CPU 来并发的处理 LOAD,在 LOAD 处理的数据量较大并且操作系统的负载不高的情况下,可以通过此参数指定多个 CPU 并发的执行构建表过程中的解析、转换、格式化等内容来提高效率。如果同时启动了多个 LOAD 工具要注意所有 LOAD 工具指定的此参数最好不要超过操作系统中逻辑 CPU 的总数(在此指定的 CPU 是 LCPU- 即逻辑 CPU)。
此选项不设置,则 DB2 会根据当前操作系统中 CPU 的数量自动的分配 CPU 数量。
DATA BUFFER buffersize
此选项用于指定 LOAD 工具能够使用的数据缓存的最大值,单位是 4k 。我们可以想象,在处理的数据量很大,且在不超过操作系统空闲物理内存的情况下,我们为 LOAD 分配越多的数据缓存那么 LOAD 的性能将会越好。但是此值设置受到数据库的参数 UTIL_HEAP_SZ 限制。 由于使用 UTIL_HEAP_SZ 的工具有多个,所以为某个 LOAD 分配的数据缓存一般建议不要超过 UTIL_HEAP_SZ 的 50%,在实际设置时,最好根据 UTIL_HEAP_SZ 的实际情况来确定,这可以通过观察数据库快照中工具堆使用的大小和高水位大小来判断。
另外,此选项并非单纯的设置的越大越好,因为在数据缓存设置的最够大以后即使再增加其大小也不会有利于性能的提升,因为性能的瓶颈已经不在是缓存了。所以需要在实际生产中做多次的测试以找到一个最适合的值。
DISK_PARALLELISM n
此选项用于指定 LOAD 工具可以利用向表空间中多个容器执行并发 I/O 的能力来提高性能。根据表空间中容器的数量做适当设置即可。
Modified by ANYORDER
此文件修饰符,可以使用输入文件中预设好的排序结果来提高性能。如果输入的文件来自于 export 工具中使用一定排序谓词到处的数据,那么性能会得到较大提升(可以提升几倍到几十倍)。且此文件修饰符可以用于各种输入的文件格式。
Modified by FASTPARSE
此文件修饰符通过降低对输入数据的检查来提升性能,如果输入的数据与目标表的结构、类型上并无差别,那么可以通过设置此选项来提升性能。此文件修饰符只能用于 ASC 或 DEL 格式的文件。
Modified by NOROWWARNINGS
如果预期在 LOAD 过程会有大量的 warning 出现,那么可以使用此文件修饰符来提升性能。
SAVECOUNT
此选项可以降低 LOAD 在设置一致性恢复点上面的负载,在处理大数据量的情况下可以使用此选项来提升性能,根据处理数据量的情况来合理的设置此值。如需要加载的数据为 1000 万行,那么可以将此值设置为 10000 。此文件修饰符不能与 anrorder 文件修饰符同时使用。
USER tablespace
当需要 LOAD 的表中存在大量索引需要构建时,且表或索引本身所在的表空间不不是很大的情况下,使用此选项制定一个系统临时表空间,来提高其数据构建的性能。
回页首
使用游标(cursor)来提高 LOAD 性能
LOAD 工具在加载数据的时候,输入的数据除了可以是 ixf、asc 和 del 类型的文件之外,还可以是游标(curosr)。如果需要将一个表中的数据保存到另外一张表中,且对应的列的类型是一致的,那么我们就可以使用游标的方式来实现数据的移动。游标方式之所以能提高数据加载的效率是因为数据不需要以文件的方式保存到磁盘上,而是直接从源数据表到达目标数据表中,这样就可以节省了两次 I/O 过程(导出的数据以文件保存到磁盘的过程和加载数据时从磁盘上读取数据文件的过程),从而大大提高数据处理的效率。
示例如下:
创建 sql 文件 test.sql, 其内容如下:
清单 1. SQL 语句 —— test.sql

declare cursor mycur for select * from tab1name; load from mycur of cursor insert into tab2name;
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
支持,原来出自老袁,也是一位大牛。SAVECOUNT、LIST UTILITIES、LOAD QUERY、alter table tabname activate not logged with empty table 这几项都经常使用。其他的方法、参数也很值得学习。谢谢!
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
一步步的学习,是为了以后大步的前进!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行