当应用程序连接DB2数据库时,DB2会对所有连接(本地的和远程的)请求分配代理程序。代理程序代表应用程序执行所有数据库请求。
在V9.5之前的UNIX或Linux平台上用ps -ef命令,可以看到下面的进程名:
db2agent 协调代理程序
db2agentg DRDA应用程序请求器的网关代理程序
db2agnsc 并行恢复代理程序
db2agnta 空闲的子代理程序,与某个协调代理程序关联,但无任何任务
db2agntp 子代理程序,当前为与之关联的协调代理执行工作
这些进程都是DB2的代理程序,它们为应用程序服务。
从工作状态上来分,运行中的DB2代理程序,大概分三种:
空闲代理:没有任何任务,不服务任何的应用程序
协调代理:直接面对一个应用程序提供服务
子代理: 面对协调代理,执行来自于协调代理分派的任务(只在V9.5之前的多分区或节点内并行的环境下存在)
与代理程序相关的配置参数
MAXAGENTS 实例级 实例中全部代理的最大数量
NUM_POOLAGENTS 实例级 代理池中空闲代理的最大数量,超过该数值时,空闲代理会被销毁,回收系统资源
NUM_INITAGENTS 实例级 实例启动时创建的空闲代理数
MAX_COORDAGENTS 实例级 实例中一个节点内最大协调代理数
MAX_CONNECTIONS 实例级 实例中一个节点内并存的最大连接数
MAX_APPLS 数据库级 一个数据库中并存的最大连接数
MAXCAGENT 实例级 实例中的token数,也就是可同时工作的协调代理数
DB2代理的概念和预创建进程的TCP服务器原理类似。在DB2实例启动时会预先启动一定数量(NUM_INITAGENTS)的代理程序。当这些预启动的代理程序都分配给不同的应用程序连接时,新的应用程序连接进来或需要新的代理程序时,DB2就要创建新的代理程序,其中协调代理程序的数量由MAX_COORDAGENTS限制。全部的代理程序(空闲+协调+子代理)数量不能超过MAXAGENTS,否则DB2会报错(db2diag.log)。可以同时连接到一个实例或节点的应用程序连接由MAX_CONNECTIONS限制;可以同时连接到一个实例中某个数据库的应用程序连接由MAX_APPLS限制。一个实例下的所有数据库的MAX_APPLS之和不能超过该实例的MAX_CONNECTIONS。在所有的协调代理程序中,最多只有MAXCAGENT个可以执行任务,其他的需要等待。
这些与代理程序相关的配置参数,可以用于控制应用程序对数据库产生的负载。
本文内容参考牛新庄的《深入解析DB2》