Oracle 19c 遷移前,做好 RAT 回放測試有多重要?

雲棲號資訊:【點擊查看更多行業資訊
在這裏您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

背景

某客戶的核心繫統數據庫一直是 IBM AIX 小型機和 Oracle 11g R2,這個數據庫已修修補補用了近十年。最近計劃遷移到 x86 環境下的 Oracle 19G,在之前的遷移測試以及應用測試中,做的都是一些簡單的測試,沒有試過模擬現網的壓力。這可能會導致應用連接到新庫之後,在出現各種未知問題時無法及時處理。

於是考慮使用 RAT 中的 Database Replay,模擬現網的運行,來發現數據遷移、兼容性、性能等各種問題。

RAT 介紹

Oracle Real Application Testing(簡稱 RAT)是 11gR2 的一個重要的 feature,其推出的初衷是爲了滿足數據中心變更後,有很好的方法和工具去衡量這些變更對於生產環境的應用帶來的影響,更好地評估諸如硬件升級、軟件升級、架構變化等等對於客戶應用程序的影響。
Real Application Testing 其實有兩個解決方法,分別是 Database Replay 和 SPA(SQL Performance Analyzer)。以前有用過 SPA 就不做介紹了,本次主要介紹 RAT 的使用以及我在使用過程中遇到的問題。

Database Replay,數據庫回放顧名思義可以理解爲一個錄像機,通過在源系統上把實時應用產生的負載錄製下來,並拿到變更後的環境進行播放,從而進行一個對比。數據庫回放分爲四個階段完成:錄製、預處理、回放、結果分析和報告。

測試環境

源庫主機:IBM 880
源庫操作系統:AIX
源庫版本:11.2.0.4.16
是否 RAC:是
目標庫主機:國產 x86 服務器
操作系統:Redhat 7
目標庫版本:19.7
是否 RAC:是

RAT 測試過程

1、錄製
1)目錄準備
首先創建一個操作系統目錄,用於存放錄製的文件,由於是 RAC 環境,因此要求是一個雙機共享的目標,例如我們這裏用的是 NFS 目錄掛接到兩個節點上:

mkdir -p /datadump/rat_test

在數據庫內創建一個 DIRECTORY:

$ sqlplus / as sysdba
SQL> create directory DBRAT_0218 as '/home/oracle/rat_test';
SQL > grant read,write on directory DBRAT_0218 to public;

2)設置捕捉的條件
有時候我們需要限定只捕捉部分的工作負載,可以通過這個設置來達成,本次測試我們主要捕捉其中一個地市用戶的負載:

exec dbms_workload_capture.ADD_FILTER(fname =>'FILTER_SYS',fattribute => 'USER',fvalue => 'NGCRM_ST');

3)開啓捕捉

BEGIN
DBMS_WORKLOAD_CAPTURE.start_capture (name => 'DBREPLAY_0218',
                                      dir => 'DBRAT_0218',
                                 duration => 7200);
END;
/
  • name 是本次捕捉任務的名稱;
  • dir 是上面創建的 directory;
  • duration 是捕捉時間,上面設置了 7200,也就是捕捉 2 小時,該參數可以設置爲 NULL,就是無時間限制地錄製,直到發起停止命令。
DBMS_WORKLOAD_CAPTURE.finish_capture;

遇到過的問題:在第一次接觸並使用 DBReplay 的時候,在某個庫發起了捕捉命令,使用的是一個共享目錄,有時候無論怎樣發起,過了 1-2 分鐘就結束(並沒有設置捕捉時間)。當時以爲是業務量太小自動結束了進程,也沒太注意。後來在業務繁忙時段有時候同樣無法採集,找了各種資料均沒有相關信息。後來換了一個目錄就沒有再出現過這樣的問題。

4)監控捕捉狀態
可用以下命令查看是否錄製完成:

select id,name,status,start_time,end_time,connects,user_calls,dir_path from dba_workload_captures;

