GaussDB(DWS) JDBC报错&性能常见问题处理汇总

举报
along_2020 发表于 2023/01/31 17:51:41 2023/01/31
【摘要】 众所周知,JDBC(Java Database Connectivity)是应用程序访问数据库的统一标准接口, GaussDB(DWS)提供了对JDBC 4.0特性支持的JDBC驱动。客户应用使用JDBC连接数据库并执行SQL,最常见的问题就是各类报错和性能问题,这里整理汇总各类报错原因及对应处理方法供大家参考。

一、报错问题

从报错所处阶段来看,JDBC报错类型主要分为连接报错和执行报错,下面主要列出一些常见报错场景及对应解决办法。

1、连接报错

使用JDBC连接数据库是访问数据库的第一步,最常见的问题有驱动使用问题、网络问题、白名单配置问题、连接串&连接参数问题等。

序号 报错信息 可能原因 解决办法
1 No suitable driver found for 通过JDBC建连时,url格式错误 gsjdbc4.jar驱动对应url格式为 jdbc:postgresql://host:port/database
gsjdbc200.jar驱动对应url格式为jdbc:gaussdb://host:port/database
2 Check that the hostname and port are correct and that the postmaster is accepting 通过JDBC建连时,C/S基本网络不通或者建连参数ip/port不正确 1)客户端ping服务端IP,看网络是否畅通,不通先解决网络问题
2)查看端口是否正确,端口不正确修改为正确的端口
3 no pg_hba.conf entry for host 通过JDBC建连时,未配置数据库侧远程访问通道 1)检查所连接的CN是否配置远程访问通道
2)在CN的pg_hba.conf文件中添加应用侧IP访问通道
4 Connections could not be acquired from the underlying database! 通过JDBC建连时,数据库侧远程访问通道未配置对应database 检查所连接CN上pg_hba.conf中配置的白名单是否有对应database的条目,并修改添加
5 Invalid username/password,login denied. 通过JDBC建连时,建连参数username/password不正确 检查用户名密码,将其修改为正确的用户名密码
6 The authentication type 5 is not supported. 1)使用开源驱动时认证方式不匹配报错
2)密码认证方式不匹配
1)更换应用侧jdbc驱动为GaussDB(DWS)自带驱动
2)将password_encryption_type参数值调整为1,并通过ALTER USER xxxx PASSWORD xxx重置用户密码。
7 none of the server's SASL authentication mechanisms are supported 密码策略问题 https://support.huaweicloud.com/devg-811-dws/dws_04_0093.html
8 terminating connection due to administrator command 会话连接断开 同时排查客户端和服务端的连接断开原因,及是否有超时设置,例如session_timeout等,有则按业务实际情况调整。
9 SSL SYSCALL error: Connection reset by peer LVS virtual_router_id路由配置冲突 https://bbs.huaweicloud.com/forum/thread-60571-1-1.html
10 This connection has been closed 服务侧CN异常 检查CN进程是否重启;检查CN上活跃会话数是否异常;检查CN日志是否有异常报错
11 An I/O error occurred while sending to the backend. CN进程异常、session超时退出、 手动kill session、LVS中virtual router id冲突等 https://bbs.huaweicloud.com/forum/thread-93472-1-1.html
12 No Datanode defined in cluster 使用开源驱动指定currentSchema连接低版本GaussDB (DWS)(651及之前) 将开源驱动替换为产品自带的驱动:gsjdbc4.jar


2、执行报错

针对执行阶段(使用jdbc执行接口,如prepare/execute等)的报错类问题,首先需确认报错来源是应用侧(应用程序&JDBC)还是来源于服务侧(DWS),确认方法有两种

  • 在GaussDB(DWS)的CN日志中搜索关键报错信息
  • 在GaussDB(DWS)的产品文档的“错误码参考”章节搜索关键报错信息

如果以上能够搜到,则可确认报错来源为数据库服务侧,如确定为服务侧报错,则先按照错误码章节建议处理,否则,需先排查应用侧问题。

