WEB开发网
开发学院数据库DB2 DB2 V9.7 新特性:在线移动表 阅读

DB2 V9.7 新特性:在线移动表

 2009-12-18 00:00:00 来源:WEB开发网   
核心提示: 数据移动结果集实际上是从协议表 ADMIN_MOVE_TABLE 中选择出来的数据,结果集显示 COPY 10 万行数据花费了 9.1 秒,DB2 V9.7 新特性:在线移动表(10),REPLAY 花费 9.4 秒,SWAP 花费 0.6 秒,因此不可移动,正在执行现场重组操作,合计 21.1

数据移动结果集实际上是从协议表 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 存储过程时,我们也会经常碰到错误,主要和表移动状态有关:

联机移动表操作所处的状态不允许执行指定的操作

没有正在执行中的联机移动表操作;因此,不允许执行指定的操作。

存在正在执行中的联机移动表操作;不允许对同一个表执行并行的联机表移动操作。

该表是联机表移动操作的目标表、登台表或协议表,因此不可移动。

正在执行现场重组操作,此操作不允许执行联机移动表操作的复制阶段。

上一页  5 6 7 8 9 10 

Tags:DB 特性 在线

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接