2、目標端裝載數據
爲了更準確模擬系統的壓力和反饋,我們需要將現有數據庫相關的數據裝載到目標數據庫當中。由於是測試環境,我們這裏就採集最簡便的 Datapump 的方式將源數據庫的幾個相關 schema 倒出,並裝載到目標數據庫。篇幅關係,這個步驟的操作過程就略過不談。

3、負載預處理
1)負載預處理
在回放負載之前,需要對負載進行預處理。
創建一個目錄的對象存放源數據錄製後的文件,由於目標環境也是 RAC,所以也需要使用共享目錄:

SQL> create directory DBRAT_0218 as '/ACFS01/rat_0218';
SQL > grant read,write on directory DBRAT_0218 to public;
SQL> exec dbms_workload_replay.process_capture('DBRAT_0218');

遇到過的問題:在最開始的測試中,我們一直卡在這一步,語句一直不完成,一開始以爲這個預處理需要很多的時間,於是一直等,幾個小時甚至一天都不能完成,從來沒有成功過,而且後臺日誌有如下錯誤:

DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE:WARNING:Preprocessing encountered a CORRUPT file wrc_5ph12b0010fu.rec in /ACFS01/dbreplay/inst1/aa.
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE:WARNING:Preprocessing encountered a CORRUPT file wrc_5ph12b0010hr.rec in /ACFS01/dbreplay/inst1/aa.
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE:WARNING:Preprocessing encountered a CORRUPT file wrc_5ph12b0032sd.rec in /ACFS01/dbreplay/inst1/aa.
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE:WARNING:Preprocessing encountered a CORRUPT file wrc_5ph12b00154sb.rec in /ACFS01/dbreplay/inst1/aa.
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE:WARNING:Preprocessing encountered a CORRUPT file wrc_5ph12b0010fu.rec in /ACFS01/dbreplay/inst1/aa.
DBMS_WORKLOAD_REPLAY.PROCESS_CAPTURE:WARNING:Preprocessing encountered a CORRUPT file wrc_5ph12b0010fu.rec in /ACFS01/dbreplay/inst1/aa.

後來提交 MOS,官方建議在源庫以及目標庫都打上相應的補丁來修復 bug。
目標庫:one-off-patch,補丁:21117072,打完這個補丁之後,預處理的命令不再是一直等待卡着不動,如果文件有錯誤則直接退出。
源庫:one-off-patch,補丁:17373277,修復了上圖中出現文件錯誤的 bug。

2)初始化回放

exec dbms_workload_replay.initialize_replay('DBREPLAY_0218','DBRAT_0218');

PS:第一個參數是捕捉任務的名稱,第二個參數是文件存放的 DIRECTORY。
3)連接配置映射
由於播放環境和捕捉環境數據庫配置不同,需要進行一個映射的過程。
未映射:

select conn_id,capture_conn from dba_workload_connection_map order by 1;

7b81d3fc3b9a80d6ff116cb61d26db1d

exec DBMS_WORKLOAD_REPLAY.REMAP_CONNECTION (connection_id =>  1 , replay_connection => '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx.xxx.xxx.xxx)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME= xxxx )))');

PS:connection_id 就是上面語句查詢出來的 conn_id,有多少就需要改多少,replay_connection 這裏只需要修改 IP、端口和 SERVICE_NAME 即可。
映射後:

44194b4261ae8f9e1b0b635e1d6b3d82

4)準備回放

exec dbms_workload_replay.prepare_replay(synchronization=>FALSE);

7856984af1b16a279e9c9189cbea75dc

我們這裏使用了默認的參數,如果需要加大或減少回放的壓力,可以適當配置 connect_time_scale 和 think_time_scale 這兩個參數,這兩個參數默認的值是 100(百分比),也就是 1:1 重放,如果把 connect_time_scale 設置成 50%,也就是兩個連接的間隔時間縮短到原來的 50%(10 分鐘的話就縮短到 5 分鐘),從而加大數據庫的壓力。

例如:

exec dbms_workload_replay.prepare_replay(synchronization=>FALSE, connect_time_scale=>50, think_time_scale=>50);

4、重放
1)準備客戶端
根據工作負載的強度大小,準備相應的客戶端,可以使用 wrc 的評估模式來衡量大約需要多少客戶端。

