远程访问数据库查询数据量一大就Hang
最近剛為客戶升級了一套Oracle Database,一切進展順利,眼看就要順利驗收時,發現有部分客戶端軟件連接新版本數據庫時會Hang,問題非常詭異。
系統環境如下?
升級前的環境
OS:Windows Server 2003?
DB:Windows Database Enterprise Edition 9.2.0.5?
升級后環境
OS:Windows Server 2008 R2 64bit?
DB:Oracle Database Enterprise Edition 11.2.0.4 64bit?
?客戶端環境
OS:Windows XP?
DB Client:ODAC 11.2 Release 3 and Oracle Developer Tools for Visual Studio (11.2.0.2.1)?
問題描述?
通過DataPump進行異機升級,升級后的主機和升級前的主機位于同一網段內。升級后發現部分.NET客戶端程序訪問11.2.0.4版本的數據庫時,可以正常登錄,
但訪問的數量大時就死掉了。升級前所有的.NET客戶端應用程序訪問9.2.0.5的數據庫可以正常工作
而在客戶端環境下通過SQL*PLUS訪問11.2.0.4數據庫,返回大數據量沒有問題,在客戶端環境下通過.NET程序?
訪問原來的9.2.0.5數據庫也可以返回大數據量。 問題非常奇怪。
如果是新版本數據庫的問題,為什么通過SQL*PLUS可以,為什么不是所有的.NET程序都有問題?
如果是.NET程序問題,為什么不是所有的.NET程序都有問題?
如果是網絡/防火墻的問題,為什么連接同網段的9i庫是可以的?
問題分析?
問題非常詭異,通過10046服務器端跟蹤,也沒有什么有價值的信息,因為客戶端采用ODAC驅動,無法進行相關客戶端跟蹤。
MOS要了adplus hang dump也沒分析出原因,只知道在read()時Hang主了。
問題很有規律,到達一定量的數據,會直接Hang,看起來像服務器無法傳遞數據到客戶端。Oracle能設置網絡傳遞數據的參數不多。
首先想到了SDU,根據官方文檔描述,服務器端和客戶端都設置,取最小的那個。因為改動程序較為麻煩,就直接設置了服務器端。
無論設置512還是65535都沒有用。
在試試防火墻的問題,找一臺中間機器通過Oracle?Connection Manager (CMAN)進行中轉下,還是不行,吐血!(注:CMAN在類似有防火墻的地方還是很有用的,安裝時候
注意要選擇監聽一起安裝,不然無法安裝成功,最好SQL*PLU也安裝,這樣方便測試)。
能試的都試了,還是不能解決訪問,MOS也沒有什么說法,郁悶!死馬當活馬醫,預備以下測試方案:
1、客戶端設置SDU
2、客戶端設置OPD.NET?FetchSize等相關參數
3、測試防火墻的TimeOut時間
客戶端連接字符串中設置SDU=512,測試OK!OPD.NET/防火墻的問題就不用測試了。
進一步測試發現,SDU設置為4096還是OK的,設置5120就會Hang,不管它什么原因了,總算解決了。
?
?
?
?
?
轉載于:https://www.cnblogs.com/dfzzqq/p/3656497.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的远程访问数据库查询数据量一大就Hang的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ele-plus包的安装和使用
- 下一篇: Dojo实现Tabs页报错(二)