從一款工具談異構遷移評估那些事
原創近期關注到云和恩墨發布的一款工具-SCA,它可以協助用戶評估異構數據庫遷移。近些年個人參與了不少異構數據庫遷移,自己也曾有想法做個工具用來評估異構遷移的兼容性及性能等問題。這一工具也給出一種實現,可以對很多面臨數據庫遷移的用戶帶來現實參考意義。本文就嘗試從此工具的功能著手,談談異構數據庫遷移的那些事。
1. SCA 產品功能說明
(1)功能概述
讓我們先來看看發布的此款工具的功能,下面信息取自部分 SCA 工具官網描述。SCA 全稱 SQL Compatible Analysis,是一款異構數據庫遷移前的 SQL 兼容和性能評估工具。可用于異構數據遷移前的兼容性評估,評估源數據庫中的實際業務 SQL 在目標庫中是否存在語法問題,以及評估兩款異構數據庫中的 SQL 實際執行的性能差異。目前此工具支持五種源端數據庫,包括:Oracle、MySQL、DB2、PostgreSQL、Informix、SQL Server。此工具執行分為四個步驟,也包含很多執行選項。簡單整理如下:
(2)輸出解讀
這里我們重點看看其輸出報告,報告采用網頁或EXCEL文件的格式,內部包含了豐富的信息。下面逐一說明下:?數據庫畫像這部分通過掃描源庫,收集到源數據庫基本信息、性能、對象、SQL等各類信息。在基本信息部分,又包括有主機資源層面信息(CPU、MEM、NET)、數據庫信息(版本、角色、架構、歸檔狀態、字符集)。
在性能部分,則包括有多維度數據庫性能指標,如 Oracle 數據庫就包括有 DB time、CPU time、連接數、TPS、QPS、Redo Size、邏輯讀,物理讀等。
在對象部分,則包括各對象類型統計、非標/保留對象列表、大對象統計以及各對象明細的統計信息。
對象兼容度匯總
這部分通過對比源庫與目標庫的兼容能力,分析出對象層面的兼容情況,并分類展示。在展示中按照用戶名、對象類型、狀態進行匯總,展示相關分類的對象總數以及兼容情況。針對不兼容的對象,就需要考慮在真正遷移中進行修改。
SQL 兼容度匯總
這部分通過對比源庫與目標庫的SQL兼容情況,評估給出SQL兼容(直接兼容、改寫兼容)及不兼容的情況。展示中按照用戶名、程序名、模塊名匯總,展示系統中采集到的所有 SQL,以及這些 SQL 在目標庫支持情況。這些信息對于后續評估改造的工作量評估,有非常直觀的指導意義。
SQL 改寫規則
這部分內容根據掃描后的結果,結合系統內置的改寫規則,給出該條規則的觸發情況,包括該規則在 SQL 中的命中數量及為規則匹配的 SQL 數量。
SQL 復雜度分布
這部分則是通過復雜度評估標準,判斷出復雜 SQL 的分布情況。這些復雜的 SQL 也是在遷移過后需要重點關注性能問題,這樣可以有效避免性能問題可能導致的業務故障。目前復雜度的評判標準包括有表關聯的數量、Connect By語法使用、自定義函數數量、函數執行耗時。針對每條SQL的復雜度都會按照上述標準進行匯總評估,給出SQL復雜度。
SQL 性能對比
這部分是在結構、數據遷移完畢后,真實執行SQL,采集源端和目標端的執行性能進行比較。按照執行性能的總體情況及分列情況的展示。其中總體部分,可以簡單評估下遷移完成后在目標庫的整體運行狀態,包括性能有提升的SQL比例、性能下降的SQL比例、不支持的SQL比例等。
在分列的部分則可以按照工作負載、SQL、超時維度展示具體的TOP SQL的情況,包括此SQL的性能變化情況及對整體負載的影響情況。這一能力很贊,可以篩選出影響大的SQL,優先優化解決。
此外針對每條SQL可以詳細展開,包括SQL文本、綁定變量、執行計劃、執行詳情、關聯對象、統計信息等。
2. 異構遷移評估的若干難點
SCA,這一工具給我們異構數據庫遷移的一個很好的工程化實踐范例。那這一工具的實現功能上,也反映出遷移評估的若干難點問題。這些問題也正是困擾著用戶如何快速替換一款數據庫。這些難點問題,簡單整理如下:
(1)全面詳實地收集源庫各類信息
在我們談異構遷移之前,首要問題就是如何全面詳實地收集源端庫的各類信息。SCA 工具幫我們收集了如硬件、操作系統、數據庫基本信息、對象、SQL類的信息,但從遷移角度來說這些信息還是不夠的。之前筆者也曾經寫過一個模板,方便用收集源庫的信息,具體參見“調研模板”,這也是結合之前工作經歷整理所得。但在實際使用中,收集效果往往大打折扣,原因一方面是因為很多信息用戶也不清楚,另一方面也是覺得填寫繁瑣、不愿意花精力填寫。但按照以往的經驗,這個過程是值得的。本人就曾經遇到多次因為收集信息不完整導致遷移方案失敗,甚至到上線之前才知悉,再選擇其他方案代價很大。那么簡化這一過程的最好方式就是工具化、自動化,類似 SCA 這樣的工具能夠幫助用戶極大簡化這一過程。
(2)對目標數據庫能力有充分理解
異構數據庫遷移,一方面要盡量詳實地了解源數據庫的情況,另一方面也要對目標數據庫的能力有個全面理解。特別是目標庫如果采用的新架構、新技術等,與源數據庫通常不能簡單一一比對。例如之前源數據庫采用集中式架構、目標數據庫采用分布式架構,那么原有很多源庫的能力就不能簡單照搬過來,需要新的做法、甚至是在應用、架構層面做更多的考慮。
(3)正確理解“兼容”的概念
很多用戶理解兼容,是一個很美好的狀態。在應用不需要任何修改的情況下,就可以全面照搬過來。其實兼容是個很復雜的事,本人之前也寫過一篇關于兼容性的文章,參考“Oracle兼容性面面觀”。僅就 SQL 的兼容性問題,就需要一方面考慮語法、語義的兼容情況,一方面考慮不同的兼容方式(完全兼容、等價兼容),還要考慮如性能表現、異常處理等情況。SCA 工具這方面做的不錯,給出了不同兼容的統計及性能數據的對比。
(4)復雜對象和語句的遷移問題
很難有兩個數據庫是可以完美兼容適配的,針對源庫那些復雜對象和語句,如不能在目標庫上有對等實現也要給出必要的解決路徑。從對象來看,如庫內計算(包、存儲過程、觸發器、函數)、視圖(含物化視圖)、序列(自增類型)、特殊字段(大對象、JSON)等,是需要考慮目標庫的實現機理和能力及是否有其他替代方案。例如很多存儲過程,就可以轉化為外置過程來解決。從SQL語句來看,復雜SQL的處理是容易出現問題的,SCA 工具也意識到這點給出了專項的統計。即使在目標庫可以實現,也建議盡量簡化語句邏輯,避免潛在的執行風險。
(5)從“仿真”角度評估遷移結果
如何真實地還原源庫的工作負載,在目標庫上進行仿真重演,進而評估遷移后的結果,這是最為準確的評估。這里不僅是單一對象、語句的遷移評估,而是真實的、帶有業務負載的、有數據質量差異(甚至是錯誤數據)下的測試結果,這樣才能真實反映出評估后的結果。很多時候,單一對象或語句都是可以很“完美”的跑出結果,但是放在真實環境下就會出現各種問題。其結果的反饋,可以通過與源庫的結果對比來進行評估。有的時候往往是一些很細節的地方非常容易出現問題,例如空值的處理、精度問題、時區問題等。
寫在最后
隨著國產化替換浪潮涌現,正有越來越多的企業在計劃或正在進行數據庫替換工作。異構數據庫遷移評估,成為用戶實現替換的必備條件之一,也是困擾很多用戶的一點。SCA 工具做了一個很好的嘗試,大大方便了用戶的遷移評估工作,有效地降低了遷移成本。國內有很多廠商也有類似的實現,通過獨立的小工具完成此類評估。從產品角度來講,也是一個不錯的“引流”產品,并吸引用戶最終選擇自家數據庫。在這里也希望各廠商能夠更加關注這一能力的構建,加速用戶落地實踐。