日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

远程访问数据库查询数据量一大就Hang

發布時間:2025/3/15 数据库 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 远程访问数据库查询数据量一大就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的數據庫可以正常工作

The below queries works ----------------------------------------- select * from all_objects where rownum<60;--Response within 296 Millisecond select * from all_objects where rownum<70;--Response within 312 Millisecond select * from all_objects where rownum<80;--Response within 312 Millisecond select * from all_objects where rownum<90;--Response within 312 Millisecond select * from all_objects where rownum<100;--Response within 312 Millisecond select * from all_objects where rownum<110;--Response within 312 Millisecond select * from all_objects where rownum<120;--Response within 312 Millisecond select * from all_objects where rownum<130;--Response within 328 Millisecond The following queries hang ----------------------------------------------- select * from all_objects where rownum<140;--Hang


而在客戶端環境下通過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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。