文档首页/ 数据仓库服务 GaussDB(DWS)/ 故障排除/ 数据库使用/ session_timeout设置导致JDBC业务报错
更新时间:2024-07-01 GMT+08:00

session_timeout设置导致JDBC业务报错

问题现象

通过JDBC连接集群执行COPY导入时报错:
org.postgresql.util.PSQLException: Database connection failed when starting copy at org.postgresql.core.v3.QueryExecutorImpl.startCopy(QueryExecutorImpl.java:804) at org.postgresql.copy.CopyManager.copyIn(CopyManager.java:52) at org.postgresql.copy.CopyManager.copyIn(CopyManager.java:161) at org.postgresql.copy.CopyManager.copyIn(CopyManager.java:146) at copy.main(copy.java:95) Caused by: java.io.EOFExceptionat org.postgresql.core.PGStream.ReceiveChar(PGStream.java:284) at org.postgresql.core.v3.QueryExecutorImpl.processCopyResults(QueryExecutorImpl.java:1008) at org.postgresql.core.v3.QueryExecutorImpl.startCopy(QueryExecutorImpl.java:802) ... 4 more

原因分析

数据库默认设置session_timeout=10min,即连接空闲超过10分钟,自动断开连接,导致连接失效。

处理方法

可登录GaussDB(DWS)管理控制台,设置session_timeout为0或预期时长,使会话保持长时间连接。

  1. 登录GaussDB(DWS)管理控制台。在集群列表中找到所需要的集群,单击集群名称,进入“集群详情”页面。
  2. 单击“参数修改”页签,修改session_timeout参数值,然后单击“保存”。

COPY导入执行完成后,建议继续设置session_timeout=10min,因为如果有客户端长时间连接数据库,但对数据库不进行任何操作,该连接将一直占用一个线程,如果这样的客户端连接很多,就会出现大量的线程都被空闲的连接占用,从而导致数据库连接满或者资源浪费。