GaussDB(DWS) JDBC报错&性能常见问题处理汇总
一、报错问题
从报错所处阶段来看,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 | 使用开源PG的JDBC 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,JDBC将set 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协议规定,变量总数不能超过32767(short 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中可以看到语句执行过程中,识别JDBC和DWS集群的交互的主要耗时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期有奖征文火热进行中!
- 点赞
- 收藏
- 关注作者
评论(0)