达梦系统网络通信异常Read timed out排查及解决过程

用户反馈应用连接数据库经常出现网络通信异常
相关sql语句在数据库在数据库客户端能正常执行,执行时间不到1s
检查数据库参数,运行日志,网络方面,驱动版本都正常
查看应用报错日志,里面有read timd out 报错,一般是连接超时导致的
 
检查durid连接池配置如下
 
Druid 连接池connectTimeout: 和socketTimeout参数默认是10s,将这两个参数改成20000之后还是同样报错
最后将connectTimeout: 和socketTimeout改成120000,应用可以正常查询出数据,但执行时间很慢需要45s,而在客户端执行只需要0.2s,可以确认是应用里面sql执行计划不准导致。
收集统计信息,清空执行计划缓存
call sp_clear_plan_cache()
清空缓存之后,应用还是慢,通过下面查找缓存中的执行计划
select * from v$cachepln where upper(sqlstr) like '%SELECT * FROM TEST WHERE ENAME%'
alter session set events 'immediate trace name plndump level 150995946,dump_file ''/home/dmdba/new.log'''
应用端执行计划如下:
客户端执行计划如下
慢在嵌套循环,通过添加/*+enable_index_join(0)*/ 让走hash join解决,应用验证之后1s以内出结果
总结:主要原因是sql执行计划和客户端执行计划不一样导致,在应用执行时间过长导致超时报错
 
posted @   fangzpa  阅读(403)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2021-11-01 达梦数据库守护进程脑裂问题处理
点击右上角即可分享
微信分享提示