RMAN備份慢故障處理一例

     今天接到上海TAC電話,報告說最近一週的RMAN備份速度很慢, 數據量很小,但做一次增量備份大概需要3天。

數據庫版本:Oracle9204 RAC

操作系統版本:Solaris 9

RMAN備份語句爲:
RMAN> run{
allocate channel c1 type disk;
backup incremental level 1 database plus archivelog delete input;
release channel c1;
}

登陸CATALOG數據庫所在的服務器,查看備份日誌:

allocated channel: c1
channel c1: sid=48 devtype=DISK

allocated channel: c2
channel c2: sid=46 devtype=DISK

Starting backup at 2007-09-18:04:21:08

發現一直停在這一步,不往下進行.....


登陸目標數據庫,查看會話有哪些等待事件:

SQL> select event,sid,p1,p2,p3 from v$session_wait where event not like 'SQL*%' AND event not like 'rdbms%';

EVENT                                                                   SID         P1         P2         P3
---------------------------------------------------------------- ---------- ---------- ---------- ----------
pmon timer                                                               1        300          0          0
ges remote message                                                       4         32          0          0
gcs remote message                                                       5         64          0          0
gcs remote message                                                       7         64          0          0
log switch/archive                                                      22          2          0          0
wakeup time manager                                                     15          0          0          0
smon timer                                                              12        300          0          0

7 rows selected.


發現SID爲22的會話等待最嚴重,等待事件爲log switch/archive,這個等待事件出現時通常是因爲日誌組循環寫滿以後,第一個日誌歸檔尚未完成,出現該等待可能是IO存在問題。
解決辦法:
移動歸檔文件到快速的磁盤;
調整log_archive_max_processes.


查會話22對應的SQL語句:
SQL> select sql_text from v$sqltext a where a.hash_value=(select sql_hash_value from v$session b
2 where b.sid='22') order by piece asc;

SQL_TEXT
----------------------------------------------------------------
alter system archive log current

分別在兩節點上手工執行這個命令,果然很慢,等了幾個小時都沒結果返回。

去掉RMAN備份語句中的plus archivelog delete input命令,做一次測試。
RMAN> run{
allocate channel c1 type disk;
backup incremental level 1 database;
release channel c1;
}

2分鐘執行完畢,說明正是由於歸檔當前日誌慢導致的,應該是歸檔日誌所在的磁盤I/O存在問題。

登陸數據庫,查看歸檔路徑:
SQL> show parameter archive_dest

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string LOCATION=/export/home/oracle/dev/MSP/log_archive_dest_1
log_archive_dest_10 string
log_archive_dest_2 string LOCATION=/export/home/oracle/dev/MSP/log_archive_dest_2
log_archive_dest_3 string
log_archive_dest_4 string
log_archive_dest_5 string
log_archive_dest_6 string
log_archive_dest_7 string
log_archive_dest_8 string
log_archive_dest_9 string
log_archive_dest_state_1 string enable
log_archive_dest_state_10 string enable
log_archive_dest_state_2 string enable
log_archive_dest_state_3 string enable
log_archive_dest_state_4 string enable
log_archive_dest_state_5 string enable
log_archive_dest_state_6 string enable
log_archive_dest_state_7 string enable
log_archive_dest_state_8 string enable
log_archive_dest_state_9 string enable
standby_archive_dest string ?/dbs/arch

SQL> show parameter log_archive_max_processes
log_archive_max_processes integer 1

測試兩個歸檔路徑卷的速率,結果顯示1秒鐘大約寫1M左右,這個速度夠慢,正常應該寫10M左右。

修改初始化參數,將歸檔日誌路徑修改到本地磁盤/var/backup下,並增加log_archive_max_processes=2,重啓數據庫後,手工執行alter system archive log current,很快返回結果; 進行RMAN測試,備份很快。

結論:正是由於歸檔日誌對應的磁盤I/O讀寫存在問題導致RMAN備份異常的慢。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章