1. 程式人生 > >Oracle資料遷移後歸檔檔案暴增怎麼辦?

Oracle資料遷移後歸檔檔案暴增怎麼辦?

資料遷移是DBA的日常工作,對於相應的方法、命令等,相信很多人早已瞭如指掌。圓滿的資料遷移流程不單單指將資料從資料庫A備份恢復到資料庫B,而且要保證遷移前後資料的完整性、服務的可用性。

 

近日,在給客戶做了單機到叢集的資料遷移後,發現叢集的線上重做日誌切換頻繁,進而產生了大量的歸檔日誌,對伺服器造成了不小的壓力。本文是對上述問題的分析處理過程。

 

發現問題

1. 日誌歸檔頻繁

在遷移完成後,需要對叢集進行一段時間的深度觀察。通過v$archived_log檢視,分析資料庫歷史的歸檔情況,可以發現整個庫的業務活動情況。

觀察上圖,不難發現遷移(6月15日)前後是一個明顯得變化點,每天日誌歸檔頻率由原來的100多次變成400多次。這種情況要麼是遷入的系統業務量確實很大,要麼是遷入的資料庫使用者配置有問題。

2. 業務情況確認

經過與新遷入系統的運維人員溝通確認,該系統的使用人數雖然多,但都是以查詢類的動作偏多,不應該帶來這麼大量的日誌。因為叢集中還有其它系統,不能直接判斷是新系統的問題。假設運維所說情況屬實,那麼問題的關鍵點就是要找到產生大量日誌的操作語句,進而找到對應的應用,再確認歸檔情況是否正常。

 

問題分析

1. 追根溯源

日誌歸檔頻繁,說明線上重做日誌切換頻繁,一般是由於產生了大量的redo。這裡通過awr檢查redo的生成情況。

 

一天內日誌歸檔的詳細情況

 

這裡選擇6月18日上午10點到11點間叢集2節點的awr報告

 

節點1:

 

觀察上圖,可以看到在1小時內,節點1的redo的產生速率約為3.38MB/S,那麼一小時就有約11.88GB。

 

節點2:

觀察上圖,可以看到在1小時內,節點2的redo的產生速率約為0.26MB/S,那麼一小時就有約0.9GB。

 

通過查詢v$archived_log檢視,分類計算出10點到11點間所產生的歸檔日誌大小約為12.3GB,這與根據awr報告推算出來的值12.78GB非常接近,可以說明以上兩份awr報告的可參考性很高。

 

2. 順藤摸瓜

現在已經確認是歸檔頻繁是由大量的redo引起的,那麼就需要看在問題時間區間內,導致資料塊變化的原因(sql),這個可以從awr報告的“Segments by DB Blocks Changes”部分可以找到答案:

 

節點1:

節點2:

 

由上邊2個截圖可以發現,使用者YK***FT名下的有3個表(US***42、US***39、US***06)的資料塊被頻繁的操作,而這個使用者正是新遷入系統的資料庫使用者。

 

為了更進一步瞭解對該3個表做了哪些操作,可以在awr報告中分別搜尋表名稱,找出相關的sql語句。

 

 

由上圖可以看出,在1小時之內,對該3個表分別執行了60次update操作,具體的sql語句如下:

 

 

這裡注意到一個數字60,看樣子像是一個定時任務,首先想到的是job。經過查詢,發現yk***ft使用者下確實存在一個job,而且正好是每分鐘執行一次!

 

 

進一步檢視job執行的儲存過程發現正是上邊的3條語句:

 

 

通過分析US***42、US***39、US***06這個3個表和update中的where語句,發現那3條update語句很有問題,符合where的資料量大,且只增不減,必須要調整。

 

 

 

解決問題

1. 業務情況再確認

根據前邊找到的線索,跟運維人員確認job(24)的業務作用,得到的反饋是之前有個需求是定期把符合要求的欄位A的值寫到欄位B,現在該需求已不再需要,可以刪除。

2. 調整並觀察

禁用job

雖然業務確認可以刪除,但為了保險起見,這裡將job(24)禁用,通過呼叫dbms_job.broken完成。

 

 

觀察redo

這裡選擇調整之後的6月20日上午10點到11點間叢集2節點的awr報告

 

節點1:

 

節點2:

 

由上述節點1和節點2相同時間內的awr報告的來看,redo產生速率有了很大的降低。通過觀察歸檔日誌的生成情況,發現歸檔頻率也降低了。

 

總結提高

經過回顧整個問題的發現、分析和解決過程,可以發現其實並沒有什麼技術難點,問題的原因主要還是出在業務溝通上。在遷移之前,最好能夠跟應用管理員確認清楚業務的特點,包括現有業務的壓力情況、已發現的效能瓶頸、不再需要的各類資料庫物件(索引、檢視、儲存過程、函式、觸發器等),提前做好應對措施,保證資料遷移的圓滿完成。

作者:張世城

 

其他優質話題

Docker操作實踐(3):Docker的操作詳解

Docker操作實踐(2):Docker的安裝及架構介紹

Docker操作實踐(1):什麼是容器的本質?

使用sqlplus進行Oracle資料庫批量自動釋出

業務複雜、資料龐大、應用廣怎辦?瞭解下分散式事務