简介
当人们考虑在数据库引擎中进行并行处理时,他们立即会想到通过使用多个处理器处理单个查询来达到改进的 查询响应时间。人们往往没有注意到:并行处理也可以加速索引处理,从而改进数据库服务器的总体性能。使用 IBM DB2 Universal Database (UDB) for iSeries,就有可能将多个 CPU 用于索引处理。特别是,当创建索引以及由于底层数据更改而维护索引时,DB2 UDB for iSeries 可以使用多个处理器。以并行方式创建和维护索引的能力可应用于传统的二进制基数和编码的向量索引结构。
DB2 UDB for iSeries 并行处理只可以在 iSeries 服务器上使用,其中已经购买、安装和激活了 DB2 对称多处理(DB2 Symmetric MultiProcessing,DB2 SMP)特许功能部件,如启用并行处理中所述。
并行索引创建
DB2 UDB for iSeries 可以将并行处理用于创建 SQL 索引和用键值标识的逻辑文件(即,CRTLF 命令)。并行索引处理是通过如下方式完成的:在逻辑上,将基本表分成多个数据段,接着每个进程为指定的表段构建索引键值。然后,将由每个并行进程执行的任务合并在一起来完成最后的索引结构。
正如您在 图1 中所看到的那样,使用附加的 CPU 资源可以充分减少创建索引所花费的时间。这种能力在非常大型的数据库环境中或者在需要尽快重新创建索引的恢复方案下变得十分重要。
图1. 启用并行性之后极大地改进了索引构建时间
并行索引维护
索引维护的任务是更改索引键以反映对相关数据库行的更改(通常通过 insert 、 update 或 delete 引起)。如果更改了客户的订单号或者新的客户订单添加到了数据库,则必须更新所有包含订单号列作为键字段的索引。索引的维护(或更新)影响与添加或更改订单相关的整个事务时间。
如果数据库行更改影响多个索引,那么这些索引的维护会串行发生,缺省情况下,每次维护一个索引。首先,订单号更改被传播到 IndexA。对 IndexA 的更改完成之后,订单号被传播到 IndexB,依此类推。
并行索引维护涉及同时维护多个索引。客户的订单号更改可以被同时传播到 IndexA 和 IndexB。这个并发索引维护处理减少了在整个数据库中更改订单号所花的总计时间。并行索引维护用资源换取了时间,提高了给定应用程序或事务的 I/O 速度。
图2 反映了可以通过并行维护多个索引达到的节省时间。在图2中,新行被装入具有多个索引的表中,并行索引维护将装入时间缩短到二到三分之一。
图 2. 当索引维护并行发生时装入时间得到改进
仅当应用程序处于下列情况时,DB2 UDB for iSeries 才使用并行索引维护:
正在执行 8 行或者更多行的分块插入(或写)。
相关表上定义了两个或两个以上的索引。
一般可以在成批更新和数据仓库装入过程中找到分块插入,所以并行索引维护将在这些环境中产生最显著的性能效果。
技巧:如果装入进程添加到表的新行多于该表行数的 20%,那么通常建议在装入之前先删除索引,然后在装入进程完成之后使用并行处理来重构索引。
启用并行处理
在安装 DB2 SMP 功能部件之后,有几种激活并行处理的不同方法,以便可以执行并行索引构建和维护。