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