記錄查詢GreenPlum(基於PostgreSql)資料庫查詢報錯Eceptioxn while reading from stream
阿新 • • 發佈:2022-05-26
工作時遇到查詢數倉總是報錯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
4、配置資料庫連線串,設定描述
以上就是我的一次異常排錯記錄,希望對你有幫助!
Npgsql官方地址:https://www.npgsql.org/doc/index.html