文档章节

实战笔记丨JDBC问题定位指南

华为云开发者社区
 华为云开发者社区
发布于 06/28 10:04
字数 1705
阅读 4.6K
收藏 7

精选30+云产品,助力企业轻松上云!>>>

JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集。JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批组件之一。

JDBC问题基础知识

JDBC问题是指比较宽泛的,体现在JDBC层面的问题,造成JDBC问题的原因主要是三个方面:1、应用程序和应用程序框架问题;2、JDBC业务功能问题;3、数据库内核问题。问题表现可以分为三个大的方面:1、执行报错,JDBC抛出异常;2、执行效率低,耗时异常;3、特性不支持,JDBC未实现的JDK接口。

JDBC问题分类

JDBC问题定位方法及解决措施

建立数据库链接失败

1、 关键字:Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 客户端ping服务端IP,看网络是否畅通,网络不通首先解决网络问题,然后查看端口是否正确,端口不正确修改为正确的端口;

2、 关键字:FATAL: Invalid username/password,login denied. 检查用户名密码的配置是否正确。措施:将其修改为正确的用户名密码。

3、 关键字:No suitable driver found for XXXX 检查URL格式是否正确, 措施:将其修改为正确的格式gsjdbc4.jar对应 jdbc:postgresql://host:port/database, gsjdbc200.jar对应jdbc:gaussdb://host:port/database。

4、 关键字:FATAL: no pg_hba.conf entry for host 检查所链接CN是否配置远程访问权限,在cn下的pg_hba.conf文件中添加host all all 0.0.0.0/0 sha256。

5、 关键字:conflit JDBC jar包和应用程序冲突,措施:将gsjdbc4.jar替换为gsjdbc200.jar

执行业务抛异常

1、 关键字:receiveErrorResponse 若报错中含有次关键字,则JDBC报错是接收到了内核发来的异常报文和异常信息, 措施:需要收集相关报错及日志信息发回研发分析。

2、 关键字:Broken pipe, connection reset by peer 可能原因:网络故障,数据库链接超时,措施:检查网络状态,修复网络故障,影响数据库链接超时的因素,数据库参数session_timeout以及lvs。

3、 关键字:The column index is out of range 可能原因:应用程序获取的结果集和预期不一致,列数不一致,应用程序问题 措施:检查数据库表定义和查询sql,对返回结果集做一个正确预期,若结果集只有3列,取值时传入的index最大为3。

性能问题

1、 设置loglevel=3,打开jdbc日志,若主要耗时在processResult阶段,可分为两种情况:1)jdbc端一直等待内核返回的报文,等待时间较长; 判断方法:查看FE=> Syncr日志和<=BE ParseComplete日志之间的时间间隔,若时间间隔较久,则判断是内核执行慢;措施:需要内核人员分析sql执行慢的原因;2)结果集过大,一次性全部加载,消耗大量时间;判断方法:看日志若<=BE DataRow出现次数特别多,或则直接在gsql里执行select count(*)查询出来的数目特别大,则判断是结果集过大; 措施:设置fetchSize参数为一个较小的值,使数据按批次返回,客户端得到快速响应。

2、 若主要耗时在modifyJdbcCall(校验传入的sql是否符合规范)和createParameterizedQuery(将传入的sql解析为preparedQuery,以获取由simplequery组成的subqueries)阶段,则需要看一下传入的sql是不是过长,措施:jdbc本身没办法优化这部分耗时,需要应用端看下是否可以优化传入的sql。

功能问题

1、 关键字:not yet implemented ,JDBC未实现接口,措施:需要研究一下是否可实现,是否需要落需求,或则是否有其他接口已提供相同功能,调整业务使用已提供接口。

2、 JDK标准接口中未提供功能,JDK未提供标准接口,措施:理论上,JDK未提供接口,JDBC不支持,实际使用中可以使用JDBC类中的public方法获取部分过程数据,绝大部分情况下明确不支持。

常见案例

加载驱动失败

客户在使用JDBC的时候往往不是直接通过Java程序加载驱动建立链接,而是通过应用程序框架,做好配置之后通过应用程序框架自动建立链接,可能会由于配置问题导致建立链接失败,如:使用了gsjdbc200.jar,但是加载的驱动仍然是org.postgresql.Driver后者使用的url格式仍然是jdbc:postgresql,由于是应用程序框架加载的,所以有些时候驱动路径和url格式都是固定的,只允许配置ip、port、user、password等基本信息,并且在出错的时候只能看见建立链接失败的log信息,看不见堆栈。

