关于 Unix 系统下 DB2 分区内并行性方式对应用程序的处理

source:

http://www-01.ibm.com/support/docview.wss?uid=csc10fee3a9e98c4f1d848256fd30056f199

Document #: 2817545C30000

Body:

[标题] 关于 Unix 系统下 DB2 分区内并行性方式对应用程序的处理


内容提要:


主要介绍了 Unix 操作系统下,DB2 分区内并行方式的启用及其与代理进程相关的处理。


说明:


DB2 并行性功能可使 DB2 的一条任务分为多个组成部分,以同时实现各部分的并行处理,从而大幅提高了 DB2 数据库整体性能以及正常的管理工作性能。DB2 支持如下类型的并行性:

·I/O
·查询
·实用程序

对于其中查询的并行性又分为:查询间并行性(inter-query parallelism)和查询内并行性(intra-query parallelism)两种。前者指数据库同时接受多个应用程序查询的能力。每个查询以独立于其它查询的方式运行,但 DB2 同时运行所有查询,DB2 始终支持这种类型的并行性;后者则指使用分区内并行性和/或分区间并行性来同时处理单个查询的各部分,即将一个查询分成多个部分,每个部分被同时并行执行的功能。对于具有多个处理器的对称多处理服务器上的非分区式数据库,启用分区内并行的功能可以令一条任务被分的各组成部分,分别同时执行在各处理器,从而提高了整个任务的执行性能。

如图-1所示,一条查询语句被分成四个部分同时并行处理,使返回查询结果的速度比整条语句串行处理快了许多。

 

图-1. 以分区内并行性方式处理查询语句


这里我们就对启用了分区内并行性的情况下 DB2 对应用程序的处理处理加以说明。


一. 启用 DB2 分区内并行性:

要启用 DB2 的分区内并行性,首先要将数据库管理器配置文件中的 INTRA_PARALLEL 参数设置为"YES"。即:

db2 UPDATE DBM CFG USING INTRA_PARALLEL YES

启用该参数后,可使 DB2 的某些操作,如创建索引,导入数据,SQL 查询等实现并行处理。

对于控制并行作业数目的并行度,可通过以下参数分别设置在不同的级别上:

实例级 - MAX_QUERYDEGREE(数据库管理器配置参数)
数据库级 - DFT_DEGREE (数据库配置参数)
动态 SQL 语句 - CURRENT DEGREE(由 SET CURRENT DEGREE 设置)
静态 SQL 语句 - DEGREE(由 PREP 或 BIND 的 DEGREE 选项设置)
运行的应用程序 - RUNTIME DEGREE(由 SET RUNTIME DEGREE 命令设置)
CLI 配置文件 - DB2GREE(在 db2cli.ini 文件中设置)

如果设置为 ANY",即表示由优化器决定并成程度;若为一指定的值,则表示一个任务最多可实现的并行处理数目。


二. 分区内并行性环境下代理进程的处理:

当某个应用程序连接至一个非分区式数据库时,该连接将被分配一个唯一的协调代理进程,用于代表它的应用程序执行所有的数据库请求,并与其它代理进程进行通信。如果启用了分区内并行性,协调代理进程在执行语句时将根据存取方案及数据库和实例的配置参数决定并行度,然后产生 N 个存取方案的拷贝,将它们分别分配给获取到的 N 个子代理进程进行并行处理,协调代理进程负责协调执行数据库请求的各子代理进程。

在 Unix 环境下,DB2 的协调代理进程和子代理进程的进程名是不同的,协调代理进程为 db2agent,子代理进程分别为:db2agnts(空闲的代理进程)和 db2agntp(工作的代理进程)。见图-2中举例所示:




图-2. 空闲的子代理进程与工作的子代理进程

图中分别有 A 和 B 两个应用程序,A 程序为执行其 SQL 语句,并行使用了三个 db2agntp 子代理进程,B 程序仅使用了一个 db2agntp 子代理进程,而代理进程缓冲池中有三个空闲的子代理进程 db2agnts。由于这四个 db2agntp 子代理进程均与其协调代理进程相关联,所以也称为相关代理进程。

如果当 B 程序完成了 SQL 语句的处理,其相关代理进程将变为空闲,放入代理进程缓冲池中,但由于它有可能为后续的 SQL 语句所重用,因此会依然保持与 B 程序的协调代理进程的关联。如果中断这一相关性,而将其释放为空闲代理进程,将会降低后续 SQL 语句的处理性能。

同理,对于 A 程序,如果下一条语句仅需要两个 db2agntp,则会有一个子代理进程变成空闲但仍然保持与 A 程序协调代理进程的关联。此时,从应用程序 A 的角度来看,各代理进程的状态会呈现如图-3中所示的情况:




图-3. 应用程序 A 及其代理进程的状态

上图中,A 程序拥有一个协调代理进程,两个活动子进程,一个空闲且相关的代理进程,和一个对 A 程序而言虽为空闲但与程序 B 相关的代理进程,以及三个真正空闲(空闲且不与其它程序相关)的空闲代理进程。

假如当前运行于 A 程序上的语句结束,而下一条语句需要的并行度为 8,即需要 8 个并行的子代理进程来完成时,协调代理进程将需要获取额外的子代理进程,则其激活和获取所需子代理进程的顺序将会以最佳地利用当前的代理进程和可用资源的逻辑进行。这里 A 程序的协调代理进程获取额外子代理进程的顺序为:

1. 将当前与其应用程序相关的空闲子代理进程转化为其活动子代理进程。
2. 将未与其它应用程序相关的空闲子代理进程转化为其活动子代理进程。
3. 将当前与其它应用程序相关的空闲子代理进程转化其活动子代理进程,即窃用其它应用程序的相关代理进程。
4. 创建新的进程作为其代理进程。

在本例中,为执行新的 SQL 语句,A 程序的协调代理进程还需要 6 个额外的活动子代理进程,因此该转化的过程和顺序为,激活一个 A 程序的相关子代理进程,与三个空闲代理进程建立相关性并激活,除去与 B 程序相关的那个空闲子代理进程的相关性,再建立与 A 的关联,然后激活该子代理进程,另外还需要创建一个新的代理进程,然后建立与 A 程序的相关性并激活它。

由此可见,对于一个大而复杂的查询,启用分区内并行性将有助于提高程序的性能。但如果对于一个典型的 OLTP 环境,其中常有成百个甚至更多的并行运行着的应用程序,若每个程序再分成由多个代理进程处理的多个部分,系统上会由于存在过多的代理进程,而导致大量的系统开销,因此,对分区内并行性的启用要根据用户具体的应用程序和系统资源进行选择,以便达到提高 DB2 数据库系统整体性能的目的。


参考资料:

 

Copyright and trademark information
IBM, the IBM logo and ibm.com are trademarks of International Business Machines Corp., registered in many jurisdictions worldwide. Other product and service names might be trademarks of IBM or other companies. A current list of IBM trademarks is available on the Web at "Copyright and trademark information" at www.ibm.com/legal/copytrade.shtml.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值