通过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操作系统日志。