对数据分区表进行异步分区拆离

对于 Db2® 版本 9.7 修复包 1 及更高版本,异步分区分离任务完成从分区表中分离数据分区的工作,该操作由 ALTER TABLE...分离操作。 该任务是一个异步后台进程 (ABP),在分区成为在逻辑上已拆离的分区后启动。

异步分区拆离任务可以加快将数据分区从分区表拆离的过程。 如果分区表具有从属具体化查询表 (MQT),那么直到针对 MQT 执行 SET INTEGRITY 语句之后,才会启动该任务。

通过异步完成数据分区的分离,在发出ALTER TABLE命令之前启动的访问分区表的查询……DETACH PARTITION语句继续执行,分区立即分离。

如果有任何需要根据已拆离数据分区进行增量维护的从属表(这些从属表称为已拆离的从属表),那么仅在对所有已拆离的从属表运行 SET INTEGRITY 语句之后,异步分区拆离任务才会开始。

在没有分离的从属关系的情况下,异步分区分离任务在发出ALTER TABLE...事务后启动。DETACH PARTITION语句提交。

异步分区拆离任务执行下列操作:
  • 对ALTER TABLE...先前执行的分离操作导致软失效。
  • 更新源分区表和目标独立表的目录条目,并使目标表可用。
  • 对于具有非分区块索引但没有其他分区索引的多维集群 (MDC) 表,请为目标表创建索引对象。 块索引在异步分区拆离任务落实后首次访问目标表时创建。
  • 为包含 XML 列的表的目标表创建系统路径索引。
  • 更新包含已拆离分区的表空间的最短恢复时间 (MRT)。
  • 为非分区索引创建异步索引清除 AIC 任务。 AIC 任务在异步分区拆离完成后执行索引清除。
  • 如果非分区索引不存在于表上,那么释放数据分区标识。

异步分区拆离任务对性能的影响

异步分区拆离任务产生很小的性能影响。 任务等待对独立分区进行的所有访问完成,方法是硬性取消对 ALTER TABLE...先前执行的分离操作导致软失效。 然后,任务获取对表和分区的所需锁定,再继续处理以使已拆离的分区成为独立的表。

监视异步分区拆离任务

分发守护程序和异步分区拆离任务代理程序都是内部系统应用程序,它们分别使用应用程序名称 db2taskddb2apd 出现在 LIST APPLICATIONS 命令输出中。 为了防止意外中断,不能强制执行系统应用程序。 只要数据库处于活动状态,分发守护程序就一直处于联机状态。 任务将保持活动,直到拆离完成为止。 如果拆离在进行中时取消激活数据库,那么异步分区拆离任务将在重新激活数据库后继续。

LIST UTILITIES 命令用于指示异步分区分离任务是否处于以下状态之一:
  • 等待对分区表的旧访问完成
  • 最终化拆离操作并使目标表可用
LIST UTILITIES SHOW DETAIL 命令的以下示例输出显示了WSDB数据库中的异步分区分离任务活动:
ID                   = 1
Type                 = ASYNCHRONOUS PARTITION DETACH
Database Name        = WSDB
Partition Number     = 0
Description          = Finalize the detach for partition '4' of table 'USER1.ORDERS'.
Start Time           = 07/15/2009 14:52:14.476131
State                = Executing
Invocation Type      = Automatic
Progress Monitoring: 
    Description      = Waiting for old access to the partitioned table to complete.
    Start Time       = 07/15/2009 14:52:51.268119
在 LIST UTILITIES 命令的输出中,异步分区拆离任务的主要描述标识要拆离的数据分区和拆离操作创建的目标表。 进度监视描述提供关于异步分区拆离任务的当前状态的信息。
注意 :异步分区分离任务是一个异步过程。 要知道拆离操作的目标表何时可用,可创建一个存储过程,该存储过程查询 SYSCAT.DATAPARTITIONS 目录视图的 STATUS 列并在拆离操作完成时返回。 如果分区表中存在非分区索引,那么当 STATUS 列更改为“I”时,拆离操作的目标表将变得可用,这表示将对非分区索引执行异步索引清除。 删除所有引用了已拆离分区的索引记录后,将移除 STATUS 值为“I”的行。 如果不存在非分区索引,那么将跳过异步索引清除阶段,并且将从 SYSCAT.DATAPARTITIONS 中移除原始 DATAPARTITIONID 所指定的行。 此数据分区名称将更改为使用“SQLyymmddhhmmssxxx”格式的系统生成名称,此名称在 DETACH 操作期间生成。

分区数据库环境中的异步分区拆离处理

在分区数据库环境中,不管有多个少数据库分区,将为每个 DETACH 操作创建一个异步分区拆离任务。 此任务是在目录数据库分区上创建的,并根据需要将工作分发至余下数据库分区。

异步分区拆离任务的错误处理

异步分区拆离任务基于事务。 如果任务失败,那么将在内部回滚它所进行的所有更改。 在异步分区拆离处理期间发生的任何错误都将记录在 db2diag 日志文件中。 系统稍后会重试失败的任务。