为什么oracle客户端连接服务端时非要尝试去dns解析客户端主机名

描述: 一企业克隆了两台虚拟机用来部署应用,连接的是oracle数据库,总是其中随机一台机器访问数据库响应很慢,导致应用总是突然无缘无故响应超时。
排查:数据库未发现慢sql,两台应用服务器都是一样的虚拟机 克隆出来的。服务器test1访问数据库特别慢 明天服务器test2访问数据库特别慢,数据库服务器日志未发现特别的报错信息,尝试过更换应用ojdbc驱动。最后发现服务器上安装sqlplus客户端访问数据库时,登录操作非常慢,但是登录后执行sql查询特别快,写测试jdbc程序发现和数据库创建连接时总是有10s左右的延迟, 之前尝试抓1521数据包发现总是第一个OCI数据包 客户端10秒后才像服务端发出, 最后同时抓取1521和53(DNS)的包才发先客户端总是尝试先拿本主机名去DNS服务器尝试解析,DNS服务器响应很慢导致客户端OCI数据包准备慢了。最终处理办法是在hosts文件加入了本主机名的解析记录,然后访问数据库速度就恢复了。这边做了很多测试,无论是OCI.dll还是jdbc连接oracle数据库 都会先尝试去DNS解析本客户端服务器的主机名,无论DNS解析结果入库,OCI数据包中的主机名都是本主机名 也未按照解析结果传服务端,为什么还要做DNS解析主机名的动作??

img

img

DNS是我测试环境故意配置错的,为了复现10秒延迟是DNS解析导致的

看来这个问题诺大的互联网,无人能解了~

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答

本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。

​​​​因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。