李敬林 董欣


【摘要】? ? 自21世紀以來,多種OLTP((on-line transaction processing)數據庫產品如雨后春筍般涌現,國產數據庫不斷成長壯大,多款數據庫產品相繼進入移動通信的IT系統,各數據庫產品形態各不相同。面對新形勢,大家都希望在商用前通過測試來評價一款數據庫的優劣,國產數據庫的測試評價標準成為一項大家重點關注的焦點。同時,如何通過測試來判斷某數據庫是否符合IT系統的需求也是一個重要的命題。本論文從測試的角度,提出了如何評價分析一款國產數據庫的功能、性能、穩定性、健壯性、安全性、兼容性,作為各移動業務系統的數據庫選型參考依據,同時也為軟件系統的技術發展路線給出指引。
【關鍵詞】? ? 國產數據庫? ? OLTP? ? 測試? ? 評價標準? ? 選型
一、OLTP數據庫測試簡介
軟件系統發展到一定規模,就離不開數據庫,對于傳統實時交易系統更加離不開OLTP數據庫。OLTP數據庫的特點是可以及時處理高并發的交易請求,多線程管理, 是傳統的關系型數據庫,主要是基本的、日常的事務處理,例如銀行交易、移動通訊業務交易。
既然有OLTP數據庫產品的存在,就有該產品的測試和驗證。對于只接觸過國外一線品牌的軟件工作者來說,對國產OLTP數據庫產品還處于認識的初期,如何通過一系列的測試驗證方法,可以相對快速地了解國產OLTP的產品能力,是一件非常有意義的事情。
對于熟悉軟件測試理論的測試工程師來說,評價一款軟件產品的優劣,一般從功能齊備性、兼容性、性能、穩定性、健壯性、安全性、操作維護性等角度來開展。數據庫產品也不例外,本文將分別從上述角度來展開闡述,如何評價國產OLTP數據庫的優劣。另外,OLTP數據庫從部署形態來看,主要分為主備式和分布式,本文主要從主備式產品的角度來描述,部分數據庫廠商把主備成為集中式數據庫。
二、國產數據庫的分類評價測試
2.1基本功能測試
首先,我們先從功能上來看一看,摸一摸,捏一捏。當我們站在水果攤前,選擇合適自己的水果前,首先肯定是觀察水果的外表,例如顏色、形狀、紋路等。評價數據庫也不例外,我們都會先檢查一下數據庫的常用功能是否齊備。我們先看看國產主備機產品一般都具備些什么功能:
前面是常見的安裝卸載和升級,接著是4種常見的分區方式,每種分區都有自己的應用場景,這里不重復了。這里稍微提及一下二級分區,例如我們要存儲每個多個城市不同日期的天氣記錄數據,第一級分區就是按照城市來劃分,第二級分區就是按照日期來劃分,這個功能在國外一線數據庫也比較常用。
同時,強調一下存儲過程,對于習慣使用國外一線品牌的應用開發,存儲過程的使用確認是一個偏愛,所以,國產的主備式數據庫也常常開發了此功能。另外,還有一個小功能,“支持FOR UPDATE子句允許鎖定所選行”,也是部分應用開發人員的使用偏好,因為這樣可以避免同一時間大家更新某行記錄,提高了一致性。再者,這里沒有列舉rowid和rownum的偽列功能,大家也留意一下,部分應用系統有這個使用要求,大家評估對比時也考慮一下。
說明:rownum和rowid都是偽列,但是兩者的根本是不同的,rownum是根據sql查詢出的結果給每行分配一個邏輯編號,所以你的sql不同也就會導致最終rownum不同,但是rowid是物理結構上的,在每條記錄insert到數據庫中時,都會有一個唯一的物理記錄。
關于字符集的支持,國產的數據庫產品一般支持UTF-8,GBK,ASCII字符集,而且是初始化安裝時進行配置,一般是不支持在線修改的,若使用過程中修改服務器端字符集要跟數據庫廠商確認。
關于支持故障恢復,一般可以支持恢復到指定時間點,個別數據庫可以做到閃回,例如表級別的、分區級別,根據自己的業務系統情況進行測試評估。
關于MVCC多版本的控制,一般國產數據庫都具備,測試時,要注意是否為不同的用戶保存了自己版本的數據,讀的數據不是最新的,有可能是歷史的,這是測試的關鍵點。MVCC存在就是因為數據庫的專家們不滿足悲觀鎖這種性能不佳的解決讀寫沖突的方案,提出了在并發讀寫數據庫時,可以做到在讀操作時不用阻塞寫操作,寫操作也不用阻塞讀操作,提高了數據庫并發讀寫的性能。
關于支持ACID基本特性時,這里有一個持久性的檢查,應該重點關注重啟數據庫,操作系統后,數據是否還存在。
2.2數據遷移測試
關于數據庫的遷移,在測試時,要關注是否提供了從oracle、mysql等異構數據庫的全量或者增量的遷移工具,另外測試時要選取一定的數據量進行驗證,例如10G的歷史記錄。檢查遷移是否成功,計算搬遷的速率。
2.3數據同步測試
對于數據同步的功能,主要存在于容災或者雙中心的應用場景,一般指同構數據庫之間的數據同步。同步工具是需要單向還是雙向要根據業務使用場景來選擇驗證,有的場景,例如主備容災,備節點只需要讀和備份功能,那么單向同步就足夠了。若選擇雙向同步,要從應用側保證同步雙方在同一個表沒有出現相同記錄。目前雙向同步的功能對國產數據庫來說,還是處于起步階段,不是特別成熟。另外,雙向同步的使用也有一定場景限制。
2.4兼容性
首先是考慮oracle的兼容度。因為部分業務系統是從oracle遷移過來,所以對oracle的常用功能的兼容度,可以作為測試檢查點。包括兼容oracle的語法Explain plan,Create Profile,HINT,還有oracle的高級包:包括
DBMS_JOB.SUBMIT,DBMS_JOB.RUN,DBMS_SQL.RETURN_RESULT ,DBMS_DEBUG.INIT,DBMS_LOB.GETLENGTH,DBMS_OUTPUT.PUT_LINE,DBMS_RANDOM.VALUE,DBMS_STATS.AUTO_DEGREE,DBMS_UTILITY.GET_TIME等。
除了考慮oracle兼容性測試外,還要考慮數據庫跟服務器架構、存儲、操作系統的兼容度,這里列舉一下常見的兼容性測試點:
服務器架構:x86,ARM架構。
存儲:HDD,SATA,SSD,Nvme,SAN存儲。
操作系統:CentOS系列,BCLinux(中國移動研發),UOS,麒麟OS。
2.5數據庫性能測試
關于數據庫性能的驗證,可以從兩個角度來考慮,一個角度是采用行業常見評價標準,一個角度是使用業務應用的性能場景。首先看看行業的常用標準,TPCC測試模型。此方法提出的是TPC委員會,是一個國際組織,全稱是Transaction Processing Performance Council,事務處理性能委員會。此模型使用的是經過抽象后的電商系統模型,在地理分布的多個區域有業務,并且使用倉庫管理。當業務擴展的時候,公司將添加新的倉庫。每個倉庫維護100000種商品,每個倉庫負責十個區域的供貨,每個區域3000個客戶服務,平均每個客戶的一個訂單有10項產品。所有訂單中約1%的產品在其直接所屬的倉庫中沒有存貨,需要由其他區域的倉庫來供貨。
性能由tpmC(transactions per minute,tpm)衡量,單位是每分鐘,取tpmC NewOrders值,C指TPC中的C基準程序。整個業務模型如圖 1。
使用TPCC模型來測試OLTP數據庫的性能,優點在于測試模型的標準性,可以被多數的用戶接受,有一定的對比價值。當我們使用TPCC的測試值來做性能對比,要注意使用統一的施壓測試工具及版本,配置要保持一致例如倉庫數,業務比例值,測試時長周期,是否使用外鍵等。同時,使用的施壓機器默認是不跟數據庫放在同一服務器的,個別測試團隊把施壓工具安裝在數據庫服務器上,減少網絡帶寬和延時,雖然可以提升測試結果值,但是這種方法不被行業專家所接受。
現在,我們看看另外一種性能測試角度,使用實際業務系統的業務模型來測試。這種方法,常常是選擇應用系統中高并發處理模塊,作為一個模擬工具來發起并發請求,也可以直接把應用程序跟數據庫集成在一起,模擬相對真實的性能測試場景。測試時,采集此時數據庫的TPS,響應時間,數據庫服務器的磁盤IO讀寫速率,CPU使用率,內存使用率。同時,也采集業務全流程的TPS,響應時間等指標,最后對比同款數據庫的測試結果指標,可以分析出測試對象數據庫的性能水平。
關于事務型的數據庫,我們還可以測試以下幾種常見場景的性能表現指標。
例如,純寫入的高并發場景,純更新的高并發,寫入加更新,寫入加查詢等場景,這些使用場景跟實際業務應用場景比較接近,可以體現出OLTP數據庫在寫,讀,更新,查詢等幾個動作,及動作組合的效率情況。另外,這里稍微提及一下查詢的性能測試,對于事務型的應用系統,一般聚合查詢,跨表查詢的場景不多,但是不代表了OLTP數據庫就沒有分析型的語句使用需求和場景,一些實時交易類的系統,也是需要每天做統計分析,出報表的,在做數據庫性能評估時,可以適當增加一些聚合查詢、跨表查詢、關聯查詢的性能測試用例。這樣,面向數據庫的性能評價會更加全面。
另外,在性能度量方面,從運維角度考慮,還可以考慮一下數據導入導出的效率測試。導入的測試,主要是批量地導入文件,文件格式和內容可以參考業務模型來設計。統計導入的數據量大小和耗時,計算導入的TPS。對于導出操作,常見是導出為CSV格式的文件,每個文件大小約100M,統計導出的數據量大小和耗時,計算導出的TPS。
三、結束語
對國產數據庫的評價,需要結合我們的應用系統使用場景來測試。當然,采用國際標準的TPCC測試模型來驗證OLTP數據庫的事務處理效率是可行的,有一定的參考價值和對比意義。對于國內的應用系統,需要從對數據庫的功能、兼容度、性能、遷移能力、數據同步能力等方面來進行測試評價。另外,所有能力的評價是基于一定的軟硬件環境的,即在同樣的服務器架構、操作系統和存儲下進行,記錄此條件下的功能和性能表現。
參? 考? 文? 獻
[1]《中國移動主備式數據庫測試規范》,2020:5 - 6