GaussDB(DWS)JDBC 问题定位指南

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

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

JDBC问题分类

问题分类

问题原因

建立数据库链接失败

JDBC客户端配置问题,URL格式不对或者用户名密码错误等问题

 

网络不通

 

Jar包冲突

 

内核配置问题,内核未配置远程访问权限

执行业务异常

传入SQL有误,内核不支持

 

内核bug,业务处理异常,返回异常报文

 

网络故障

 

数据库链接超时,socket已关闭

性能问题

 

SQL内核执行

 

结果集过大,导致应用程序段响应慢

 

用户传入SQL过长JDBC解析慢

功能支持问题

 

JDK提供标准接口

 

JDBC实现接口

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

建立数据库链接失败

关键字Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.  
客户端ping服务端IP,看网络是否畅通,网络不通首先解决网络问题然后查看端口是否正确,端口不正确修改为正确的端口;当ping协议未打开时,可以使用telnet工具

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

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

关键字FATAL: no pg_hba.conf entry for host  
检查所链接CN是否配置远程访问权限。可以尝试在cn下的pg_hba.conf文件中添加“host all all 0.0.0.0/0 sha256”,不过请注意,该配置IP范围过大,存在风险,建议配置精准IP段。

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

 

执行业务异常

关键字receiveErrorResponse 

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

关键字Broken pipe, connection reset by peer 

可能原因网络故障,数据库链接超时,措施:检查网络状态,修复网络故障影响数据库链接超时的因素,数据库参数session_timeout以及lvs

关键字The column index is out of range 

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

关键字:invalid input syntax for integer: "FALSE"

可能原因:一般这个出现是由于使用了不正确的驱动导致的(可能使用了PG原生驱动,或者GaussDB TP,或者OpenGauss的驱动)。

请参考下方“驱动版本不正确的排查办法”章节。

关键字:org.postgresql.util.PSQLException: ERROR: canceling statement due to user request。

可能原因:该异常为正常cancel语句时发生,一般情况可能会有以下几个原因:

1. 业务上调用了java.sql.Statement.cancel()

2. 语句的timeout时间设置不合理,例如mybits里就会在参数文件mybatis-config.xml中设置了defaultStatementTimeout属性(单位:秒)

驱动版本不正确的排查办法

    • 找到驱动包(后缀为.jar),通过解压软件打开,得到META-INF目录,进去后看到MANIFEST.MF文件,右键查看,可以看到gs_version字段。
    • 没有此字段,说明可能是早期或者PG的原生驱动。如果压缩包中此文件的创建时间晚于2019年,基本上可以确定是开源驱动;
    • 有此字段,但是出现Gauss300/GaussDB Kernel V100R003XXX/V100R005XXXX版本的字样的,可以确定是非DWS的驱动。我们的驱动版本号正确应该是Gausss200 OLAP V100R007C10, GaussDB A 8.0, GaussDB 8.1.x这样的。
    • 如果已经确定是DWS的驱动,仍然出现问题,说明驱动包没有找对。最简单的办法,删除或者修改当前驱动包后缀为.tmp再运行,仍然可以连接数据库,说明当前定位的驱动包不正确。请联系应用开发人员确定正确的驱动路径。

 

性能问题

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

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


功能问题

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

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

常见案例

加载驱动失败

客户在使用JDBC的时候往往不是直接通过Java程序加载驱动建立链接,而是通过应用程序框架,做好配置之后通过应用程序框架自动建立链接,可能会由于配置问题导致建立链接失败,如:使用了gsjdbc200.jar但是加载的驱动仍然是org.postgresql.Driver后者使用的url格式仍然是jdbc:postgresql由于是应用程序框架加载的,所以有些时候驱动路径和url格式都是固定的,只允许配置ipportuserpassword基本信息,并且在出错的时候只能看见建立链接失败的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.Driverurl格式由org:postgresql://host:port/database改为jdbc:gaussdb://host:port/database彻底解决了和开源jar的冲突针对JDBC引入的jar和应用程序中引入jar的冲突,我们通过mavenshade修改了jar里类的路径,解决了这类冲突

文章由博主@归云原创

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。