深入DB2代理的工作原理与连接过程


  本文标签:代理 工作代理 DB2 连接

  简介

  DB2 的代理 (agent) 是位于 DB2 服务器中的服务于应用程序请求的一些进程或线程  。当有外部应用程序连接至 DB2 实例提出访问请求时,DB2 的代理就会被激活去应答这些请求  。一般 DB2 的代理被称为工作代理,工作代理大概有三种类型:空闲代理、活动的协调代理、子代理  。

  ◆空闲代理:指的是没有任何任务的代理  。这种代理不服务于任何远程连接也不服务于本地连接,处于一种备用或待命状态  。

  ◆活动的协调代理:指的是处于工作状态的代理,每一个外部应用程序产生的数据库活动连接的都有一个活动协调代理来为它服务  。

  ◆子代理:指的是接受协调代理分发出来的工作的下一级代理  。在 DB2 V95 以前,只有在多分区环境 (MPP) 或节点内并行环境 (SMP) 下才存在子代理,在 DB2 V95 中所有环境中都可能存在子代理  。

  在 DB2 服务器中有一个代理池,当实例刚启动后这里便有一些代理(其数量取决于实例参数 NUM_INITAGENTS)  。在没有任何数据库连接时,它们处于待命状态,就是空闲代理  。而当有外部程序连接至数据库时,这些代理开始得到命令去服务于这些新建的连接,这时它们就变成了活动的协调代理  。这些协调代理再将请求逐步细分,分配给下一级代理即子代理去处理  。如果当前的代理都已经在工作了,同时又来了新的请求,数据库管理器会产生一个新的代理去应答  。当事务处理完毕而且数据库连接断开后,协调代理要么返回代理池变回空闲代理,要么就自动消失了(取决于实例参数 NUM_POOLAGENTS)  。这就是一个代理的生命周期  。

  相关的配置参数

  通过执行 DB2 get dbm cfg 可以看到以下几个和代理相关的实例参数:MAXAGENTS,NUM_POOLAGENTS,NUM_INITAGENTS,MAX_COORDAGENTS,MAX_CONNECTIONS,MAXCAGENTS  。下面对它们做一下简要介绍:

  ◆MAXAGENTS:这个参数为当前实例中全部代理的数量,包括协调代理,空闲代理和子代理之和  。不过这个参数在 DB2 V95 中已经不再使用了  。

  ◆NUM_POOLAGENTS:这个参数用来控制代理池中的空闲代理的数量  。当活动的代理完成工作返回代理池变成空闲代理时,如果数量超过了这个参数,那么这个代理就会自动消失了  。注意:在连接集中器激活的情况下,代理池中的空闲代理数目在某一时刻可能会超过 NUM_POOLAGENTS 的大小,以应对突发的高密度连接  。

  ◆NUM_INITAGENTS:这个参数就是前面提到的在实例刚刚启动时便生成的一些空闲代理的数目  。这是为了提高性能,因为这些代理可以随时变成协调代理去应答外部应用请求,而不用临时再生成新的代理  。

  ◆MAX_COORDAGENTS:这个参数决定了在实例中在同一时刻最大的协调代理的数目 ( 在多分区环境指的是一个节点上的最大协调代理数 )  。

  ◆MAX_CONNECTIONS:这个参数决定了允许连接至一个实例的最大的连接数 ( 在多分区环境指的是一个节点上的最大连接数 )  。

  ◆MAXCAGENT:这个参数决定了实例中的令牌的数量,一个协调代理只有得到了令牌才能去服务于应用程序  。当没有得到令牌时,协调代理只能等候  。不过这个参数在 DB2 V95 中也已经取消了  。