王龍翔,魏曉林,陳躍輝,劉 成,董小社
(西安交通大學(xué) 電子與信息工程學(xué)院,陜西 西安 710049)
在信息化時代下,數(shù)據(jù)呈現(xiàn)爆發(fā)式增長,如何能夠快速地挖掘出有價值的信息,成為當(dāng)今社會信息化發(fā)展的重要問題。數(shù)據(jù)庫技術(shù)作為信息化發(fā)展的核心技術(shù),如何選擇合適的數(shù)據(jù)庫技術(shù)以及采取什么樣的標(biāo)準(zhǔn)來衡量數(shù)據(jù)庫的性能,成為了信息化時代亟需解決的重要問題。
事務(wù)處理性能委員會[1],即TPC(transaction processing performance council)[2]組織制定了一系列的性能評測標(biāo)準(zhǔn)[3],從此性能評測體系逐漸統(tǒng)一化和規(guī)范化[4-6]。TPC-E是其組織發(fā)布的最新OLTP性能評測基準(zhǔn)。目前在TPC-E負(fù)載下,存在H-store、MySQL等不同類型數(shù)據(jù)庫的評測系統(tǒng),但是這些數(shù)據(jù)庫的測試系統(tǒng)都不具備可移植性。
SQLite數(shù)據(jù)庫是最典型的嵌入式輕量級數(shù)據(jù)庫,具有文件數(shù)據(jù)庫特性和內(nèi)存數(shù)據(jù)庫特性,目前廣泛應(yīng)用于各類應(yīng)用系統(tǒng)中[7-12]。因此,對SQLite性能進(jìn)行評價對于實(shí)際應(yīng)用系統(tǒng)具有十分重要的參考價值。然而,目前缺少面向SQLite數(shù)據(jù)庫的TPC-E實(shí)現(xiàn)及相應(yīng)研究。
針對上述問題,設(shè)計和實(shí)現(xiàn)了面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)。該系統(tǒng)能夠在TPC-E負(fù)載下完成對SQLite文件數(shù)據(jù)庫特性和內(nèi)存數(shù)據(jù)庫特性的事務(wù)處理性能評測功能。通過對數(shù)據(jù)的分析,客觀真實(shí)地給出在TPC-E負(fù)載下SQLite兩種數(shù)據(jù)庫特性下的事務(wù)處理性能測試數(shù)據(jù)。
在一些系統(tǒng)的軟硬件資源緊張的應(yīng)用下,重量級的數(shù)據(jù)庫系統(tǒng)如Oracle的基本特性不能很好地得到應(yīng)用,而基于磁盤文件的輕量級數(shù)據(jù)庫系統(tǒng)[13]如SQLite就能發(fā)揮其明顯的優(yōu)勢,保持了數(shù)據(jù)庫的基本特性[14]。
嵌入式輕量級SQLite數(shù)據(jù)庫管理系統(tǒng)是用C語言實(shí)現(xiàn)的一款開源的嵌入式數(shù)據(jù)庫引擎。SQLite數(shù)據(jù)庫引擎具有很多突出的優(yōu)點(diǎn),如可嵌入、可支持大部分的SQL92標(biāo)準(zhǔn)以及計算機(jī)語言、零配置、在任何兩種不同的操作系統(tǒng)上具有可移植性和獨(dú)立性強(qiáng)等。
TPC-E是由TPC組織在2007年發(fā)布的最新的OLTP測試模型,以紐約交易所為模型。TPC-E測試基準(zhǔn)用于替代目前被大家所公認(rèn)和普遍使用的TPC-C。TPC-E規(guī)定了一個比較全面的商業(yè)模式,能夠涵蓋目前幾乎所有的交易種類。
TPC-E測試基準(zhǔn)的工作負(fù)載集中體現(xiàn)在三種范疇的交易行為,分別是普通客戶交易范疇、股票市場交易范疇和經(jīng)紀(jì)人交易范疇,共包含了33張表和12種事務(wù)。
根據(jù)TPC-E測試模型,對面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)整體框架進(jìn)行設(shè)計,同時嚴(yán)格按照規(guī)范文檔中限定的各個功能模塊的描述和SQLite數(shù)據(jù)庫的特性,進(jìn)行基準(zhǔn)測試系統(tǒng)客戶端的詳細(xì)設(shè)計。文中的基準(zhǔn)測試系統(tǒng)采用的是經(jīng)典的C/S體系架構(gòu)。通過模擬證券交易所的用戶功能,從客戶端提出服務(wù)請求,訪問服務(wù)器。服務(wù)器處理用戶請求并將處理的結(jié)果返回,同時該測試系統(tǒng)還需要記錄該基準(zhǔn)測試系統(tǒng)在整個運(yùn)行過程中各個事務(wù)執(zhí)行的性能指標(biāo)信息。該基準(zhǔn)測試系統(tǒng)主要包括客戶端和后臺服務(wù)器兩部分,其中客戶端主要負(fù)責(zé)測試系統(tǒng)的參數(shù)配置、數(shù)據(jù)裝載、事務(wù)生成、事務(wù)的發(fā)送與接收和運(yùn)行指標(biāo)信息統(tǒng)計和打印。
設(shè)計出來的面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng),應(yīng)具備SQLite文件數(shù)據(jù)庫特性和內(nèi)存數(shù)據(jù)庫特性在TPC-E負(fù)載下的事務(wù)處理性能評測功能,能夠客觀真實(shí)地評測出嵌入式數(shù)據(jù)庫SQLite的兩種數(shù)據(jù)庫在TPC-E負(fù)載下的事務(wù)處理性能。同時設(shè)計方案簡單高效,系統(tǒng)功能滿足魯棒性和完整性等要求。
面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)的體系架構(gòu)如圖1所示,主要由驅(qū)動器(Driver)和待測系統(tǒng)(SUT)組成。圖中用四種符號標(biāo)示不同的內(nèi)容:黑色加粗橫線表示TPC定義接口;加下劃線的部分表示必須由TPC-E測試的主辦方實(shí)現(xiàn);字體加粗加黑的部分表示TPC官方提供的程序,在測試中強(qiáng)制要求使用;斜體字部分表示商用的組件,例如數(shù)據(jù)庫管理系統(tǒng)、數(shù)據(jù)庫驅(qū)動程序。
圖1 基準(zhǔn)測試系統(tǒng)的體系架構(gòu)
通過對TPC-E基準(zhǔn)文檔的研究和TPC所提供的EGen程序包中實(shí)現(xiàn)的功能分析,可知測試實(shí)現(xiàn)的內(nèi)容主要包含如下幾個方面:
(1)驅(qū)動和報告:驅(qū)動器端的驅(qū)動與報告由兩部分功能模塊實(shí)現(xiàn),分別是總控模塊和基準(zhǔn)測試運(yùn)行結(jié)果數(shù)據(jù)的統(tǒng)計與輸出模塊。其中總控模塊的功能有讀取配置參數(shù)、建立事務(wù)緩沖隊(duì)列、網(wǎng)絡(luò)連接和創(chuàng)建工作線程等;基準(zhǔn)測試運(yùn)行結(jié)果數(shù)據(jù)的統(tǒng)計與輸出模塊是對基準(zhǔn)測試系統(tǒng)測試運(yùn)行過程中保存的各種測試指標(biāo)數(shù)據(jù)進(jìn)行統(tǒng)計,并在測試運(yùn)行結(jié)束后輸出統(tǒng)計的指標(biāo)數(shù)據(jù)。
(2)CE、MEE和DM:主要作用是模擬事務(wù)的生成。該部分的功能由TPC組織提供的EGen程序包實(shí)現(xiàn)。EGen程序包中的EGenDriverCE、EGenDriverMEE和EGenDriverDM分別實(shí)現(xiàn)客戶模擬驅(qū)動器、市場模擬驅(qū)動器和數(shù)據(jù)維護(hù)驅(qū)動器的功能。事務(wù)生成的模式是通過隨機(jī)事務(wù)類型生成方式。EGen只提供事務(wù)類型生成功能,而事務(wù)內(nèi)部的邏輯事務(wù)幀功能,就需要測試主辦者自己根據(jù)待測系統(tǒng)的特征進(jìn)行設(shè)計。
(3)驅(qū)動鏈接器:主要作用是將隨機(jī)事務(wù)類型結(jié)構(gòu)體不斷發(fā)送到待測系統(tǒng),同時接收反饋信息。
(4)事務(wù)連接器:主要作用是通過網(wǎng)絡(luò)接收驅(qū)動器層的消息指令,啟動特定事務(wù)的執(zhí)行,并將事務(wù)執(zhí)行的結(jié)果信息傳輸?shù)津?qū)動器層。
(5)事務(wù)幀執(zhí)行器:主要任務(wù)是調(diào)度選定的隨機(jī)事務(wù)對應(yīng)的底層數(shù)據(jù)庫的存儲過程,傳入信息,同時獲取返回信息。
(6)數(shù)據(jù)庫邏輯:根據(jù)測試主辦者所寫的事務(wù)幀邏輯進(jìn)行測試,比如存儲過程。
TPC-E基準(zhǔn)規(guī)范中定義了12種事務(wù),其中每一個事務(wù)都是由一個或者多個帶參數(shù)輸入和輸出的事務(wù)幀,按照一定的邏輯關(guān)系組成。事務(wù)幀是指數(shù)據(jù)庫管理系統(tǒng)的單個存儲過程。12種事務(wù)中有10種事務(wù)是常規(guī)類事務(wù)類型,其中有8種事務(wù)是由證券公司啟動執(zhí)行的,2種事務(wù)是由交易所啟動執(zhí)行的;還有2種事務(wù)是通過設(shè)定固定時間間隔機(jī)制,進(jìn)行自動啟動,執(zhí)行清理程序(Trade_Cleanup)和數(shù)據(jù)維護(hù)類程序(Data_Maintenance),完成所有的數(shù)據(jù)庫表數(shù)據(jù)的檢查和更新操作。
驅(qū)動器部分的功能實(shí)現(xiàn)是面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)的核心問題,在基準(zhǔn)測試系統(tǒng)的邏輯架構(gòu)中,驅(qū)動器的功能可以劃分為總控制模塊、參數(shù)配置模塊、數(shù)據(jù)裝載模塊、事務(wù)生成模塊、事務(wù)發(fā)送與響應(yīng)接收和測試指標(biāo)信息統(tǒng)計與打印模塊等。這些功能模塊共同完成了面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)Driver的功能。下面就這些功能模塊的詳細(xì)設(shè)計進(jìn)行介紹。
2.4.1 總控制模塊
總控制模塊是在整個基準(zhǔn)測試系統(tǒng)中主要負(fù)責(zé)系統(tǒng)運(yùn)行時間和規(guī)模等參數(shù)的輸入,同時對驅(qū)動器的其他功能模塊和SUT中客戶和市場驅(qū)動器的運(yùn)行調(diào)度和控制。
總控制模塊根據(jù)輸入的參數(shù)啟動相應(yīng)的功能模塊的執(zhí)行,同時向運(yùn)行結(jié)果統(tǒng)計和打印模塊、客戶端的市場驅(qū)動模擬器和客戶驅(qū)動模擬器發(fā)送啟動指定,開始基準(zhǔn)測試系統(tǒng)的測試工作,直到測試時間結(jié)束。最后總控制模塊向測試系統(tǒng)指標(biāo)信息統(tǒng)計與打印模塊發(fā)送使能信號,將測試指標(biāo)信息統(tǒng)計結(jié)果打印輸出。
2.4.2 參數(shù)配置和數(shù)據(jù)裝載
參數(shù)配置模塊的主要功能是配置測試系統(tǒng)的運(yùn)行參數(shù)。該模塊為整個系統(tǒng)的執(zhí)行生成了一個運(yùn)行參數(shù)配置文件,信息配置模塊響應(yīng)總控模塊的使能信號,完成配置文件的錄入與導(dǎo)出操作[15]。
2.4.3 事務(wù)生成模塊
事務(wù)生成模塊的主要作用是通過事務(wù)模擬器對象生成隨機(jī)事務(wù)信息結(jié)構(gòu)體,然后將生成的隨機(jī)事務(wù)信息結(jié)構(gòu)體信息封裝成對應(yīng)事務(wù)對象,存放到相應(yīng)的事務(wù)緩沖隊(duì)列中,等待事務(wù)派發(fā)線程將其從事務(wù)緩沖隊(duì)列中取出,并發(fā)送到SUT進(jìn)行執(zhí)行。事務(wù)生成模塊共建立了三種事務(wù)模擬線程:CE事務(wù)模擬線程、DM事務(wù)模擬線程和MEE事務(wù)模擬線程,實(shí)現(xiàn)事務(wù)對象的生成,并且每一個事務(wù)模擬對象只對應(yīng)一個FIFO的事務(wù)緩沖隊(duì)列,用于存放事務(wù)對象。
2.4.4 事務(wù)發(fā)送與響應(yīng)接收
事務(wù)發(fā)送和接收模塊是通過多線程技術(shù)循環(huán)處理多個用戶并發(fā)訪問和反饋信息接收。其中每一個工作線程都代表一個用戶。
2.4.5 測試指標(biāo)信息統(tǒng)計和打印模塊
指標(biāo)信息統(tǒng)計和打印模塊的主要功能是對面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)的測試運(yùn)行中的性能指標(biāo)數(shù)據(jù)進(jìn)行記錄和統(tǒng)計,并在測試結(jié)束后將統(tǒng)計好的指標(biāo)按照一定格式進(jìn)行打印輸出。
基準(zhǔn)測試系統(tǒng)中,應(yīng)用服務(wù)器主要負(fù)責(zé)Driver端與SUT端之間的通信,接收事務(wù)請求消息并驅(qū)動事務(wù)的執(zhí)行,解析事務(wù)幀的邏輯并將其轉(zhuǎn)化為數(shù)據(jù)庫底層具體的信息存取操作,以及將事務(wù)操作的結(jié)果信息封裝成響應(yīng)消息,返回到Driver端。應(yīng)用服務(wù)器端的設(shè)計分為三部分:事務(wù)接收模塊、CE/MEE型事務(wù)幀的解析與發(fā)送和CE/MEE型事務(wù)執(zhí)行模塊。其中CE/MEE型事務(wù)幀的解析與發(fā)送是事務(wù)接收模塊和CE/MEE型事務(wù)執(zhí)行模塊之間的橋梁。
文中在浪潮服務(wù)器系統(tǒng)上實(shí)現(xiàn)了面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)。測試程序分客戶端驅(qū)動器層程序(Driver)和應(yīng)用服務(wù)器層(SUT)兩部分來實(shí)現(xiàn)。其中Driver程序是對客戶類事務(wù)的操作功能進(jìn)行模擬,產(chǎn)生隨機(jī)事務(wù)信息結(jié)構(gòu)體,并發(fā)送到SUT程序;應(yīng)用服務(wù)器程序包括CEServer和MEEServer。應(yīng)用服務(wù)器中的CEServer程序和MEEServer程序分別用來模擬證券公司的服務(wù)操作和交易所的服務(wù)操作。CEServer程序執(zhí)行CE和DM對象產(chǎn)生的事務(wù)并返回執(zhí)行結(jié)果信息;MEEServer程序執(zhí)行MEE對象產(chǎn)生的事務(wù)并返回執(zhí)行結(jié)果信息。而CEServer將Trade_Order事務(wù)的執(zhí)行結(jié)果信息轉(zhuǎn)換成事務(wù)類型信息結(jié)構(gòu)體,存儲在TMEEIndexTable,從而驅(qū)動MEEServer執(zhí)行市場類事務(wù)。
TPC-E基準(zhǔn)測試系統(tǒng)Driver的實(shí)現(xiàn)是根據(jù)2.1節(jié)測試系統(tǒng)的功能模塊的設(shè)計思路,這里基于測試系統(tǒng)功能模塊的總控制模塊實(shí)現(xiàn)的詳細(xì)說明,對面向TPC-E基準(zhǔn)測試系統(tǒng)的功能模塊的具體實(shí)現(xiàn)細(xì)節(jié)進(jìn)行介紹??偪啬K對整個測試過程的控制操作,具體分為四個部分:
(1)啟動測試指標(biāo)信息統(tǒng)計與輸出模塊,對測試結(jié)果進(jìn)行統(tǒng)計,并利用Python語言進(jìn)行打印輸出;
(2)啟動Driver層的隨機(jī)事務(wù)生成模擬器,產(chǎn)生隨機(jī)事務(wù)類型信息結(jié)構(gòu)體;
(3)啟動客戶事務(wù)驅(qū)動模擬器和市場事務(wù)驅(qū)動模擬器,對事務(wù)進(jìn)行幀解析和分發(fā);
(4)啟動數(shù)據(jù)庫連接接口,接收上一層發(fā)來的邏輯事務(wù)幀,并對數(shù)據(jù)庫進(jìn)行存儲操作。
應(yīng)用服務(wù)器端(SUT)的作用是對接收到的事務(wù)邏輯請求進(jìn)行處理,主要功能有事務(wù)執(zhí)行參數(shù)接受、事務(wù)幀的邏輯解析、消息的接收與發(fā)送和數(shù)據(jù)庫連接設(shè)置。根據(jù)應(yīng)用服務(wù)器端設(shè)計,應(yīng)用服務(wù)器端的實(shí)現(xiàn)也可以分為三部分:事務(wù)接收模塊、CE/MEE型事務(wù)幀解析與發(fā)送和CE/MEE型事務(wù)執(zhí)行模塊。其中CE/MEE型事務(wù)幀的解析與發(fā)送的邏輯實(shí)現(xiàn)在TPC-E基準(zhǔn)規(guī)范中已經(jīng)給出,EGen程序包中的EGenTxnHarness程序已經(jīng)給出了事務(wù)接收與執(zhí)行模塊的調(diào)用接口和事務(wù)執(zhí)行順序的程序。
文中對兩種特性下的參數(shù)配置進(jìn)行了統(tǒng)一。SQLite在TPC-E負(fù)載下的規(guī)模參數(shù)配置如表 1所示。對該系統(tǒng)的功能和性能進(jìn)行測試和驗(yàn)證。
表1 TPC-E基準(zhǔn)測試系統(tǒng)的參數(shù)配置
Trade_Result事務(wù)每秒所能執(zhí)行的事務(wù)處理性能指標(biāo)值的統(tǒng)計結(jié)果如圖2所示。SQLite數(shù)據(jù)庫在TPC-E負(fù)載下的性能指標(biāo)tpsE的平均值為1.763 211。表明磁盤I/O是待測系統(tǒng)較為明顯的瓶頸之一。
圖2 性能指標(biāo)統(tǒng)計結(jié)果(文本數(shù)據(jù)庫)
在整個測試過程中,通過對這27個不同測試執(zhí)行時間的性能進(jìn)行了監(jiān)控,這里選取了系統(tǒng)內(nèi)存使用情況數(shù)據(jù)進(jìn)行統(tǒng)計,分別選取了五組數(shù)據(jù)求平均值,以減少其他因素帶來的誤差。這些數(shù)據(jù)包括測試系統(tǒng)運(yùn)行時使用的內(nèi)存、空閑內(nèi)存、交換區(qū)內(nèi)存。具體的內(nèi)存統(tǒng)計結(jié)果如圖3所示。
圖3 內(nèi)存使用情況統(tǒng)計結(jié)果(文本數(shù)據(jù)庫)
從以上對SQLite數(shù)據(jù)庫的文件數(shù)據(jù)庫特性在TPC-E負(fù)載下的功能測試結(jié)果可以得出,面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)在文本數(shù)據(jù)庫特性下,符合TPC-E基準(zhǔn)規(guī)范的要求和SQLite文本數(shù)據(jù)庫的性能標(biāo)準(zhǔn),測試數(shù)據(jù)具有一定的參考價值和可靠性。同時從文件數(shù)據(jù)庫特性的性能測試結(jié)果可以看出,內(nèi)存利用平均值在3.5 G左右。
通過對測試結(jié)果的統(tǒng)計,SQLite內(nèi)存數(shù)據(jù)庫特性的事務(wù)處理性能指標(biāo)值的統(tǒng)計結(jié)果如圖4所示。從圖中可以看出,SQLite的內(nèi)存數(shù)據(jù)庫特性在TPC-E負(fù)載下,通過不斷延長測試時間,來增加面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)的測試壓力,而待測系統(tǒng)的性能指標(biāo)基本處于穩(wěn)定狀態(tài)。經(jīng)過計算可得,tpsE的平均值為3.462 819。
圖4 性能指標(biāo)統(tǒng)計結(jié)果(內(nèi)存數(shù)據(jù)庫)
在進(jìn)行SQLite數(shù)據(jù)庫的內(nèi)存數(shù)據(jù)庫特性的測試過程中,測試系統(tǒng)在這27個不同測試運(yùn)行時間內(nèi),內(nèi)存監(jiān)測數(shù)據(jù)統(tǒng)計結(jié)果如圖5所示。
圖5 內(nèi)存使用情況統(tǒng)計結(jié)果(內(nèi)存數(shù)據(jù)庫)
分析可知,面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng)在內(nèi)存數(shù)據(jù)庫模式下符合TPC-E基準(zhǔn)規(guī)范。從性能測試結(jié)果可以看出,內(nèi)存利用基本上在90%以上,因此內(nèi)存是待測系統(tǒng)的內(nèi)存數(shù)據(jù)庫特性較為明顯的瓶頸之一。
設(shè)計和實(shí)現(xiàn)了面向SQLite的TPC-E基準(zhǔn)測試系統(tǒng),在模擬的金融證券交易場景下測試了SQLite應(yīng)用于金融證券交易平臺的處理性能瓶頸,對SQLite數(shù)據(jù)庫的事務(wù)處理性能優(yōu)化提供了重要數(shù)據(jù),為實(shí)際應(yīng)用提供了性能參考依據(jù)。