Troubleshooting
Problem
DB2 客户端连接pureScale服务器时候较慢
Symptom
DB2 客户端连接pureScale服务器很慢,但是相同客户端连接ESE服务器时候速度却正常。
Cause
当客户端通过TCP/IP协议连接到DB2服务器时,客户端会获取服务器列表并在本地缓存起来。服务期列表被客户端用来做ACR或者负载均衡(WLB)。 如果DB2服务器是pureScale,那么返回的服务器列表包含了所有工作成员,该列表包含了对应成员的hostname/IP还有端口号。
你可以使用表函数MON_GET_SERVERLIST查看pureScale的服务器列表,同样你也可以使用命令“db2pd -serverlist”获取服务器列表信息。下面是“db2pd -serverlist”命令的输出样例:
db2sdin1@PURE-246:~> db2pd -db SAMPLE -serverlist
Database Member 0 -- Active -- Up 0 days 02:19:15
Server List:
Time: Mon Apr 27 18:20:50
Database Name: SAMPLE
Member Subset Id: 0
Member Subset Name: SYSDEFAULTMEMBERSUBSET
Count: 4
Member Hostname Non-SSL Port SSL Port Priority
0 PURE-246 50000 0 100
1 PURE-249 50000 0 0
2 PURE-250 50000 0 0
3 PURE-251 50000 0 0
如果服务器列表返回的是hostname,那么这些hostname在客户端必须是可以被DNS查找和解析的。在有的时候,当hostname不能被客户端解析,或者解析过程较慢时, 就会出现连接慢的问题。
Diagnosing The Problem
搜集db2trc(记得打开-t选项),从格式化后的flw文件, 你可以看到延时发生在 sqloPdbTcpIpGetAddrInfo():
6087 3.658140900 | | sqljrParseSrvlst data [probe 11]
6088 3.658142100 | | | sqljrUpdateSrvlst entry
6089 3.658142800 | | | | sqljrParseTcpporthost entry
6090 3.658149100 | | | | | sqloPdbTcpIpResolveHostName entry
6091 3.658150500 | | | | | | sqloPdbTcpIpGetAddrInfo entry
6092 3.658151100 | | | | | | sqloPdbTcpIpGetAddrInfo data [probe 5]
6103 5.933674200 | | | | | | sqloPdbTcpIpGetAddrInfo data [probe 10]
6104 5.933677600 | | | | | | sqloPdbTcpIpGetAddrInfo exit [rc = 0x00002AF9 = 11001]
6105 5.933680800 | | | | | sqloPdbTcpIpResolveHostName error [probe 9]
6106 5.933681900 | | | | | sqloPdbTcpIpResolveHostName exit [rc = 0x810F0032 = -2129723342 = SQLO_HOST_UNKNOWN]
Resolving The Problem
解决这个问题,你需要保证你的客户端DNS可以解析“db2pd -db <db name> -serverlist”输出中的所有Hostname, 否则建议在客户端的/etc/hosts中加入对应的IP和hostname。
Was this topic helpful?
Document Information
Modified date:
16 June 2018
UID
swg21983946