记录查询GreenPlum(基于PostgreSql)数据库查询报错Eceptioxn while reading from stream

工作时遇到查询数仓总是报错Eceptioxn while reading from stream,如下图所示:

 

查询及推测异常进程:

1、刚开始以为时查询数据时间过长导致数据库连接Kill掉,通过把超时时间设置加长还是无法解决问题,后来推测是ORM框架导致,Nuget包有原来的SqlBuilderCore改为了SqlSugarCore

2、切换ORM框架后继续进行测试,还是会偶尔报错,通过记录Sql语句及时间,程序长时间的等待,超时之后继续报错。与DBA沟通后发现需要执行的SQL并未在数据库后台执行。这是什么问题呢?

带着这个问题,通过现场与DBA联调发现,出现长时间的等待时,DB中会执行DISCARD ALL命令,就在猜测会不会和这个问题有关呢?

 

 

 

首先,带着这个信息我查询SqlSugar的源码,可是并没有找到相关信息。这时我就在想会不会是ORM中使用的pgsql的库有关呢?

通过官方文档查询找到了DISCARD ALL【https://www.npgsql.org/doc/performance.html?q=DISCARD%20ALL】的如下描述:

 

 

 大致意思就是说当池连接关闭时,Npgsql 将安排其状态在下次使用时重置。

3、好了,既然我们找到了这个问题所在,那就分析为什么会出现执行错误,以及要如何避免报错?

通过和DBA深入探讨,猜测是Oracle数据同步到GreenPlum数仓时会有临时数据执行,导致的执行DISCARD ALL命令出错,先是将同步的任务停止和重启发现没有再次发现报错问题,而后通过官方文档上面所述,配置数据库连接串设置,没有出现Eceptioxn while reading from stream错误。

4、配置数据库连接串,设置描述

 

以上就是我的一次异常排错记录,希望对你有帮助!

Npgsql官方地址:https://www.npgsql.org/doc/index.html

posted @ 2022-05-26 16:36  易天塍  阅读(1572)  评论(0)    收藏  举报