wrc mode=calibrate replaydir=/ACFS01/rat_0218

ae3efb8e741449f0926cacf525baa9ef

可以看到上面有一句是 Consider using at least 30 clients divided among 8 CPU(s),那麼我們就需要準備至少 30 個客戶端,否則會出現資源溢出而異常結束。

這個時候客戶端屬於就緒狀態,等待播放開始(至少啓動 1 個客戶端,否則無法啓動重放)。
由於這裏需要 30 個,所以可以寫一個腳本就在一臺機 for 循環跑 30 個後臺進程。
參考腳本如下:

for ((i=1;i<=30;i++)) 
do
nohup wrc system/oracle@NGCRM_ST mode=replay replaydir=/ACFS01/rat_0218 > /ACFS01/wrc_log/wrc_$i.log &
done

2)開始回放

exec dbms_workload_replay.start_replay;

當然,我們可以通過以下調用以下過程,控制回放作業:

DBMS_WORKLOAD_REPLAY.PAUSE_REPLAY (); ##暫停作業
DBMS_WORKLOAD_REPLAY.RESUME_REPLAY (); ##繼續作業
DBMS_WORKLOAD_REPLAY.CANCEL_REPLAY (); ##取消作業

3)監控回放
在重演中,任何錯誤,或者出現在生產環境和測試環境之間的數據不符,都會被記錄爲分歧調用。獲取這些分歧調用的信息,包括:SQL ID、SQL 文本、綁定變量取值,都可以通過視圖 DBA_WORKLOAD_REPLAY_DIVERGENCE,以及 GET_DIVERGENT_STATEMENT 獲取。例如:

SQL> SELECT REPLAY_ID,STREAM_ID,CALL_COUNTER FROM DBA_WORKLOAD_REPLAY_DIVERGENCE;

4)查看回放報告:

select dbms_workload_replay.report(139,'HTML') from dual;

也可以導出測試過程中的 AWR 報告與源系統相同時間段的 AWR 報告比較。
其他與回放相關的信息,可以參考以下的系統視圖:
DBA_WORKLOAD_CAPTURES 列出所有捕獲到的負載;
DBA_WORKLOAD_FILTERS 列出所有捕獲的負載定義的過濾器;
DBA_WORKLOAD_REPLAYS 列出所有已經重演過的負載;
DBA_WORKLOAD_REPLAY_DIVERGENCE 列出所有分歧調用;
DBA_WORKLOAD_REPLAY_FILTER_SET 列出所有重演的負載定義的過濾器;
DBA_WORKLOAD_CONNECTION_MAP 列出所有重演使用的連接串的映射信息;
V$WORKLOAD_REPLAY_THREAD 列出當前所有重演客戶端的會話信息。

小結

本客戶的 Oracle 11g 至 19c 遷移工程實施,實際歷時數個月,其中經歷了多次不同環境的測試、遷移以及割接過程。本次測試是這個重大工程之中比較早期的一環,經過這次測試,暴露了我們在數據庫參數、結構遷移、SQL 代碼等多個方面的問題。幸而,通過測試可以及早發現並予以早期的干預和修復,未將問題留到系統割接以後。

作者介紹:

梁銘圖,新炬網絡首席架構師,十多年數據庫運維、數據庫設計、數據治理以及系統規劃建設經驗,擁有 Oracle OCM、Togaf 企業架構師(鑑定級)、IBM CATE 等認證,曾獲 dbaplus 年度 MVP 以及華爲雲 MVP 等榮譽,並參與數據資產管理國家標準的編寫工作。在數據庫運維管理和架構設計、運維體系規劃、數據資產管理方面有深入研究。

【雲棲號在線課堂】每天都有產品技術專家分享!
課程地址:https://yqh.aliyun.com/zhibo

立即加入社羣,與專家面對面,及時瞭解課程最新動態!
【雲棲號在線課堂 社羣】https://c.tb.cn/F3.Z8gvnK

原文發佈時間:2020-07-28
本文作者:dbaplus社羣
本文來自:“InfoQ”,瞭解相關信息可以關注“InfoQ

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