当人们想到数据库引擎中的并行处理时,他们会立即想到通过让多个处理器处理单个查询来缩短查询响应时间。 人们往往会忽略的是,并行处理也可以加快索引处理的速度,从而提高数据库服务器的整体性能。 使用IBM DB2 for i,可以使用CPU进行索引处理。 特别是,当基础数据更改时,创建索引以及维护索引时,DB2 for i可以使用多个处理器。 并行创建和维护索引的能力适用于传统的二进制基数和编码的矢量索引结构。
DB2 for i并行处理仅在购买,安装和激活了DB2对称多处理(DB2 SMP)许可功能的IBM i系统上可用,如本文的“ 启用并行处理”部分中所述。
DB2 for i可以使用并行处理来创建SQL索引和键控逻辑文件(即CRTLF命令)。 并行索引处理是通过将基础表逻辑上分成多个数据段来完成的。 然后,每个过程都会为分配的表段构建索引键值。 然后,将每个并行过程执行的工作合并在一起,以完成最终的索引结构。
图1显示,使用额外的CPU资源可以大大减少创建索引所花费的时间。 在非常大的数据库环境中或在恢复场景中,重新创建索引需要尽快发生,此功能变得非常重要。
索引维护是更改索引键以反映对关联数据库行的更改(通常是由insert
, update
或delete
)的任务。 如果更改了客户的订单号或向数据库添加了客户的新订单,则必须更新所有包含订单号列作为关键字段的索引。 索引的维护(或更新)是与添加或更改订单相关的总交易时间的因素。
如果多个索引受数据库行更改的影响,则这些索引的维护将默认顺序进行,默认情况下一次维护一次。 首先,订单号更改会传播到IndexA。 完成对IndexA的更改后,订单号将传播到IndexB,依此类推。
并行索引维护涉及同时维护多个索引。 客户的订单号更改可以同时传播到IndexA和IndexB。 这种并发索引维护处理减少了通过数据库获得订单号更改所花费的总时间。 并行索引维护以时间为代价交换资源,从而提高了给定应用程序或事务的I / O速度。
图2显示了通过并行维护多个索引可以节省的时间。 在图2中,新行被加载到具有多个索引的表中,并且并行索引维护将加载时间缩短了两到三倍。
假设已经安装并激活了DB2 SMP功能,那么仅当应用程序为:
在批处理更新和数据仓库加载过程中通常会发现阻塞插入,因此并行索引维护在这些环境中对性能的影响最大。
提示:如果加载过程正在向表中添加20%以上的新行,通常建议在加载之前删除索引,然后在加载过程完成后使用并行处理重建索引。
当表重新使用已删除的行时,DB2无法在数据库引擎级别执行行级别的阻塞,因为DB2必须从阻塞的插入中提取出单独的行,以便可以将每个单独的插入放置在已删除的行槽中。 结果,在数据库引擎级别缺少阻塞的插入会阻止使用并行索引维护。
可以通过关闭表的重用删除行来启用并行索引维护。 但是,禁用重用已删除的行可能会产生负面影响,因为用户可能需要频繁地重组其DB2表才能回收已删除行的存储空间。 实际上,DB2 for i使用重用删除行功能创建了所有SQL表,从而实际上消除了重新组织表的需求。
因此,DB2在7.1发行版中提供了一个新的覆盖数据库文件(OVRDBF)命令选项,以提供临时功能,以将“重用已删除”属性设置为* YES的表临时启用DB2行级阻塞和并行索引维护。 通过在Override命令上指定REUSEDLT(* NO)的参数值,请求替代的作业将由DB2处理该表,就好像该表是使用REUSEDLT(* NO)创建的一样。 可以修改批处理作业以调用此覆盖,以提高其性能,因为REUSEDLT(* NO)将使批处理能够从DB2行级阻塞和并行索引维护中受益(假设已安装DB2 SMP)。 访问同一表的所有其他作业将接受* YES的永久重用删除行设置。
要获得IBM i 5.4和6.1版本上此新替代选项的性能优势,您可以从IBM Lab Services组织购买资产(请参阅参考资料了解联系信息)。
安装DB2 SMP功能部件之后,有几种不同的方法可以激活并行处理,以便可以执行并行索引的构建和维护。
默认情况下,使用QQRYDEGREE系统值在系统范围内控制并行处理量。 如果该系统值设置为*NONE
或*IO
以外的其他值,则DB2 for i在维护和构建索引时将使用并行处理。 CHGSYSVAL
(更改系统值)命令可用于更改QQRYDEGREE系统值的设置。 您可以指定以下值来启用并行索引处理:
*MAX
-DB2 i引擎可以在并行索引维护和构建期间使用所有CPU处理器和作业(连接)可用的所有内存。 *OPTIMIZE
-一个很好的邻居设置。 DB2引擎使用其CPU处理器和内存的作业份额。 *IO
查询优化器可以选择使用任何程度的并行度来执行I / O处理。 *NONE
这是默认值。 没有并行处理用于索引处理。 如果要将并行处理限制为单个作业或连接,请使用以下接口之一来覆盖系统值设置:
CHGQRYA
(更改查询属性)CL系统命令 QAQQINI
选项文件 SET CURRENT DEGREE
SQL语句 CHGQRYA CL命令上的DEGREE参数接受与系统值相同的值。 另外,DEGREE参数还支持*NBRTASKS n
的值,其中n可以是2到9999之间的任何数字值。此值设置DB2引擎可以使用的最大CPU处理器数。 不建议使用此并行度设置。
如果在作业中执行清单1中的CHGQRYA命令,则仅针对该作业将并行度设置为*MAX
,而与系统值无关。
CHGQRYA DEGREE(*MAX)
可以在作业中多次发出此命令以打开和关闭并行性。
QAQQINI
文件还允许您为单个作业或连接指定并行处理。 就像在计算机上找到的.INI
文件一样,该文件用于存储配置设置以控制PC工具和应用程序的行为(颜色,窗口大小等), QAQQINI
文件可用于影响数据库引擎的行为。 ,包括并行处理行为。 这些QAQQINI
配置设置可以保存并在多个数据库请求中动态应用。
QAQQINI
文件只是一个普通的数据库表,这意味着您可以随着环境的变化而动态地更改不同属性的值。 该表也非常灵活,因为可以使用常规数据库接口来更改QAQQINI
属性的值。 清单2显示了如何使用QAQQINI
文件将并行处理程度设置为*OPTIMIZE
。
UPDATE MyLib.QAQQINI SET QQVAL = '*OPTIMIZE' WHERE
QQPARM='PARALLEL_DEGREE'
PARALLEL_DEGREE
属性支持QQRYDEGREE系统值和CHGQRYA命令支持的并行度值的超集。 除了这些接口支持的并行度值之外, PARALLEL_DEGREE
属性还支持以下值:
*MAX p
优化程序针对*MAX
设置执行其正常的并行度计算。 平行度计算完成后,使用p提供的百分比值增加或减小平行度值。 p的值可以是1到200。小于100的任何值都会降低数据库请求上使用的并行度,大于100的任何值都可以提高并行度。 例如, *MAX
50的值会将并行度减半,而*MAX
200的值会使并行度设置加倍。 *OPTIMIZE p
此值使优化器的行为类似于*MAX
p设置。 不同之处在于,该百分比应用于*OPTIMIZE
设置的并行度计算。 对在作业或连接期间更改QAQQINI
属性值的次数没有限制,因此可以很轻松地对某些DB2操作使用并行处理,并使用该接口对其他DB2操作关闭并行处理。 请参阅相关主题有关创建和使用的详细信息QAQQINI
文件。
SET CURRENT DEGREE语句提供了直接SQL接口,用于更改并行度值。 清单3显示了SQL语句的语法非常简单。
SET CURRENT DEGREE = MAX
SQL接口支持的并行度值与其他接口略有不同。 以下是SET CURRENT DEGREE
接口支持的并行度值的列表:
MAX
相当于* MAX平行度设置 ANY
等效于* OPTIMIZE并行度设置 IO
相当于* IO并行度设置 n
等于* NBRTASKS n设置,当n的值大于或等于2时 NONE
或1
等效于* NONE并行度设置 本文展示了DB2 SMP功能为非查询工作负载提供的并行处理的价值。 要启用并行索引处理,请在构建索引,加载数据或执行批处理之前,使用本文介绍的接口之一激活并行处理。 这样,您可以更充分地利用多CPU服务器上的CPU资源并提高性能。
翻译自: https://www.ibm.com/developerworks/data/library/techarticle/0301milligan/0301milligan.html