查詢瘋狂增長的arch-續

fanhongjie發表於2008-03-04

查詢瘋狂增長的arch-續· 作者 小荷||【轉載時請務必以超連結形式標明文章原始出處和作者資訊】
· 永久連結:
http://www.oracleblog.cn/working-case/how-to-find-out-arch-increase-crazily-plus/


--------------------------------------------------------------------------------

[@more@]

今天還想到一個問題,如果導致arch瘋漲的程式如果是job引起的?會怎麼樣子?

透過測試,用昨天的方法也確實能找出相關引起arch瘋漲的sid,但是問題就出在kill session這邊了。如果是透過job來跑的程式,找到相應的sid kill之,session 的status會變成killed,但是過不了一會(一分鐘不到),這個sid又會變成active的狀態,且還是執行原來job中的sql,使得arch繼續暴漲。和被kill之前唯一不同的,serial#變了。無論kill多少次,job會一直重新啟用,一直執行下去。

因此,一旦發生kill掉session之後,還是有瘋狂增長的arch,發現是同一個sid,且剛剛kill的時候status是KILLED,之後馬上有變成ACTIVE,且根據sid去查sql_text發現是同一個語句,這個時候就要引起注意了!!這個session是不是透過job在跑?

此時可以根據select /*+ rule */ sid from dba_jobs_running;查詢是不是有job在跑?job中的procedure中的內容是否是sql_text裡面的內容?如果符合,則broken這個job。

因此:dba如果發現大量的arch,必須馬上定位這個session,如果發現kill掉了session arch還在異常增長,且還是同一個sid,請考慮是否是job。當然,如果要避免在載入的時候產生少量的arch,就應該:(1)noarch模式下:用append的hints即可;(2)在arch的模式下:用nologging + append。(3)dataguard資料庫避免使用nologging引數!

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

相關文章