用户反馈应用连接数据库经常出现网络通信异常 相关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执行计划和客户端执行计划不一样导致,在应用执行时间过长导致超时报错
标签:Read,报错,应用,sql,timed,执行,out,客户端 From: https://www.cnblogs.com/fangzpa/p/18520932