關於ORACLE大型事務回滾的幾個點

yingyifeng306發表於2023-10-07

在大型資料庫中,一個大型操作的失敗代價是比較高的,嚴重時甚至會引起資料庫掛起。尤其在KILL大型事務之前檢查事務究竟有多大可能是必要的,同時我們也需要知道回滾已經進行了多少程度。
V$transaction,v$session關聯得到事務大小。
Select t.used_ublk from v$transaction t
v$session s
Where t.ses_addr=s.saddr and s.sid=&sid
在事務失敗或者kill session之後,持續的監控該語句結果來估計回滾進度。如果觀察到used_ublk幾乎不動或者回滾非常慢,可以確定以下是否由於並行恢復引起(並行恢復有時會引起資料庫恢復掛起)。在並行恢復情況下,Smon將會抓住TX lock,同時應該存在某些PS lock
PX程式佔用大量的CPU資源。V$fast_start_servers和v$fast_start_transaction兩張檢視表示是否執行了並行恢復。如果發現並行恢復很慢,可以嘗試把並行恢復關掉看看是否可以加快rollback。alter system set fast_start_parallel_rollback = false
該語句關掉並行rollback
改用序列化。
同樣如果是序列化ROLLBACK,同時CPU資源尚可的話,可以採用並行恢復的方式來加快回滾。如果整體系統已經基本顯示掛住,可以shutdown資料庫起用並行rollback。並行恢復可以在v$session_wait中看到很多PX程式等待,Smon程式作為協調程式同時在等待PX程式完成。
資料庫關閉或者kill shadow process之後,在v$transaction中將不能發現事務資訊。這時候在v$fast_start_transaction中有事務資訊。

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

相關文章