1. 程式人生 > 其它 >記錄查詢GreenPlum(基於PostgreSql)資料庫查詢報錯Eceptioxn while reading from stream

記錄查詢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