解决措施:(1)首先应该检查用户使用的jdbc驱动是gsjdbc4.jar还是gsjdbc200.jar,若是gsjdbc200.jar应该替换为gsjdbc4.jar,尝试建立链接。(2)排除JDBC嫌疑,写一个Java测试用例,不通过应用程序架构,通过Java程序直接加载驱动,建立链接,在排除jdbc嫌疑之后再去细致研究应用程序框架,以解决问题。

JDBC jar包冲突

多个局点曾报出类冲突问题,都是由于JDBC和应用程序拥有相同路径相同名称的类导致,大体可以分为两类,一是gsjdbc4.jar和开源postgresql.jar冲突,两者具有完全相同的类名,二是gsjdbc4.jar 由于iam特性引入了一些其他工具,例如fastjson,和应用程序中的fastjson冲突;

解决措施:针对和开源postgresql.jar的冲突,我们提供了gsjdbc200.jar,使用和开源驱动不同的url格式和驱动路径,驱动名由org.postgresql.Driver修改为com.huawei.gauss200.jdbc.Driver,url格式由org:postgresql://host:port/database改为jdbc:gaussdb://host:port/database,彻底解决了和开源jar包的冲突;针对JDBC引入的jar和应用程序中引入jar的冲突,我们通过maven的shade修改了jar里类的路径,解决了这类冲突。

 

点击关注,第一时间了解华为云新鲜技术~

华为云开发者社区
粉丝 27
博文 156
码字总数 355382
作品 0
南京
私信 提问
加载中
请先登录后再评论。
Java电子书高清PDF集合免费下

Java电子书分类 Java、Spring、SpringBoot、SpringCloud、mybatis、Tomcat、多线程、Git相关、Redis、设计模式、Nginx、Linux、算法、数据库、大数据、架构 电子书大概有30G左右 部分电子书截...

osc_q27elio3
07/02
99
0
Java电子书高清PDF集合免费下

Java电子书分类 Java、Spring、SpringBoot、SpringCloud、mybatis、Tomcat、多线程、Git相关、Redis、设计模式、Nginx、Linux、算法、数据库、大数据、架构 电子书大概有30G左右 部分电子书截...

Java程序员小黑
07/01
0
0
历史书单

2020年04月 《不懂说话,你怎么带团队?》(Page:84) 2020年03月 《思维导图笔记整理术》(2020-03-15 完成) 《有钱人和你想的不一样 》(2020-03-19 完成) 《码处高效:Java 开发手册》...

osc_3md1xrlp
2018/08/19
2
0
Java 入门书籍

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/meism5/article/details/89793729 这些的书都适合 Java 入门看,最好...

ConstXiong
2019/07/25
0
0
【《实战java虚拟机》学习笔记】01. 初探java虚拟机

java 虚拟机结构 2. 整数在java虚拟机中的表示 整数在java虚拟机中以补码的形式保存, 原码:所谓原码,就是符号位加上数字的二进制表示,以为例,第1位表示符号位(正数或负数),其余31位表...

Funcy1122
2019/09/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

BIOS开启虚拟化技术支持_MQ

安装虚拟机前开启虚拟化技术支持 1.首先,你需要确认的使你的计算机型号和CPU、BIOS的型号,因为过老的计算机是不支持虚拟化技术的。 2.那么怎么知道呢,方法很简单。开机时按F2、F12、DEL、...

osc_52r4y6wv
22分钟前
14
0
推进BI国产化替代,永洪科技新产品性能提升200%

各行各业已经进入到数字化转型的时间,数字化成为未来企业必须的标签,“国产化替代”成为当今企业的首要选择。 7月9日,以《绽放科技创新力量,推进BI国产化替代》为主题的2020永洪科技新产...

osc_4x0ulctb
24分钟前
16
0
手把手教你Python GUI开发系列之--框架

框架 框架(Frame)相对于其他组件而言,它只是个容器,因为它没有方法,但它可以捕获键盘和鼠标的事件来进行回调。 框架一般用作包含组控件的主体,且可以定制外观。 创建不同样式的框架 再次...

osc_8eb8cps3
25分钟前
13
0
Just test it!!软件测试测起来!!

(图片: josh@unsplash,字数:700,时间:1分钟) (一) 一切的软件质量保障活动,归根结底,就两种类型。 一种是基于代码执行的,一种是不基于代码执行的。 测试之于肉眼自查、静态检查、代...

osc_8cqhsn24
26分钟前
12
0
A Bug's Life POJ - 2492

A Bug's Life Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes that they feature two different genders and that they only inte......

osc_7nzqlmki
28分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部