序号 报错信息 可能原因 解决办法
1 “Caused by: java.net.SocketException: 打开的文件过多” 连接池用法问题,Java中反复初始化连接池导致连接池里不断的堆积,导致打开文件数过多 正确使用JDBC连接池接口,避免频繁反复创建连接池
2 Batch entry 0 INSERT INTO 没有开启JDBC的批量模式,造成报错的数据不是异常的数据 JDBC的连接串中设置batchMode=true后问题解决
3 Unable to interpret the update count in command completion tag:insert 使用开源PGJDBC 8.x版本存在该问题,在9.x版本修复 升级JDBC驱动版本
4 Communication failure, failed to send session commands or invalid incoming data, error count: 2. URL错写成currentSchema=db1?useSSL=false,JDBCset search_path=jwy_pic?useSSL=false; 语句发送到DN,造成报错退出 URL的参数之间的连接使用&,例如:currentSchema=db1&useSSL=false
5 The column index is out of range  1)应用程序获取的结果集列数和预期不一致
2)使用setType接口设置nvarchar2类型
1)应用侧检查数据库查询sql,对返回结果集做正确预期,若结果集只有3列,取值时传入的index最大为3
2)升级JDBC驱动到8.2.0以上版本
6 Unexpected packet type during copy: 83 连接参数设置问题或者驱动版本问题 1)替换更新对应版本GaussDB(DWS) JDBC驱动
2)调小connectTimeout和sockTimeout参数
7 not yet implemented JDBC未实现接口 1)需要查找是否有其他接口已提供相同功能,调整业务使用已提供接口
2)咨询技术人员研究接口是否可实现
8 Tried to send an out-of-range integer as a 2-byte value JDBC协议规定,变量总数不能超过32767short Int最大值 1)查询场景:建议将大sql进行拆分,确保每个sql变量数小于32767
2)导入场景:建议分批导入或使用CopyManager
9 cached plan must not change result type JDBC中使用PBE协议,默认重复执行5次就会缓存计划,在此之后有如果重建表操作(例如修改表定义),再次执行就会报错 1)在JDBC连接字串中指定prepareThreshold=0,不再cache plan
2)修改表定义后,重启使用对应表的应用服务


二、性能问题

分析JDBC的问题时,我们可以在连接串中打开日志功能,请参考以下URL

jdbc:postgresql://192.168.0.1:8000/test?loggerLevel=TRACE&loggerFile=jdbc.log

设置后,在日志jdbc.log中可以看到语句执行过程中,识别JDBCDWS集群的交互的主要耗时API做进一步分析

序号 场景描述 问题原因 解决办法
1 processResult阶段耗时 1)等待数据库返回的报文时间过长。
2)结果集过大,一次性全部加载
1、业务SQL优化,提高SQL执行效率
2、设置fetchSize参数为较小的值,使数据按批次返回,客户端得到快速响应
2 modifyJdbcCall阶段耗时 传入SQL过长 应用端优化传入的sql长度
3 createParameterizedQuery阶段耗时 传入SQL过长 应用端优化传入的sql长度
4 getColumnTypeName阶段耗时 系统表查询涉及light proxy场景慢 关闭enable_light_proxy参数
gs_guc reload -Z coordinator -Z datanode -N all -I all -c "enable_light_proxy = off"
5 addBatch和executeBatch批插数据性能差 使用开源驱动 使用GaussDB(DWS)自带JDBC驱动


参考文献

《GaussDB(DWS) JDBC连接报错和性能问题定位》https://bbs.huaweicloud.com/forum/thread-183160-1-1.html

《GaussDB for DWS JDBC问题定位指南》https://bbs.huaweicloud.com/forum/thread-62379-1-1.html

《GaussDB(DWS)JDBC连接报错案例集锦》https://bbs.huaweicloud.com/blogs/244348

《故障排除-JDBC连接报错》https://support.huaweicloud.com/trouble-dws/dws_09_0201.html


 【一起来玩转PB级数仓GaussDB(DWS),分享你的技术经验与体验心得,赢开发者大礼包!】第19期有奖征文火热进行中!

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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