oracle结果集过大,多重子查询/大结果集查询问题
多重子查詢/大結(jié)果集查詢問(wèn)題:
問(wèn)題接此帖http://www.itpub.net/273652.html
上次問(wèn)題通過(guò)調(diào)整SGA/SQL語(yǔ)句得到優(yōu)化[最終情況:oracle關(guān)閉重起后,程序第一次執(zhí)行存儲(chǔ)過(guò)程(需要大量讀取物理文件):1500秒,等第2次跑時(shí)150秒(數(shù)據(jù)進(jìn)入sga區(qū)了),完全符合一切oracle教科書的內(nèi)容!]
現(xiàn)在的問(wèn)題是上次問(wèn)題的綜合,
起因: 在我們的應(yīng)用系統(tǒng)(OLTP,其他的事務(wù)都比較小且并發(fā)用戶也比較多)中有一個(gè)查詢重復(fù)的需求,比如企業(yè)/市/省/全國(guó)各級(jí)管理部門,每一級(jí)都需要查本級(jí)別管轄范圍內(nèi)是否存在重復(fù)的人員記錄,程序人員采用多重子查詢來(lái)實(shí)現(xiàn),其中select嵌套5層,子查詢的結(jié)果集返回?cái)?shù)也很巨大,不會(huì)小于20W行;
也曾嘗試使用臨時(shí)表,但臨時(shí)表(insert *** select )單獨(dú)跑select 還比較快,12秒吧,但是insert的過(guò)程比較慢,得20多分鐘
btw:臨時(shí)表這個(gè)對(duì)象放在哪了呢?對(duì)它的操作(尤其是大結(jié)果集時(shí))容易產(chǎn)生什么瓶頸呢?臨時(shí)表后邊也是接著一大堆的查詢條件,有可能還有優(yōu)化的,為什么單獨(dú)執(zhí)行SELECT比較快,而INSERT就慢呢?而且事務(wù)實(shí)在巨大,還有臨時(shí)表嵌套的情況啊!
(后來(lái)沒(méi)法子,又回到了多重子查詢的老路上來(lái),明知有問(wèn)題啊!)
測(cè)試環(huán)境(以下都是測(cè)試機(jī)上的運(yùn)行結(jié)果)/真實(shí)環(huán)境(年底上線,且還需要從SQL SERVER中遷移):
服務(wù)器: P4 2.8 內(nèi)存2G/ IBM H85 POWERPC 4顆/內(nèi)存 12G
軟件:win2k+oracle8.1.7.0/ aix 4.3.3+ oracle8.1.7.4
表現(xiàn):
oracle關(guān)閉重起后,程序第一次執(zhí)行存儲(chǔ)過(guò)程(需要大量讀取物理文件):1500秒,等第2次跑時(shí)150秒(數(shù)據(jù)進(jìn)入sga區(qū)了)
雖然第2次執(zhí)行存儲(chǔ)過(guò)程比較快的,可是每換一個(gè)部門,意即:查詢條件改變,就需要重新的1500秒!這個(gè)很顯然不能滿足客戶的要求,而且管理部門眾多,測(cè)試的是一個(gè)部門的一個(gè)查詢,實(shí)際的情況是N多的府縣道臺(tái),他們各有各的查詢,到時(shí)候豈不是歇菜了啊!
附件內(nèi)容:
1、存儲(chǔ)過(guò)程(Ora_PersonProc.sql/Ora_PersddonProc.sql)和最終的SELECT語(yǔ)句(XXXXXX.sql);
2、數(shù)據(jù)庫(kù)物理文件情況(data.jpg):
TEMP/RBS表空間都有擴(kuò)展,懷疑有大量的磁盤排序/回滾段請(qǐng)求導(dǎo)致擴(kuò)展(因?yàn)槭聞?wù)請(qǐng)求的數(shù)據(jù)實(shí)在太多了)
3、statspack報(bào)告(statspack3_4.txt):
是第2次運(yùn)行同樣的存儲(chǔ)過(guò)程時(shí)的前后SNAP,這個(gè)就比較快的(3分鐘左右),初步分析了一下:問(wèn)題語(yǔ)句不言自明,就是這個(gè)
Buffer Gets? ? Executions??Gets per Exec??% Total??Hash Value
--------------- ------------ -------------- ------- ------------
29,912,794? ?? ?? ?? ?1? ?29,912,794.0? ?100.0? ?4192360910
select et.* from (??Select enta.*,sd.FName as FPersonTypeName f
rom (??Select ed.*,svs.FSpecialityName,svs.FSpecialityTypeName,
svt.FName As FTechName ,svt.FLevel as FTechLevel,??sve.FName as
FEduName,sve.FLevel As FEduLevel from (??select ente.*, ent.FAd
dress,ent.FName??as FEnterpriseName from (??select ed3.* from??(
還有:
Execute to Parse %:??-46.32
是什么意思呢?
各位老大,還給看看有什么別的問(wèn)題么?
4、分析表時(shí)報(bào)錯(cuò)信息(analyze_error.txt):ora-00600
謝謝大家!
總結(jié)
以上是生活随笔為你收集整理的oracle结果集过大,多重子查询/大结果集查询问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux的php优化,linux优化转
- 下一篇: oracle导入脚本乱码,imp导入乱码