oracle 大事務的並行恢複導致資料庫效能下降--cpu使用率較高處理思路

來源:互聯網
上載者:User

  oracle 大事務的並行恢複導致資料庫效能下降--cpu使用率較高處理思路 

  大型事務的復原 大型事務的復原產生非常大的代價,不僅鎖定需要的資源

,並且消耗的CPU和IO,尤其是IO將極為密集。這個時候,希望降低復原所產生

的影響。停止是不可能的,為了保持資料庫的一致性,復原必須完成,所以只

能降低影響。參數fast_start_parallel_rollback可以實現這個調劑,預設值

為low,表示啟動2倍CPU數量的並行進程進行復原。另外還有high和false兩個

值,high表示以4倍CPU數量的並行進程進行復原。該參數可以動態設定,但是

動態設定可能無法中斷並行恢複,重新設定啟動為最好的方法,設定

fast_start_parallel_rollback=false之後重新啟動資料庫即可。
 在資料庫重新啟動之後,v$TRANSACTION視圖中將不存在事務資訊,
 但是V$fast_start_transactions視圖可以尋找復原完成了多少。


 在大型資料庫中,一個大型操作的失敗代價是比較高的,嚴重時甚至會引起數

據庫掛起。尤其在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。並行恢複可以在$session_wait

中看到很多PX進程等待,Smon進程作為協調進程同時在等待PX進程完成。 資料

庫關閉或者kill shadow process之後,在v$transaction中將不能發現事務信

息。這時候在v$fast_start_transaction中有事務資訊。如果是8i以前版本,

只能持續監控uet$和fet$表格來查看是否進行rollback,同時Smon應該經常抓

住ST lock。

碰到資料庫效能下降,首先要做的事情:
1.首先尋找os方面的資訊:
top  ---查看那個進程佔據系統資源最多---這裡一般也可以看出是那個進程占

用資源最多。
mem---的使用方式,是否存在大量換頁。
系統---i/o是否正常。

2.AWR ---》top 5 user event


這裡針對大事務的並行恢複案例做一個簡單的分析

1.在awr報告中看到wait for a undo record

----查看曆史資訊
2.select event,count(*)  from dba_hist_active_sess_history
  where sample_time < to_timestamp

('20130923093000','yyyymmddhh24mis')
and sample_time > to_timestamp('20130923093000','yyyymmddhh24mis')
and  instance_number=1
group by event
order by 2;

---查看那些進程出現了 wait for a undo record
SQL> select sample_time time, session_id sid,

event,p1,p2,program,sql_id
  2  from dba_hist_active_sess_history
  3  where event = 'wait for a undo record'  
  4  order by sample_time;

問題解決:
找到smon 進程:
SQL> select pid,program from v$process where program like '%SMON%';

       PID PROGRAM
---------- ------------------------------------------------
         8 oracle@localhost.localdomain (SMON)

關閉smon的事務恢複功能:
oradebug setorapid 8

oradebug event 10513 trace name context forever ,level 2;

關閉並行交易回復:
alter system set fast_start_parallel_rollback=false;

重新開啟smon事務恢複功能:
oradebug setorapid 8

oradebug event 10513 trace name context off;

確定事務恢複情況:
select * from V$fast_start_transactions;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.