DB2 V9.7 新特性:在线移动表
2009-12-18 00:00:00 来源:WEB开发网数据移动结果集实际上是从协议表 ADMIN_MOVE_TABLE 中选择出来的数据。结果集显示 COPY 10 万行数据花费了 9.1 秒,REPLAY 花费 9.4 秒,SWAP 花费 0.6 秒,合计 21.1 秒,这表明数据移动过程绝大部分时间花费在 COPY 和 REPLAY 阶段。如果我们希望能够优化数据移动过程,应主要从这个阶段入手。
测试二:性能优化
在 COPY 有两个对性能影响比较大的选项,一个为 COPY_WITH_INDEXES,一个为 COPY_USE_LOAD。
COPY_WITH_INDEXES 选择指定在 COPY 源表之前就创建索引,这样在复制过程中需要对索引进行维护,因此性能会下降,不过优点是索引创建收到事务保护。默认情况下不使用 COPY_WITH_INDEXES,如果大家在协议表 ADMIN_MOVE_TABLE 的 COPY 选项中发现”WITH_INDEXES”则表示先创建了索引。
DB2 进行表数据移动时,默认采用 INSERT FROM CURSOR 方法进行 COPY,这种方法需要对复制的每一行执行一个 Insert 操作,引起的负担与我们平时执行 Insert 完全相同。我们可以通过设置选项 COPY_USE_LOAD 采用 LOAD API 方式进行 COPY 以提高性能。使用 LOAD API 的优点是:
LOAD 过程不会对表的每一行记录日志 .
LOAD 可以利用 CPU 并行性和 IO 并行性
LOAD 可进行大块 IO,这有利于提高 IO 的效率
不过需要注意的是,使用 LOAD API 时,与使用 LOAD 命令加载数据一样,过程是不可恢复的。因此最好在 LOAD 后执行一次数据库备份,或者在 LOAD 时指定选项 COPY 或 KEEP 以保存一份原始数据。
CALL SYSPROC.ADMIN_MOVE_TABLE
('USERID', 'EMP_TEST', 'NEW_TS', 'NEW_TS', 'NEW_TS', '', '', '', '', 'COPY_USE_LOAD,FORCE', 'MOVE')
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
结果集 1
--------------
KEY VALUE
---------------------- ----------------------
AUTHID USERID
CLEANUP_END 2009-08-18-14.44.48.952000
CLEANUP_START 2009-08-18-14.44.48.327000
COPY_END 2009-08-18-14.44.45.155000
COPY_OPTS OVER_INDEX,LOAD,WITH_INDEXES
COPY_START 2009-08-18-14.44.37.171000
COPY_TOTAL_ROWS 100000
INDEXNAME EMPNO_PK
INDEXSCHEMA USERID
INDEX_CREATION_TOTAL_TIME 1
INIT_END 2009-08-18-14.44.36.640000
INIT_START 2009-08-18-14.44.35.436000
REPLAY_END 2009-08-18-14.44.47.186000
REPLAY_START 2009-08-18-14.44.45.155000
REPLAY_TOTAL_ROWS 0
REPLAY_TOTAL_TIME 0
STATUS COMPLETE
SWAP_END 2009-08-18-14.44.48.155000
SWAP_RETRIES 0
SWAP_START 2009-08-18-14.44.47.186000
VERSION 09.07.0000
21 条记录已选择。
返回状态 = 0
上述结果集显示 COPY 10 万行数据花费了 8 秒,REPLAY 花费 2 秒,SWAP 花费 1 秒,合计 13.1 秒。在这个例子中我们使用了 COPY_USE_LOAD 选项,即采用 LOAD API 加载数据,比使用 INSERT FROM CURSOR 方法快 36%。
总结
DB2 V9.7 提供的 ADMIN_MOVE_TABLE 存储过程能够帮助 DBA 在线的修改表,包括表空间、表定列义、表压缩、表分区等,这为 DBA 保持系统高可用性。在使用 ADMIN_MOVE_TABLE 存储过程时,我们也会经常碰到错误,主要和表移动状态有关:
联机移动表操作所处的状态不允许执行指定的操作
没有正在执行中的联机移动表操作;因此,不允许执行指定的操作。
存在正在执行中的联机移动表操作;不允许对同一个表执行并行的联机表移动操作。
该表是联机表移动操作的目标表、登台表或协议表,因此不可移动。
正在执行现场重组操作,此操作不允许执行联机移动表操作的复制阶段。
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››在线浏览pdf文件(pdf转swf)
- ››db2 命令选项解释
- ››在线视频最佳方法:产品页面的SEO技巧
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
更多精彩
赞助商链接