GaussDB技術解讀系列:資料庫遷移創新實踐

MySQL成长之路發表於2024-10-28

本篇將分享GaussDB資料庫遷移的創新實踐。

易遷移能力是企業資料庫替換選型的關鍵考量
資料庫的選型除了要看資料庫本身的能力外,能否很平滑地從其他資料庫遷移到GaussDB,也是很多企業考量的關鍵因素。而資料庫能否平滑遷移有兩個非常核心的要素,一個是資料庫本身,比如能否很好地相容主流資料庫的語法,讓應用少改或者不改;另外一個是在資料庫外圍能否提供一些好用、易用的遷移工具,把應用中內嵌的SQL、資料庫中的物件以及全量和增量資料,在業務近乎零停機的情況下從其他資料庫平滑地遷移過來。這兩點是企業做資料庫選型時考量的兩個遷移關鍵要素。

結構(UGO)+資料(DRS)
一站式遷移解決方案

在2021年的DTCC大會上,釋出了華為雲結構+資料一站式遷移解決方案,其中有兩個核心工具。一個工具是UGO,主要做結構和應用的語法相容性評估和轉換,比如將資料庫上層應用中內嵌的SQL捕獲出來進行評估,對資料庫內部物件的DDL進行評估,並輸出一個報告,清晰地展示哪些是資料庫本身相容的、哪些是透過UGO轉換可以相容的、哪些不能轉換需要人工介入進行改造等。另外一個工具是DRS,大家都知道,異構資料庫替換過程中的資料遷移問題非常非常多,DRS要解決的就是怎麼在業務近乎不停機的情況下快速把客戶的存量資料和增量資料遷移過來,並保證資料在任何情況下不丟、不錯、不亂,同時提供靈活、多樣的資料比對和修復能力。

UGO+DRS一體化解決方案
在實際專案中得到驗證

UGO+DRS一站式遷移解決方案近兩年在很多專案中都得到了驗證和應用,這裡舉幾個實際的例子。第一個是我們公司自己內部的MetaERP專案,使用UGO自動轉換了近7億行的O資料庫SQL指令碼,轉換成功率接近100%,同時GaussDB實現了並行邏輯解碼,效能高達近300MB/秒,可以讓DRS輕鬆應對MetaERP在月結、季結和年結時10~20倍的流量洪峰,保證資料同步<5s的低時延。

第二個是某銀行的資料庫替換,這個專案遷移複雜度比較高,面臨應用多、資料庫物件多、儲存過程和package深度依賴等困難,截至目前透過我們的一站式遷移解決方案,完成了近1.3億行SQL指令碼(包含近8000萬儲存過程)的UGO自動轉換,轉換成功率超過96%,採用DRS遷移了近300套左右的O資料庫例項,實現了O資料庫與GaussDB資料庫的長時間並機穩定執行,正反向低時延資料同步。

專案實施過程中遇到新的困難與挑戰
在大量的專案實施過程中,UGO+DRS一站式遷移解決方案也遇到了一些新的困難和挑戰,這些挑戰相信大家也都會遇到,在此給大家做個分享。

挑戰一

在做異構資料庫替換時,如何快速識別異構資料庫語法不相容點,識別資料相同的情況下相同SQL在不同資料庫中執行的效能差異,以及低版本向高版本升級時是否會存在不相容或效能劣化,再有就是如何模擬業務流量洪峰時的資料庫行為表現。

挑戰二

當前很多企業的開發人員和DBA對GaussDB熟悉程度還不高,SQL編寫水平參差不齊,而且在做應用開發時缺乏統一的SQL程式設計規範和有效的SQL稽核機制,很多爛SQL都流入了生產環境,進而引發大量的應用效能問題,影響生產業務和客戶體驗。

挑戰三

很多資料庫當前的字符集在標準字符集的基礎上做了很多擴充套件或者定製,導致資料遷移時相同字符集的不相容,或者就沒有對等的字符集,更有甚者,歷史資料裡已經存在了各種各樣的亂碼資料,這些特殊場景都會影響遷移的平滑性。

當然,困難和挑戰還有很多,但這三個是會阻塞或拖慢資料庫遷移程序的,那麼針對這三個挑戰,我們都做了哪些探索和創新呢?再給大家分享一下。

應對挑戰一:孵化資料庫流量錄製與回放能力

