以并行方式处理 DB2 for iSeries 索引

来源:百度文库 编辑:神马文学网 时间:2024/04/26 09:15:29
 
    •  
Kent Milligan, DB2 UDB 技术专家, IBM 罗彻斯特

 

简介: 使用 DB2 for iSeries,并行处理只对多个查询很有用。如果您使用多个处理器来完成批处理、装入和索引构建,那么它们的发生都会快得多。

标记本文!

发布日期: 2003 年 1 月 01 日
级别: 初级
访问情况 10 次浏览
建议: 0 (添加评论)

平均分 (共 0 个评分 )

简介

当人们考虑在数据库引擎中进行并行处理时,他们立即会想到通过使用多个处理器处理单个查询来达到改进的 查询响应时间。人们往往没有注意到:并行处理也可以加速 索引处理,从而改进数据库服务器的总体性能。使用 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. 启用并行性之后极大地改进了索引构建时间


回页首

并行索引维护

索引维护的任务是更改索引键以反映对相关数据库行的更改(通常通过 insertupdatedelete 引起)。如果更改了客户的订单号或者新的客户订单添加到了数据库,则必须更新所有包含订单号列作为键字段的索引。索引的维护(或更新)影响与添加或更改订单相关的整个事务时间。

如果数据库行更改影响多个索引,那么这些索引的维护会串行发生,缺省情况下,每次维护一个索引。首先,订单号更改被传播到 IndexA。对 IndexA 的更改完成之后,订单号被传播到 IndexB,依此类推。

并行索引维护涉及同时维护多个索引。客户的订单号更改可以被同时传播到 IndexA 和 IndexB。这个并发索引维护处理减少了在整个数据库中更改订单号所花的总计时间。并行索引维护用资源换取了时间,提高了给定应用程序或事务的 I/O 速度。

图 2 反映了可以通过并行维护多个索引达到的节省时间。在 图 2中,新行被装入具有多个索引的表中,并行索引维护将装入时间缩短到二到三分之一。


图 2. 当索引维护并行发生时装入时间得到改进

仅当应用程序处于下列情况时,DB2 UDB for iSeries 才使用并行索引维护:

  • 正在执行 8 行或者更多行的分块插入(或写)。
  • 相关表上定义了两个或两个以上的索引。

一般可以在成批更新和数据仓库装入过程中找到分块插入,所以并行索引维护将在这些环境中产生最显著的性能效果。

技巧:如果装入进程添加到表的新行多于该表行数的 20%,那么通常建议在装入之前先删除索引,然后在装入进程完成之后使用并行处理来重构索引。


回页首

启用并行处理

在安装 DB2 SMP 功能部件之后,有几种激活并行处理的不同方法,以便可以执行并行索引构建和维护。

在系统级别

缺省情况下,通过 QQRYDEGREE 系统值,将并行处理量控制在系统范围的级别。如果该系统值被设置成 *NONE 以外的其它值,那么在维护和构建索引时 DB2 UDB 将使用并行处理。 CHGSYSVAL (更改系统值)命令可用于更改 QQRYDEGREE 系统值的设置。您可以指定下面这些值来启用并行索引处理:

  • *MAX — 在并行索引维护和构建期间,DB2 UDB 引擎可以使用可用于作业(连接)的所有 CPU 处理器和所有内存。
  • *OPTIMIZE —“好邻居”设置。DB2 UDB 引擎在 CPU 处理器之间和内存中进行作业共享。
  • *NBRTASKS n — 它设置 DB2 UDB 引擎可以使用的最大 CPU 处理器数。这不是 QQRYDEGREE 系统值的有效值。
  • *NONE — 这是缺省值。对索引处理不使用并行处理。

在作业或连接级别

如果您想要将并行处理限制于单个作业或连接,则使用 CHGQRYA (更改查询属性)CL 系统命令或 QAQQINI 文件来为作业或连接启用并行处理。这些接口将覆盖系统值设置。

CHGQRYA CL 命令的 DEGREE 参数接受与系统值相同的值。如果在作业中执行下面的 CHGQRYA 命令,那么不管系统值是什么,该作业的并行度只能设置成 *MAX

        CHGQRYA  DEGREE(*MAX)                

可以在作业中多次发出该命令来打开或关闭并行性。

QAQQINI 文件同样允许您为单个作业或连接指定并行处理。象可以在 PC 中找到的 .INI 文件(它们用于存储控制 PC 工具和应用程序的行为(颜色、窗口大小等)的配置设置)一样, QAQQINI 文件可用来影响数据库引擎的行为 — 在这种情况下是并行处理行为。可以在多个数据库请求之间动态保存和应用这些 QAQQINI 配置设置。

QAQQINI 文件只是一个标准的数据库表这一事实意味着:您可以根据环境需要,动态地更改不同属性的值。它还非常灵活,因为标准数据库接口可用来更改 QAQQINI 属性的值。下面的 SQL 语句演示了如何使用 QAQQINI 文件来将并行处理度设置为 *OPTIMIZE:

UPDATE MyLib.QAQQINI                SET QQVAL = '*OPTIMIZE'                WHERE QQPAM='PARALLEL_DEGREE'                

对于在作业或连接期间可以更改属性值的次数没有限制。有关创建和使用 QAQQINI 文件的更多信息,请参阅 DB2 UDB for iSeries 数据库性能和查询优化指南(Database Performance and Query Optimization Guide)或下面的网站: http://www.iseries.ibm.com/developer/bi/tuner/index.html


回页首

结束语

本文演示了 DB2 SMP 功能部件为非查询工作负载所提供的并行处理的价值。要启用并行索引处理,可在构建索引、装入数据或执行批处理前,通过本文中描述的接口之一来激活并行处理。通过这样做,您可以更充分利用具有多个 CPU 的服务器上的 CPU 资源并提高性能。


关于作者

Kent Milligan 是 PartnerWorld? for Developers, iSeries 的 DB2 UDB 技术专家。Kent 在 IBM 工作的前八年里是位于罗彻斯特 DB2 开发小组的成员。他针对各种 iSeries 和 AS/400e? 关系数据库主题定期进行演讲和撰稿。可以通过 kmill@us.ibm.com与他联系。

建议