一個併發事件的阻塞問題

aluocp發表於2007-06-21
兄弟我現在有:
環境:Oracle8.1.7.4 OPS
一個range分割槽表:
create table T
(col_a date,
col_b number,
col_c number,
col_d varchar2(20),
....
)

分割槽鍵為col_a,現在按年份分了五個區。
兩個非字首local索引:
idx_a(col_b)
idx_b(col_b,col_c)

資料量大約1000w,資料在分割槽上分佈不均勻,大部分在兩個分割槽上。

現在有一個查詢:
select .... from T where col_b=:b and col_c=:c
預期fetch記錄數10以內。
同一SQL,併發900多個session,出現問題。
900多個session只有幾個active,其它都inactive。
等待buffer cache。
系統資源閒置(CPU佔用和記憶體佔用低)

trace跟蹤一下,發現sql執行計劃:
index idx_b:fast full scan
一次sql讀取了50000多個block,出現大量的GC cache的等待和db file一直讀取的等待。

sql加上hint:/*+index(T idx_b)*/,執行計劃改變:
index idx_b:range scan
瞬間響應。

檢視idx_b的degree,為1。

應用程式的SQL語句為不能修改,使用outline無效,鬱悶!

請大家給分析分析

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7319461/viewspace-765268/,如需轉載,請註明出處,否則將追究法律責任。

相關文章