GaussDB JDBC问题处理
- 故障现象
JDBC连接数据库或者执行业务语句报错,业务成功率下降或者业务持续失败。
- 故障原因
可能原因有以下:
- 应用程序到数据库之间网络通信问题。
- JDBC配置问题。
- 业务逻辑问题。
- 数据库问题。
- 处理方法
Read timed out问题
步骤 1 查看应用报错日志。
如报错为:An I/O error occured while sending to the backend.detail:Read timed out,如下图,则原因是连接超时。

步骤 2 查看JDBC url配置,查看url中是否配置socketTimeout 或者connectTimeout参数。
当设置了connectTimeout时,JDBC创建tcp套接字进行建连时,等待的时间超过了connectTimeout,会抛出异常,这种情况,一般是网络问题或者内核通讯问题导致,需排查故障时的网络状况以及线程池使用情况。
实时查询线程池使用情况:
select node_name,session_info from dbe_perf.global_threadpool_status order by 1;
说明:
历史线程池使用情况,可通过DBS运维管理平台 > 实例监控查看。
当设置了socketTimeout时,JDBC读取报文,调用SocketInputStream.read()函数,该函数会调用函数socketRead阻塞等待内核返还报文,当阻塞时间超过socketTimeout时,会抛出异常。
a. socketTimeout值设置是否合理。
b. 排查慢SQL,参照单SQL性能慢-视图分析。
c. 排查故障时网络状况。
d. 排查有无锁等待超时等,如下图为锁等待超时。
cd $GAUSSLOG/pg_log/cn_xxxx
搜索关键词timeout。

----结束
EOF Exception问题
步骤 1 查看应用报错日志。
步骤 2 如报错为:An I/O error occured while sending to the backend.detail:EOF Exception,如下图,则原因为连接被异常中断。

步骤 3 排查应用程序到数据库网络是否有异常。
步骤 4 执行如下命令,排查数据库集群状态是否正常。
cm_ctl query -Cvd
如CN或者DN组件异常,分布式集群参照CN故障处理,集中式集群参照DN故障处理。
步骤 5 如集群状态正常,则排查数据库CN组件否有重启,如有重启,则参照CN组件状态Normal-告警原因分析章节排查,集中式排查DN组件是否有重启,如有重启,参照DN组件状态Normal-告警原因分析章节排查,若未排查到原因,则联系华为技术支持。
ps ux|grep cn|grep -v grep

ps ux|grep dn|grep -v grep

----结束
认证配置问题
步骤 1 查看应用程序报错日志,如报错为:no pg_hba.conf entry for host,则表示客户端认证配置错误。

步骤 2 连接CN节点,进入到CN目录,集中式场景需要连接DN节点,且进入到DN目录。
步骤 3 查看pg_hba.conf文件配置,如文件中的内容如下。
host posgres jim 192.168.0.1/32 sha256
host表示表示这条记录既接受一个普通的TCP/IP套接字连接,也接受一个经过SSL加密的TCP/IP套接字连接。
posgres表示允许客户端连接到posgres库,此处为database名称,如允许连接任意库,则此处为all。
jim表示允许客户端连接jim用户,此处为user名称,如允许所有用户连接,此处为all。
192.168.0.1/32表示允许IP地址为192.168.0.1/32的客户端连接数据库,此处为IP地址,如允许所有的IP地址连接,此处需设置为0.0.0.0/0。
sha256表示认证方式,一般都用默认值sha256。
步骤 4 如未配置客户端认证,使用以下命令进行配置。
1. 分布式:gs_guc reload -Z coordinator -N all -I all -h "host all all 0.0.0.0/0 sha256"
2. 集中式:gs_guc reload -Z datanode -N all -I all -h "host all all 0.0.0.0/0 sha256"
说明:
HCS场景,执行gs_guc命令需要进入沙箱。
步骤 5 如应用报错为:Invalid or unsupported by client SCRAM mechanisms,则表示连接数据库认证方式不支持,可能是使用PostgreSQL原生的驱动。

步骤 6 确认jdbc驱动是否为GaussDB版本配套的驱动。
官网获取的jdbc驱动解压之后包括:gsjdbc4.jar、gsjdbc200.jar、opengaussjdbc.jar,各驱动说明如下:
gsjdbc4.jar:驱动类名和加载路径与PostgreSQL相同,方便运行于PostgreSQL上的业务进行迁移,但接口的支持情况并不与PostgreSQL完全一致,部分不支持接口需要业务侧进行调整。
gsjdbc200.jar:驱动类名和加载路径与Gauss200相同,方便运行于Gauss200上的业务进行迁移,但接口支持情况并不与Gauss200完全相同,部分不支持接口需要业务侧调整。
opengaussjdbc.jar:主类名为“com.huawei.opengauss.jdbc.Driver”,数据库连接的url前缀为“jdbc:opengauss”,推荐使用此驱动包。如果遇到同一JVM进程内需要同时访问PostgreSQL及GaussDB Kernel的场景,请使用此驱动包。
说明:
当驱动路径下同时存在PostgreSQL与GaussDB官方驱动时,也可能导致此报错,需删除PostgreSQL驱动。
如确认驱动正确,请联系华为技术支持。
----结束
用户名或者密码错误问题。
步骤 1 查看应用程序报错日志,如报错为:Invalid username/password,login denied,则表示为用户名或者密码配置错误。

步骤 2 可使用管理员用户连接数据库,重置用户密码,或者修改程序中的密码为正确密码。
alter user usename password "********";
步骤 3 如重试多次,账户被锁定,可使用以下SQL语句解锁。
alter user username account unlock;
步骤 4 如应用程序报错日志为:The account has been locked,则表示为用户被锁定。

步骤 5 可使用以下SQL语句解锁。
alter user username account unlock;
----结束
- 点赞
- 收藏
- 关注作者
评论(0)