|
1.连接超限问题
在 DB2 V8,V9.1 中所设置的 MAX_CONNECTIONS 或 MAXAGENTS 值比较小时,如果出现了外部连接数过多就会出现错误。错误如清单 1 所示。
清单 1. db2diag.log 诊断日志
2008-01-15-14.30.13.090289-360 I12983210A1195 LEVEL: Info
PID : 762076 TID : 772 PROC : db2acd
INSTANCE: db2inst1 NODE : 000
APPID : *LOCAL.db2inst1.080115203015
EDUID : 772 EDUNAME: db2acd
FUNCTION: DB2 UDB, DRDA Communication Manager, sqljcReceive, probe:30
MESSAGE : ZRC=0x8136001C=-2127167460=SQLZ_RC_NO_CONNECTION, SQLT_SQLJC
"No connection"
DATA #1 : String, 11 bytes
CCI Error:
DATA #2 : unsigned integer, 8 bytes
...
这时可以通过下面命令来查看当前的连接数:
清单 2. 查看当前的连接数
$ db2 list applications
Auth Id Application Appl. Application Id
DB # of
Name Handle
Name Agents
-------- -------------- ---------- ---------------------------------------------
----------------- -------- -----
DB2INST1 db2taskd 583 *LOCAL.db2inst1.080112150958
SVT_DB 1
DB2INST1 db2stmm 582 *LOCAL.db2inst1.080112150957
SVT_DB 1
DB2INST1 java 592 *LOCAL.db2inst1.080115201505
SVT_DB 1
DB2INST1 java 572 *LOCAL.db2inst1.080115201445
SVT_DB 1
DB2INST1 java 585 *LOCAL.db2inst1.080115201458
SVT_DB 1
DB2INST1 java 565 *LOCAL.db2inst1.080115201437
SVT_DB 1
DB2INST1 java 584 *LOCAL.db2inst1.080115201457
SVT_DB 1
DB2INST1 java 590 *LOCAL.db2inst1.080115201503
SVT_DB 1
DB2INST1 db2bp 591 *LOCAL.db2inst1.080115201502
...
可以查看这时的连接数与 MAX_CONNECTIONS 的值的比较,从而做出调整。这时应当注意,在 v9.1 或 v9.5 环境下,有两个服务器内部的特殊应用 db2stmm 和 db2taskd 不应算作外部连接。db2stmm 是用来管理内存自动调节特性的代理,db2taskd 是用来分配数据库后台任务的代理。示例中的 java 代表外部连接来自 JAVA 应用程序。db2bp 代表来自 CLP(DB2 命令窗口 ) 的一个连接。可以看到这些连接都连到了数据库 SVT_DB 上。
接下来可以通过 db2pd 命令来查看当前的代理数:
清单 3. 通过 db2pd 命令来查看当前的代理数
$ db2pd –agents –db SVT_DB
Database Partition 0 -- Active -- Up 1 days 01:24:44
Agents:
Current agents: 36
Idle agents: 0
Active coord agents: 28
Active agents total: 28
Pooled coord agents: 8
Pooled agents total: 8
Address AppHandl [nod-index] AgentEDUID Priority Type State
ClientPid Userid ClientNm Rowsread Rowswrtn LkTmOt DBName
0x0780000000DABD60 522 [000-00522] 2315 0 Coord Inst-Act
ive 655614 db2inst1 db2bp 375793 9620 NotSet SVT_DB
0x07800000027A4160 523 [000-00523] 6170 0 Coord Inst-Act
ive 655614 db2inst1 db2stmm 0 0 NotSet SVT_DB
0x07800000027A5700 524 [000-00524] 6427 0 Coord Inst-Act
ive 655614 db2inst1 db2taskd 0 0 NotSet SVT_DB
0x0780000000DAD840 525 [000-00525] 5158 0 Coord Inst-Act
ive 655614 db2inst1 db2wlmd 0 0 NotSet SVT_DB
0x07800000027A0080 526 [000-00526] 5415 0 Coord Inst-Act
ive 655614 db2inst1 db2evml_ 0 0 3 SVT_DB
0x07800000028C0080 566 [000-00566] 10810 0 Coord Inst-Act
ive 905284 db2inst1 java 160282 102 NotSet SVT_DB
0x07800000027AB2C0 567 [000-00567] 7469 0 Coord Inst-Act
...
在这里看到 Idle agents 值为 0 表明代理池中已经没有空闲代理了(State 全都是 Inst-Active)。这时可以将 Current agents 的值与 MAXAGENTS 的值的比较,或者 Active agents total 的值与 MAX_COORDAGENTS 的值的比较,从而做出相应调整。
对于这种问题还可以通过分析数据库管理器的快照来作出调整:
|