專利名稱:用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體涉及數(shù)據(jù)庫,更具體涉及一種用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng)和方法。
背景技術(shù):
目前,大量的應(yīng)用運行在數(shù)據(jù)庫管理系統(tǒng)中存儲的數(shù)據(jù)之上。隨著軟件的日益復(fù)雜,如何確保這些應(yīng)用的質(zhì)量成為一個關(guān)鍵問題。此外,不僅是應(yīng)用變得更復(fù)雜,數(shù)據(jù)庫管理系統(tǒng)本身也變得更復(fù)雜。這些數(shù)據(jù)庫管理系統(tǒng)通常存儲著由很多不同應(yīng)用和成千上萬的用戶訪問的業(yè)務(wù)關(guān)鍵數(shù)據(jù)。數(shù)據(jù)庫管理系統(tǒng)的中斷通常對于核心業(yè)務(wù)來說具有嚴重的后果,其可造成企業(yè)數(shù)百萬元的損失,失去用戶和業(yè)務(wù)伙伴的信任,甚至引起法律糾紛。在最壞的情況下甚至使企業(yè)倒閉。因此,獲得充足的數(shù)據(jù)庫測試方法對于企業(yè)來說是必不可少和至關(guān)重要的。而且獲得這種數(shù)據(jù)庫測試方法不但對于作為數(shù)據(jù)庫最終用戶的企業(yè)是至關(guān)重要的,而且對于應(yīng)用中間件廠商以及數(shù)據(jù)庫廠商自己也是至關(guān)重要的。以數(shù)據(jù)庫為中心的測試的關(guān)鍵是能夠獲得“真實世界的”工作負載,這是因為,由于當今的應(yīng)用和環(huán)境的復(fù)雜性,極難人工生成充足的生產(chǎn)系統(tǒng)的數(shù)據(jù)和訪問模式?,F(xiàn)在也日益需要將這種真實世界的工作負載及相應(yīng)的測試工具更多地提供給第三方。例如,一個企業(yè)可能將其應(yīng)用數(shù)據(jù)庫測試外包給服務(wù)提供商,這也被稱為作為服務(wù)的測試(Test as a Service) 0這產(chǎn)生了數(shù)據(jù)機密性和安全性的問題。企業(yè)很可能不希望將其核心業(yè)務(wù)數(shù)據(jù)顯露給不可信的第三方。而且,即使在企業(yè)內(nèi)部,數(shù)據(jù)訪問往往也是有著嚴格限制的。開發(fā)和測試應(yīng)用的人可能無法訪問真實的業(yè)務(wù)數(shù)據(jù)。目前已存在幾種用于收集和/或生成工作負載的解決方案,但或者由于數(shù)據(jù)機密性問題,或者由于對真實世界環(huán)境的不充分模擬,它們的使用都是有限的。而且,這些解決方案通常缺乏將數(shù)據(jù)庫數(shù)據(jù)與語句相關(guān)聯(lián)的能力,因此使它們不適合用于真實的端到端測試場景。應(yīng)用驅(qū)動的測試方法需要在測試環(huán)境中重建通常很復(fù)雜的生產(chǎn)系統(tǒng)。這種方法需要花費大量的時間和資源來重建環(huán)境。這種解決方案的移植性較差,因為,生產(chǎn)環(huán)境是非常獨特和難以重建的。此外,測試數(shù)據(jù)的生成也會成為問題,因為如果數(shù)據(jù)來自于生產(chǎn)系統(tǒng),則仍然可能包含機密信息。最后,真實世界工作負載的模擬會成為問題,因為適當?shù)膽?yīng)用驅(qū)動器需要被手工創(chuàng)建。另一種方法是所謂的“捕獲和重放”(Capture and Play)解決方案。這里,應(yīng)用和數(shù)據(jù)庫之間的通信被截獲和記錄下來。此后,可在開始記錄時獲取的數(shù)據(jù)庫映像上重放所記錄的語句流。然而,該解決方案需要用于重放的數(shù)據(jù)存儲代表與捕獲階段完全相同的狀態(tài)(包括所有數(shù)據(jù))。這使得該解決方案移植性較差,且由于機密性問題而可用性較差,而且這種“鎖定”的環(huán)境使得很難測試遷移和伸縮的場景。在這種方案中,難以偏離所記錄的語句流。此外,這種捕獲和重放解決方案無法在人工生成的數(shù)據(jù)上工作。目前存在著如下幾種生成數(shù)據(jù)庫測試數(shù)據(jù)的方法:
I)隨機測試數(shù)據(jù)生成。所生成的數(shù)據(jù)通常沒有意義,因此幾乎不可能基于這種數(shù)據(jù)設(shè)計出好的工作負載來獲得測試目標,無論是從功能角度來看還是從性能角度來看。2)數(shù)據(jù)掩蔽(data masking)。很多產(chǎn)品提供了數(shù)據(jù)掩蔽功能。然而,數(shù)據(jù)掩蔽通常僅在用戶場所內(nèi)部使用,因為大量數(shù)據(jù)庫對象的存在使得完全確保私密信息是不切實際的,而將掩蔽的數(shù)據(jù)共享給用戶的安全性和私密性邊界之外的第三方被認為是不安全的。此外,需要時間和資源來學習和操作掩蔽工具以生成適當?shù)难诒?。同時,數(shù)據(jù)掩蔽可能打破數(shù)據(jù)的順序,使得原始工作負載中的一些查詢無法直接用于測試。3)簡檔生成(profiling)和填充腳本。測試者基于預(yù)定的測試策略編寫其自己的數(shù)據(jù)生成腳本。例如,測試者通過運行簡檔生成腳本生成記錄了表大小或列不同值的簡檔,然后根據(jù)簡檔將數(shù)據(jù)插入到目標系統(tǒng)中。該方法需要測試者很好地了解應(yīng)用,并在測試數(shù)據(jù)生成項目上花費大量時間。所有這些測試數(shù)據(jù)生成方法的一個缺點是它們沒有將SQL語句和應(yīng)用工作流考慮進去,這使得它們無法成為一個充足的端到端解決方案。因此,本領(lǐng)域中需要一種能夠容易地生成可移植的和通用的用于數(shù)據(jù)庫測試的端到端工作負載的解決方案。
發(fā)明內(nèi)容
在本發(fā)明的一個方面,提供了一種用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng),包括:工作負載捕獲模塊,被配置為捕獲源系統(tǒng)上包含針對源數(shù)據(jù)庫發(fā)出的原數(shù)據(jù)庫語句的工作負載;元信息收集模塊,被配置為收集源數(shù)據(jù)庫中的數(shù)據(jù)模式(schema)和數(shù)據(jù)分布統(tǒng)計特性;數(shù)據(jù)生成模塊,被配置為根據(jù)所述元信息收集模塊收集的源數(shù)據(jù)庫中的數(shù)據(jù)模式在目標數(shù)據(jù)庫中創(chuàng)建具有相同數(shù)據(jù)模式的數(shù)據(jù)對象,以及根據(jù)所述元信息收集模塊收集的數(shù)據(jù)分布統(tǒng)計特性在目標數(shù)據(jù)庫中生成具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù);以及語句修改模塊,被配置為修改所述工作負載捕獲模塊捕獲的工作負載中的至少部分原數(shù)據(jù)庫語句,以使得修改后的數(shù)據(jù)庫語句在目標數(shù)據(jù)庫上的執(zhí)行具有原數(shù)據(jù)庫語句在源數(shù)據(jù)庫上的執(zhí)行的相似的性能特征,從而獲得測試工作負載。在本發(fā)明的另一個方面,提供了一種用于生成數(shù)據(jù)庫的測試工作負載的方法,包括:捕獲源系統(tǒng)上包含針對源數(shù)據(jù)庫發(fā)出的原數(shù)據(jù)庫語句的工作負載;收集源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性;根據(jù)所述收集的源數(shù)據(jù)庫中的數(shù)據(jù)模式在目標數(shù)據(jù)庫中創(chuàng)建具有相同數(shù)據(jù)模式的數(shù)據(jù)對象,以及根據(jù)所述收集的數(shù)據(jù)分布統(tǒng)計特性在目標數(shù)據(jù)庫中生成具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù);以及修改所捕獲的工作負載中的至少部分原數(shù)據(jù)庫語句,以使得修改后的數(shù)據(jù)庫語句在目標數(shù)據(jù)庫上的執(zhí)行具有所述原數(shù)據(jù)庫語句在源數(shù)據(jù)庫上的執(zhí)行的相似的性能特征,從而獲得測試工作負載。
所附權(quán)利要求中闡述了被認為是本發(fā)明的特點的創(chuàng)造性特征。但是,通過參照附圖閱讀下面對說明性實施例的詳細說明可更好地理解發(fā)明本身以及其優(yōu)選使用模式、目標、特征以及優(yōu)點,在附圖中:圖1示出了根據(jù)本發(fā)明的實施例的用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng)的示意性體系結(jié)構(gòu)圖;圖2例示了將數(shù)據(jù)庫語句中的謂詞及謂詞組合按照所涉及的數(shù)據(jù)庫表的列劃分為不同類別的方法;圖3A例示了數(shù)據(jù)庫語句的涉及同一個數(shù)據(jù)庫表的多個列的多個謂詞或謂詞組合、其各自的過濾因子以及其過濾因子之間的關(guān)系;圖3B例示了在目標數(shù)據(jù)庫中生成滿足圖3所示的多個謂詞及謂詞組合的過濾因子的數(shù)據(jù)的示意性過程;圖4示出了一組示例性數(shù)據(jù)庫語句、從該組數(shù)據(jù)庫語句中獲得的多個數(shù)據(jù)庫表之間的聯(lián)結(jié)(join)關(guān)系、以及表示這些數(shù)據(jù)庫表的列的數(shù)據(jù)之間的關(guān)系的謂詞;圖5例示了根據(jù)該實施例對包含聯(lián)結(jié)關(guān)系的數(shù)據(jù)庫語句進行修改的過程;圖6示出了根據(jù)本發(fā)明的實施例的用于生成數(shù)據(jù)庫的測試工作負載的方法;以及圖7示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)的框圖。
具體實施例方式本發(fā)明提出了一種基于真實世界的應(yīng)用工作負載涉及的數(shù)據(jù)的完全非機密的元信息來生成或克隆測試工作負載的解決方案,其中工作負載是指在應(yīng)用中針對數(shù)據(jù)庫中的數(shù)據(jù)執(zhí)行的一組數(shù)據(jù)庫語句及其流程。所生成的測試工作負載提供了一種可移植的和可訪問的端到端解決方案,其沒有數(shù)據(jù)機密性問題,但保持了源環(huán)境中的對功能和性能測試來說必需的特性。由于對工作負載語句和數(shù)據(jù)的元信息(例如數(shù)據(jù)模式和統(tǒng)計信息)進行了廣泛的分析和關(guān)聯(lián),因此使所生成的測試數(shù)據(jù)擺脫了機密性信息,但是在數(shù)據(jù)分布、頻率和聯(lián)結(jié)關(guān)系等方面仍然保持了真實世界的特性。此外,SQL語句和參數(shù)值被修改或處理,以使得它們能夠在所生成的數(shù)據(jù)之上工作,同時不會失去選擇率(selectivity)和訪問模式方面的特性。本發(fā)明的解決方案可以與現(xiàn)有的“捕獲和重放”解決方案協(xié)作。也就是說,可以將現(xiàn)有的“捕獲和重放”解決方案所捕獲的語句流中的原始語句替換為經(jīng)本發(fā)明的解決方案修改后的對應(yīng)語句,并針對本發(fā)明的解決方案所生成的數(shù)據(jù)來重放這些語句?,F(xiàn)參照附圖描述本發(fā)明的實施例。用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng)圖1示出了根據(jù)本發(fā)明的實施例的用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng)的示意性體系結(jié)構(gòu)圖。如圖所示,該用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng)100包括在源系統(tǒng)上運行的工作負載捕獲模塊101和元信息收集模塊102,以及在目標系統(tǒng)上運行的數(shù)據(jù)生成模塊103和語句修改模塊104。源系統(tǒng)通常為企業(yè)所實際使用的生產(chǎn)系統(tǒng),且源數(shù)據(jù)庫中通常包含有機密信息。目標系統(tǒng)通常為需要進行測試的尚未投入生產(chǎn)運行的系統(tǒng)。目標系統(tǒng)與源系統(tǒng)可以相同,也可以不同。目標系統(tǒng)與源系統(tǒng)可以包括同一個數(shù)據(jù)庫產(chǎn)品的不同版本,也可以是完全不同的數(shù)據(jù)庫產(chǎn)品。在兩者是完全不同的數(shù)據(jù)庫產(chǎn)品的情況下,需要在兩者之間進行數(shù)據(jù)定義語言(DDL)等之間的轉(zhuǎn)換。如本領(lǐng)域中所公知的,這種轉(zhuǎn)換可根據(jù)兩個系統(tǒng)的不同數(shù)據(jù)模式(schema)定義容易地實現(xiàn)。
工作負載捕獲模塊101被配置為捕獲源系統(tǒng)上包含針對源數(shù)據(jù)庫發(fā)出的數(shù)據(jù)庫語句的工作負載。工作負載是源系統(tǒng)在運行過程中實際使用的工作負載,其包括源系統(tǒng)的應(yīng)用在運行過程中發(fā)出的數(shù)據(jù)庫語句。除了數(shù)據(jù)庫語句文本外,在本發(fā)明的一些實施例中,工作負載捕獲模塊101還捕獲其他相關(guān)信息,例如語句執(zhí)行頻率、語句執(zhí)行順序等。此外,在本發(fā)明的進一步的一些實施例中,工作負載捕獲模塊101還捕獲諸如語句耗用時間、CPU和I/o資源消耗等信息。所有主要的關(guān)系數(shù)據(jù)庫系統(tǒng)都具有內(nèi)置的功能或工具來捕獲上述信息。本發(fā)明的系統(tǒng)100不僅需要模擬源數(shù)據(jù)庫中的數(shù)據(jù),而且需要使生成的測試工作負載模擬源系統(tǒng)上的工作負載的性能特性。為實現(xiàn)此目的,還需要捕獲源系統(tǒng)上運行的工作負載中的語句的性能數(shù)據(jù)。所述性能數(shù)據(jù)例如為語句中的謂詞的過濾因子。過濾因子是指一數(shù)據(jù)庫表中滿足給定謂詞的記錄占所全部記錄的百分比,它是一個反映查詢性能的重要指標。在數(shù)據(jù)庫管理系統(tǒng)中,通常提供了用于獲得過濾因子的函數(shù)或工具。過濾因子可包括單個謂詞的過濾因子以及一個查詢中具有“與”關(guān)系的謂詞組合的過濾因子。元信息收集模塊102被配置為收集源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性。根據(jù)本發(fā)明的一實施例,所述元信息收集模塊102被配置為僅收集所述工作負載中包含的數(shù)據(jù)庫語句所涉及的、源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性。為此,在本發(fā)明的該實施例中,該系統(tǒng)100還包括一識別模塊(未示出),其被配置為通過分析數(shù)據(jù)庫語句,發(fā)現(xiàn)這些語句所弓I用的所有數(shù)據(jù)庫對象。本發(fā)明的一個關(guān)鍵點是在目標系統(tǒng)中模擬源系統(tǒng)上的數(shù)據(jù)分布。源系統(tǒng)上的數(shù)據(jù)分布是由數(shù)據(jù)分布統(tǒng)計特性表示的。數(shù)據(jù)模式(data schema)描述了數(shù)據(jù)庫中所存儲的數(shù)據(jù)的數(shù)據(jù)類型及結(jié)構(gòu),也是在目標系統(tǒng)中生成數(shù)據(jù)所必需的。數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性存儲在數(shù)據(jù)庫的目錄(catalog)中,并可以由任何具有足夠權(quán)限的人收集。根據(jù)本發(fā)明的實施例,所述數(shù)據(jù)分布統(tǒng)計特性包括數(shù)據(jù)庫表的列中的數(shù)據(jù)的最大值、最小值、基數(shù)(cardinality)和大小。也就是說,元信息收集模塊102從源數(shù)據(jù)庫中收集數(shù)據(jù)庫表中的各單個列中的數(shù)據(jù)的最大值、最小值、基數(shù)和大小。所述最大值和最小值是指數(shù)據(jù)庫表的列中的用戶數(shù)據(jù)中的最大值和最小值,而不是指在不存在用戶數(shù)據(jù)的情況下系統(tǒng)所默認的值(盡管該值可能是最大值或最小值)。所述基數(shù)是指一列(或作為其一部分的數(shù)據(jù)段)中的不同數(shù)值的數(shù)量。所述大小是指一列(或作為其一部分的數(shù)據(jù)段)中的相同和不同數(shù)值的總數(shù)。根據(jù)本發(fā)明的其他實施例,所述數(shù)據(jù)分布統(tǒng)計特性包括數(shù)據(jù)庫表的列中的數(shù)據(jù)中出現(xiàn)頻率最高的若干數(shù)值各自的出現(xiàn)頻率以及由所述數(shù)值劃分的每個數(shù)據(jù)段的最大值、最小值、基數(shù)和大小。也就是說,元信息收集模塊102從源數(shù)據(jù)庫中收集數(shù)據(jù)庫表中的單個列中的數(shù)據(jù)中出現(xiàn)頻率最高的若干數(shù)值各自的出現(xiàn)頻率以及由所述數(shù)值劃分的每個數(shù)據(jù)段的最大值、最小值、基數(shù)和大小。根據(jù)本發(fā)明的實施例,由工作負載捕獲模塊101所捕獲的工作負載及其他相關(guān)信息被存儲在語句簡檔中,而由元信息收集模塊102所收集的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性被存儲在數(shù)據(jù)簡檔中。語句簡檔包含數(shù)據(jù)庫語句文本、語句執(zhí)行頻率、過濾因子,且可能還包括耗用時間、CPU和I/O消耗等。數(shù)據(jù)簡檔包括數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性。語句簡檔和數(shù)據(jù)簡檔可以是XML格式,也可以是其他格式的。語句簡檔和數(shù)據(jù)簡檔被提供給如下所述的數(shù)據(jù)生成模塊102。在本發(fā)明的其他一些實施例中,也可以沒有所述語句簡檔和數(shù)據(jù)簡檔,而是工作負載捕獲模塊101和元信息收集模塊102直接將所捕獲的工作負載以及所收集的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性發(fā)送給數(shù)據(jù)生成模塊103進行處理。在本發(fā)明的一些實施例中,在語句簡檔和數(shù)據(jù)簡檔被提供給數(shù)據(jù)生成模塊102之前,可以對語句簡檔和數(shù)據(jù)簡檔中的信息進行適當?shù)男薷囊赃m應(yīng)目標系統(tǒng)的情況或滿足用戶的需求。例如,在目標系統(tǒng)和源系統(tǒng)包括不同數(shù)據(jù)庫產(chǎn)品的情況下,可能需要對數(shù)據(jù)簡檔中的數(shù)據(jù)模式進行適應(yīng)性修改;再例如,可以根據(jù)用戶需求對數(shù)據(jù)簡檔中的數(shù)據(jù)分布統(tǒng)計特性進行修改,以縮放將在目標數(shù)據(jù)庫中生成的數(shù)據(jù)量,等等。數(shù)據(jù)生成模塊103被配置為根據(jù)所述獲取的源數(shù)據(jù)庫中的數(shù)據(jù)模式在目標數(shù)據(jù)庫中創(chuàng)建具有相同數(shù)據(jù)模式的數(shù)據(jù)對象(例如,表、表中的每個列等),以及根據(jù)所述獲取的數(shù)據(jù)分布統(tǒng)計特性在目標數(shù)據(jù)庫中生成具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù)。所述數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性例如是從數(shù)據(jù)簡檔中獲取的。根據(jù)本發(fā)明的實施例,數(shù)據(jù)生成模塊103可根據(jù)來自源系統(tǒng)的數(shù)據(jù)簡檔中包含的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性來在目標數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)對象并生成數(shù)據(jù)。在本發(fā)明的一些實施例中,來自源數(shù)據(jù)庫的數(shù)據(jù)分布統(tǒng)計特性包括數(shù)據(jù)庫表中的列中的數(shù)據(jù)的最大值、最小值、基數(shù)和大小,在這樣的實施例中,數(shù)據(jù)生成模塊103將在目標數(shù)據(jù)庫的相應(yīng)表中的相應(yīng)列中生成具有相同的最大值、最小值、基數(shù)和大小的數(shù)據(jù)。生成數(shù)據(jù)的具體方法可以有多種。例如,可以根據(jù)最大值、最小值和基數(shù)確定最大值、最小值之間的不同數(shù)值(這些不同數(shù)據(jù)例如可以是大體等間隔的),然后不斷重復(fù)這一系列數(shù)值以達到所述大小。例如,如果一列的最小值是5,最大值是21,基數(shù)是5,大小是10,則可以生成如下數(shù)值序列:5,9,13,17,21,5,9,13,17,21。對于字符串型的數(shù)據(jù),可以簡單地通過在不同字符串間定義的排序規(guī)則,使用與上述方法本質(zhì)相同的方法生成。在本發(fā)明的另一些實施例中,來自源數(shù)據(jù)庫的數(shù)據(jù)分布統(tǒng)計特性包括數(shù)據(jù)庫表的列中的數(shù)據(jù)中出現(xiàn)頻率最高的若干數(shù)值各自的出現(xiàn)頻率以及由所述數(shù)值劃分的每個數(shù)據(jù)段的最大值、最小值、基數(shù)和大小,在這樣的實施例中,數(shù)據(jù)生成模塊103將在目標數(shù)據(jù)庫中的相應(yīng)表的相應(yīng)列中首先生成所述出現(xiàn)頻率最高的若干數(shù)值,且每個數(shù)值的個數(shù)為其出現(xiàn)頻率,然后,根據(jù)由這些數(shù)值劃分的每個數(shù)據(jù)段的最大值、最小值、基數(shù)和大小在該列中生成具有相同最大值、最小值、基數(shù)和大小的數(shù)據(jù)段的數(shù)據(jù)。例如,如果在源數(shù)據(jù)庫的一個表的一列中出現(xiàn)頻率最高的數(shù)值為7和12,其出現(xiàn)頻率分別為50和30,該列中的數(shù)據(jù)由該兩個數(shù)值劃分為兩個數(shù)據(jù)段,第一個數(shù)據(jù)段最小值為1,最大值為6,基數(shù)為5,大小為110 ;第二個數(shù)據(jù)段的最小值為7,最大值為11,基數(shù)為5,大小為10,則可在該列中生成50個7和30個12,并可按上述方法生成110個最小值為1、最大值為6、基數(shù)為5的數(shù)值,以及10個最小值為7、最大值為11、基數(shù)為5的數(shù)值。根據(jù)本發(fā)明的實施例,該系統(tǒng)101還包括:可選的約束關(guān)系獲得模塊105,其被配置為獲得在源系統(tǒng)上數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系;且其中所述數(shù)據(jù)生成模塊103進一步被配置為在目標數(shù)據(jù)庫中生成滿足或基本滿足所述與選擇率有關(guān)的約束關(guān)系且具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù)。選擇率是指一個查詢所選擇的記錄的比例或者結(jié)果集的大小,其可視為過濾因子的上位概念。使用前述方法生成的目標數(shù)據(jù)庫表的各單個列中的數(shù)據(jù)具有與源數(shù)據(jù)庫表的相應(yīng)單個列中的數(shù)據(jù)類似的數(shù)據(jù)分布特征(包括最大值、最小值、基數(shù)、大小、出現(xiàn)頻率最高的值等),然而在同一源數(shù)據(jù)庫表的不同列的數(shù)據(jù)之間以及不同源數(shù)據(jù)庫表的不同列的數(shù)據(jù)之間等也存在著一定的約束關(guān)系,這些約束關(guān)系保證了針對這些數(shù)據(jù)執(zhí)行的查詢具有一定的選擇率,因此,在目標數(shù)據(jù)庫中生成的數(shù)據(jù)在保證單個列中的類似的數(shù)據(jù)分布特征的同時,還應(yīng)保證在相應(yīng)的同一目標數(shù)據(jù)庫表的不同列的數(shù)據(jù)之間以及不同目標數(shù)據(jù)庫表的不同列的數(shù)據(jù)之間等同樣存在著類似的約束關(guān)系,以便針對目標數(shù)據(jù)庫中的這些數(shù)據(jù)執(zhí)行的查詢具有類似的選擇率??赏ㄟ^分析例如語句簡檔中存儲的所捕獲的工作負載中(或以其他方式從源系統(tǒng)中獲得)的各數(shù)據(jù)庫語句中的謂詞、這些謂詞之間的關(guān)系、各個謂詞的過濾因子以及具有“與”關(guān)系的謂詞組合的過濾因子等,來獲得在源系統(tǒng)上數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系。然后,這些約束關(guān)系可以被存儲在數(shù)據(jù)簡檔中。根據(jù)本發(fā)明的實施例,該系統(tǒng)101還包括:可選的謂詞分類模塊(未示出),其被配置為將數(shù)據(jù)庫語句中的謂詞或謂詞組合按照所涉及的數(shù)據(jù)庫表的列劃分為不同類別;可選的出現(xiàn)頻率計算模塊(未示出),其被配置為計算不同類別的謂詞或謂詞組合在數(shù)據(jù)庫語句中的出現(xiàn)頻率;且其中,所述約束關(guān)系獲得模塊105被配置為僅獲得與屬于出現(xiàn)頻率較高的類別的謂詞或謂詞組合的過濾因子有關(guān)的約束關(guān)系。也就是說,在該實施例中,在目標數(shù)據(jù)庫中生成的數(shù)據(jù)不需要保證與所有數(shù)據(jù)庫語句中的所有謂詞及謂詞組合的過濾因子有關(guān)的約束關(guān)系,而只需要保證與數(shù)據(jù)庫語句中出現(xiàn)頻率較高(因而較重要,可給予較大權(quán)重)的謂詞及謂詞組合的過慮因子有關(guān)的約束關(guān)系。圖2例示了將數(shù)據(jù)庫語句中的謂詞及謂詞組合按照所涉及的數(shù)據(jù)庫表的列劃分為不同類別的方法。如圖所示,從所示的一組數(shù)據(jù)庫語句獲得了 6個謂詞類別:Gr0upl、...、Group6,其中 Groupl 類別的謂詞為 J72.SEC_ISS_ID = (即表 J72 的列 SEC_ISS_ID 等于某個數(shù)值),該類謂詞可表示為Pl ;Group2類別的謂詞為J72.FINANCIAL_ID = ,可表示為P2 ;Group3類別的謂詞為J72.RIRM_ID = ,可表示為P3 ;Group4類別的謂詞組合為J72.RIRM_ID = AND J72.SEC_ISS_ID = ,可表示為 P1&P3 ;Group5 類別的謂詞組合為J72.SEC_ISS_ID = ANDJ72.FINANCIAL_ID = ,可表示為 P1&P2 ;Group6 類別的謂詞組合為 J72.RIRM_ID = AND J72.SEC_ISS_ID = AND J72.FINANCIAL_ID = ,可表示為P1&P2&P3。應(yīng)注意的是,在該示例中,每個謂詞類別僅包含涉及一個數(shù)據(jù)庫表的一個列的謂詞,或者涉及一個數(shù)據(jù)庫表的多個列的具有“與”關(guān)系的謂詞組合,而不包含涉及多個數(shù)據(jù)表的多個列的謂詞組合(這種情況將在后文中所述的實施例中處理)。下示出了根據(jù)圖2中所示的每個謂詞類別的出現(xiàn)頻率給出每個謂詞類別的權(quán)重。
權(quán)利要求
1.一種用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng),包括: 工作負載捕獲模塊,被配置為捕獲源系統(tǒng)上包含針對源數(shù)據(jù)庫發(fā)出的原數(shù)據(jù)庫語句的工作負載; 元信息收集模塊,被配置為收集源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性; 數(shù)據(jù)生成模塊,被配置為根據(jù)所述元信息收集模塊收集的源數(shù)據(jù)庫中的數(shù)據(jù)模式在目標數(shù)據(jù)庫中創(chuàng)建具有相同數(shù)據(jù)模式的數(shù)據(jù)對象,以及根據(jù)所述元信息收集模塊收集的數(shù)據(jù)分布統(tǒng)計特性在目標數(shù)據(jù)庫中生成具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù);以及 語句修改模塊,被配置為修改所述工作負載捕獲模塊捕獲的工作負載中的至少部分原數(shù)據(jù)庫語句,以使得修改后的數(shù)據(jù)庫語句在目標數(shù)據(jù)庫上的執(zhí)行具有所述原數(shù)據(jù)庫語句在源數(shù)據(jù)庫上的執(zhí)行的相似的性能特征,從而獲得測試工作負載。
2.根據(jù)權(quán)利要求1的系統(tǒng),還包括: 測試工作負載執(zhí)行模塊,被配置為在目標數(shù)據(jù)庫上執(zhí)行所述測試工作負載,以針對目標數(shù)據(jù)庫進行測試。
3.根據(jù)權(quán)利要求1的系統(tǒng),其中,所述元信息收集模塊被配置為僅收集所述工作負載中包含的原數(shù)據(jù)庫語句所涉及的、源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性。
4.根據(jù)權(quán)利要求1的系統(tǒng),其中,所述相似的性能特征是指相似的謂詞過濾因子。
5.根據(jù)權(quán)利要求1的系統(tǒng),其中,所述數(shù)據(jù)分布統(tǒng)計特性包括數(shù)據(jù)庫表的列中的數(shù)據(jù)的最大值、最小值、基數(shù)和大小,或者數(shù)據(jù)庫表的列中的數(shù)據(jù)中出現(xiàn)頻率最高的若干數(shù)值各自的出現(xiàn)頻率以及由所述數(shù)值劃分的每個數(shù)據(jù)段的最大值、最小值、基數(shù)和大小。
6.根據(jù)權(quán)利要求1的 系統(tǒng),還包括: 約束關(guān)系獲得模塊,被配置為獲得在源系統(tǒng)上原數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系; 且其中,所述數(shù)據(jù)生成模塊進一步被配置為在目標數(shù)據(jù)庫中生成滿足或基本滿足所述與選擇率有關(guān)的約束關(guān)系且具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù)。
7.根據(jù)權(quán)利要求6的系統(tǒng),其中,所述原數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系包括與原數(shù)據(jù)庫語句中涉及同一數(shù)據(jù)庫表的多個列的多個謂詞的過濾因子有關(guān)的約束關(guān)系; 且其中,所述數(shù)據(jù)生成模塊進一步被配置為:首先生成滿足或基本滿足涉及較多列的謂詞或謂詞組合的過濾因子的數(shù)據(jù),然后生成滿足或基本滿足涉及較少列的謂詞或謂詞組合的過濾因子的數(shù)據(jù)。
8.根據(jù)權(quán)利要求6的系統(tǒng),其中,所述原數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系包括與原數(shù)據(jù)庫語句中涉及具有聯(lián)結(jié)關(guān)系的多個數(shù)據(jù)庫表的多個列的謂詞的過濾因子有關(guān)的約束關(guān)系; 且其中,所述數(shù)據(jù)生成模塊進一步被配置為:使在目標數(shù)據(jù)庫中生成的數(shù)據(jù)滿足或基本滿足所述謂詞的過濾因子。
9.根據(jù)權(quán)利要求6的系統(tǒng),還包括: 謂詞分類模塊,被配置為將原數(shù)據(jù)庫語句中的謂詞和謂詞組合按照所涉及的數(shù)據(jù)庫表的列劃分為不同類別; 出現(xiàn)頻率計算模塊,被配置為計算不同類別的謂詞和謂詞組合在數(shù)據(jù)庫語句中的出現(xiàn)頻率; 且其中,所述約束關(guān)系獲得模塊進一步被配置為僅獲得屬于出現(xiàn)頻率較高的類別的謂詞和謂詞組合的過濾因子。
10.根據(jù)權(quán)利要求1的系統(tǒng),其中,所述語句修改模塊進一步包括: 語句修改子模塊,被配置為針對包含聯(lián)結(jié)關(guān)系的原數(shù)據(jù)庫語句,通過將其中的本地謂詞刪除,將本地謂詞中涉及的數(shù)據(jù)庫表的列添加到SELECT子句獲得修改的數(shù)據(jù)庫語句; 結(jié)果集獲得子模塊,被配置為通過針對目標數(shù)據(jù)庫執(zhí)行所述修改的數(shù)據(jù)庫語句獲得結(jié)果集; 列值查找子模塊,被配置為在結(jié)果集中尋找選擇率與所述本地謂詞在源數(shù)據(jù)庫上的單獨及組合過濾因子相近的列值;以及 常量值替換子模塊,使用所述列值替換所述包含聯(lián)結(jié)關(guān)系的數(shù)據(jù)庫語句中的本地謂詞的常量值。
11.一種用于生成數(shù)據(jù)庫的測試工作負載的方法,包括: 捕獲源系統(tǒng)上包含針對源數(shù)據(jù)庫發(fā)出的原數(shù)據(jù)庫語句的工作負載; 收集源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性; 根據(jù)所述收集的源數(shù)據(jù)庫中的數(shù)據(jù)模式在目標數(shù)據(jù)庫中創(chuàng)建具有相同數(shù)據(jù)模式的數(shù)據(jù)對象,以及根據(jù)所述收集的數(shù)據(jù)分布統(tǒng)計特性在目標數(shù)據(jù)庫中生成具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù);以及 修改所捕獲的工作負載中的至少部分原數(shù)據(jù)庫語句,以使得修改后的數(shù)據(jù)庫語句在目標數(shù)據(jù)庫上的執(zhí)行具有所述原數(shù)據(jù)庫語句在源數(shù)據(jù)庫上的執(zhí)行的相似的性能特征,從而獲得測試工作負載。
12.根據(jù)權(quán)利要求11的方法,還包括: 在目標數(shù)據(jù)庫上執(zhí)行所述測試工作負載,以針對目標數(shù)據(jù)庫進行測試。
13.根據(jù)權(quán)利要求11的方法,其中,所述收集源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性包括僅收集所述工作負載中包含的原數(shù)據(jù)庫語句所涉及的、源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性。
14.根據(jù)權(quán)利要求11的方法,其中,所述相似的性能特征是指相似的謂詞過濾因子。
15.根據(jù)權(quán)利要求11的方法,其中,所述數(shù)據(jù)分布統(tǒng)計特性包括數(shù)據(jù)庫表的列中的數(shù)據(jù)的最大值、最小值、基數(shù)和大小,或者數(shù)據(jù)庫表的列中的數(shù)據(jù)中出現(xiàn)頻率最高的若干數(shù)值各自的出現(xiàn)頻率以及由所述數(shù)值劃分的每個數(shù)據(jù)段的最大值、最小值、基數(shù)和大小。
16.根據(jù)權(quán)利要求11的方法,還包括: 獲得在源系統(tǒng)上原數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系; 且其中,所述在目標數(shù)據(jù)庫中生成具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù)進一步包括:在目標數(shù)據(jù)庫中生成滿足或基本滿足所述與選擇率有關(guān)的約束關(guān)系且具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù)。
17.根據(jù)權(quán)利要求16的方法,其中,所述數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系包括與原數(shù)據(jù)庫語句中涉及同一數(shù)據(jù)庫表的多個列的多個謂詞的過濾因子有關(guān)的約束關(guān)系; 且其中,所述生成滿足所述與選擇率有關(guān)的約束關(guān)系且具有相似數(shù)據(jù)分布統(tǒng)計特征的數(shù)據(jù)進一步包括:首先生成滿足或基本滿足涉及較多列的謂詞或謂詞組合的過濾因子的數(shù)據(jù),然后生成滿足或基本滿足涉及較少列的謂詞或謂詞組合的過濾因子的數(shù)據(jù)。
18.根據(jù)權(quán)利要求16的方法,其中,所述原數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系包括與數(shù)據(jù)庫語句中涉及具有聯(lián)結(jié)關(guān)系的多個數(shù)據(jù)庫表的多個列的謂詞的過濾因子有關(guān)的約束關(guān)系; 且其中,所述生成滿足所述與選擇率有關(guān)且具有相似數(shù)據(jù)分布統(tǒng)計特性的約束關(guān)系的數(shù)據(jù)進一步包括:使在目標數(shù)據(jù)庫中生成的數(shù)據(jù)滿足或基本滿足所述謂詞的過濾因子。
19.根據(jù)權(quán)利要求16的方法,還包括: 將數(shù)據(jù)庫語句中的謂詞和謂詞組合按照所涉及的數(shù)據(jù)庫表的列劃分為不同類別; 計算不同類別的謂詞和謂詞組合在數(shù)據(jù)庫語句中的出現(xiàn)頻率; 且其中,所述獲得源系統(tǒng)上數(shù)據(jù)庫語句所涉及的數(shù)據(jù)的與選擇率有關(guān)的約束關(guān)系的步驟包括僅獲得屬于出現(xiàn)頻率較高的類別的謂詞和謂詞組合的過濾因子。
20.根據(jù)權(quán)利要求11的方法,其中,修改至少部分所捕獲的數(shù)據(jù)庫語句進一步包括: 針對包含聯(lián)結(jié)關(guān)系的數(shù)據(jù)庫語句,通過將其中的本地謂詞刪除,將本地謂詞中涉及的數(shù)據(jù)庫表的列添加到SELECT子句獲得修改的數(shù)據(jù)庫語句; 通過針對目標數(shù)據(jù)庫執(zhí)行所述修改的數(shù)據(jù)庫語句獲得結(jié)果集; 在結(jié)果集中尋找選擇率與所述本地謂詞在源數(shù)據(jù)庫上的單獨及組合過濾因子相近的列值; 以及 使用所述列值替換所述包含聯(lián)結(jié)關(guān)系的數(shù)據(jù)庫語句中的本地謂詞的常量值。
全文摘要
公開了一種用于生成數(shù)據(jù)庫的測試工作負載的系統(tǒng)和方法,該系統(tǒng)包括工作負載捕獲模塊,被配置為捕獲源系統(tǒng)上包含針對源數(shù)據(jù)庫發(fā)出的原數(shù)據(jù)庫語句的工作負載;元信息收集模塊,被配置為收集源數(shù)據(jù)庫中的數(shù)據(jù)模式和數(shù)據(jù)分布統(tǒng)計特性;數(shù)據(jù)生成模塊,被配置為根據(jù)所述收集的源數(shù)據(jù)庫中的數(shù)據(jù)模式在目標數(shù)據(jù)庫中創(chuàng)建具有相同數(shù)據(jù)模式的數(shù)據(jù)對象,以及根據(jù)所述收集的數(shù)據(jù)分布統(tǒng)計特性在目標數(shù)據(jù)庫中生成具有相似數(shù)據(jù)分布統(tǒng)計特性的數(shù)據(jù);以及語句修改模塊,被配置為修改所捕獲的工作負載中的至少部分原數(shù)據(jù)庫語句,以使得修改后的數(shù)據(jù)庫語句在目標數(shù)據(jù)庫上的執(zhí)行具有所述原數(shù)據(jù)庫語句在源數(shù)據(jù)庫上的執(zhí)行的相似的性能特征,從而獲得測試工作負載。
文檔編號G06F17/30GK103176973SQ201110429529
公開日2013年6月26日 申請日期2011年12月20日 優(yōu)先權(quán)日2011年12月20日
發(fā)明者傅毓勤, 魏可偉, M·申克爾, 劉恒, 李碩, 楊新穎 申請人:國際商業(yè)機器公司