session_timeout设置导致JDBC业务报错
问题现象
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或预期时长,使会话保持长时间连接。
- 登录GaussDB(DWS)管理控制台。在集群列表中找到所需要的集群,单击集群名称,进入“集群详情”页面。
- 单击“参数修改”页签,修改session_timeout参数值,然后单击“保存”。
COPY导入执行完成后,建议继续设置session_timeout=10min,因为如果有客户端长时间连接数据库,但对数据库不进行任何操作,该连接将一直占用一个线程,如果这样的客户端连接很多,就会出现大量的线程都被空闲的连接占用,从而导致数据库连接满或者资源浪费。