流量錄製與回放的概念相信大家都不陌生,在資料庫領域,有些資料庫廠商也提供了相應的工具,GaussDB面臨的業務場景比較多,所以需要的技術也因場景而異。如果源資料庫是公有云服務,而且提供了全量SQL,那麼直接獲取全量SQL並進行回放即可;如果源資料庫開啟了審計日誌,也可以直接下載並解析審計日誌,當然開啟審計日誌會對資料庫的效能有一定的影響;如果源端是自建資料庫,而且未開啟審計日誌,那就需要部署一個agent,透過捕獲網路資料包,結合資料庫本身的通訊協議來解析出應用下發的所有SQL。基本上這三種方案可以涵蓋所有的場景,這裡面還要注意幾個點,首先是要研究透不同資料庫的通訊協議,其次是實現異構資料庫替換場景下的SQL自動轉換,另外是要具備SQL回放的流量控制能力,能加速或者放慢等,當然在解析、回放等出現異常的情況下,要做好記錄。

接下來就是在源資料庫的映象庫和GaussDB資料庫同時進行流量回放,而且保證映象庫和目標資料庫的資料完全一致,回放的SQL也完全一樣,最終輸出一個分析報告,比對每一條SQL的執行耗時、資源消耗、甚至是執行結果,很容易看出來哪些SQL的效能GaussDB比源資料庫好、哪些出現了劣化、哪些是基本持平的。

GaussDB團隊正在和某銀行進行資料庫流量錄製與回放的聯合創新,從實際應用效果來看,透過agent方式捕獲流量包,SQL抓取成功率可以做到97%以上,解析成功率和回放成功率可以達到95%,在此過程中,還可以識別到語法不相容、語義不相容的異常情況。

應對挑戰二:孵化GaussDB資料庫SQL稽核能力

SQL稽核大家更為熟悉,很多大的企業都會進行探索和實踐,但對於GaussDB來說,由於是純自主創新的分散式資料庫,很多企業的開發人員和DBA還不熟悉GaussDB的SQL語法,也沒有制定較為完善的SQL程式設計規範,很多第三方SQL稽核工具也沒有針對GaussDB的稽核能力,這種情況下,我們結合UGO成熟的SQL解析器,以及多個專案中的SQL調優實踐,孵化出了GaussDB資料庫的SQL稽核能力。

SQL稽核的輸入可以有多種型別,可以是程式碼倉,也可以是一個SQL檔案,還可以是透過流量錄製獲取的動態SQL等等,可以稽核直接獲取到的原生SQL,也可以稽核透過UGO轉換後的SQL。

截至目前,已經沉澱了81條稽核規則,並在公司內部的兩個專案以及外部的多個銀行進行了應用,效果超出預期。

應對挑戰三:孵化字符集相容性分析評估能力

針對資料遷移,大家最擔心的莫過於正式割接時出現各種各樣的問題導致割接失敗,除了遷移工具本身的功能之外,最常見的可能就是字符集不相容、資料亂碼、生僻字等等。舉個例子,O資料庫對GBK字符集做了擴充,可以儲存UTF-8字元,而GaussDB資料庫的GBK字符集非常規範,從O資料庫向GaussDB遷移資料時,這些UTF-8字元根本無法寫入,遷移必然失敗。更有甚者,很多客戶的海量歷史資料中有大量的亂碼資料,無法確定這些資料是什麼時候寫入的,哪些應用寫入的,或者後續會不會再用到,但客戶要求必須遷移過來。那麼,面對這些挑戰,我們嘗試透過孵化字符集相容性分析評估工具來提前識別。

這個工具的原理很簡單,首先是建立一個可以分析的字符集基線,比如GB系、Unicode系列等,其次是獲取源資料庫的後設資料,包括字符集、索引資訊、表結構資訊(列型別、列長度)等,然後基於源資料庫和目標資料庫的字符集做好對映,最後再對資料庫進行資料掃描和分析,輸出多維度的分析評估報告。目前這個工具正在和某銀行進行聯創,從前期的試用效果來看,確實能發現很多問題,比如ZHS16GBK和AL32UTF8兩種字符集混編、直接寫入二進位制格式導致資料亂碼、ZHS16GBK字符集使用了大量生僻字等。

對UGO+DRS一站式遷移解決方案
的演進思考
以上是在使用UGO+DRS一站式遷移解決方案過程中遇到的三個大的挑戰,以及應對這三個挑戰做的一些創新實踐。現在GaussDB的遷移場景越來越多,也越來越複雜,所以會不斷地進行探索和創新,讓方案更完善,遷移過程更平滑,比如流量回放、SQL稽核、字符集相容性評估會支援更多的資料庫,推出非常詳細和全面的應用、結構、資料遷移可行性分析報告,實現SQL捕獲、轉換、稽核、最佳化全流程一體化管理等等,也希望能和客戶、夥伴以及各位同行進行合作。

以上是GaussDB資料庫在遷移方面的一些創新實踐,謝謝大家,歡迎交流。

​https://support.huaweicloud.com/intl/zh-cn/gaussdb/index.html

相關文章