GBase 8a运行JDBC连接报错The last packet successfully received from the server was milliseconds ago.

通过JDBC驱动连接GBase 8a数据库时,如果连接断开,则会报这类错误:The last packet successfully received from the server was XXXX milliseconds ago. The last packet sent successfully to the server was XXXXX milliseconds ago.

报错样例

报错原因

JDBC的数据库连接,处于关闭状态。

如果2个时间数值较大

比如几秒,几十秒或者更长,则一般是使用时,连接已经是关闭状态。一般原因是连接超时已经断开了一段时间,而客户端使用前没有判断连接是否可用。

参考 GBase 8a空闲超时参数Wait_timeout用法

解决方案一般是使用连接池,并配置检测连接可用性。

如果2个时间数值很小

比如就几个毫秒,那可能是执行过程中,连接意外断开了。需要排查如下几种情况

服务器是否出现宕机

包括硬件故障,数据库服务停止,服务器意外宕机等。

SQL执行时间超过设定值

如果SQL执行时间超过了允许的最大值,则服务器端会强行断掉连接。相关参数请参考 GBase 8a集群SQL执行超时参数

这种情况,会多次出现,因为该SQL会经常超过设定值。

排查连接的数据库gcluster的express.log, 里面会有SQL运行时间超时后,强行 killQuery的信息输出。

网络相关故障

这个除非硬件出问题了,一般都是偶发,且断开时间很长才可以。

包括网卡重启,也会导致这个问题。

可以排查messages操作系统日志。