本發(fā)明涉及測試領域,尤其涉及一種數(shù)據(jù)庫腳本運行異常檢測的方法及系統(tǒng)。
背景技術:
在數(shù)據(jù)校驗的過程中,不同測試工程師因為對業(yè)務和表結構的認識程度不同及對數(shù)據(jù)庫語言掌握不同所編寫的腳本執(zhí)行效率存在差異,為了保障測試腳本的執(zhí)行效率、當測試腳本運行異常時縮短測試工程師在腳本優(yōu)化及解決異常問題方面的耗時,需要能夠自動預估數(shù)據(jù)庫腳本在正常運行環(huán)境下的執(zhí)行時長,比較數(shù)據(jù)庫腳本在實際運行環(huán)境中的實際執(zhí)行時長,并給予測試工程師針對性解決異常問題建議的自動化工具,從而提高測試工程師的工作效率。
技術實現(xiàn)要素:
本發(fā)明所要解決的技術問題是:提供一種數(shù)據(jù)庫腳本運行異常檢測的方法及系統(tǒng),能夠及時獲取數(shù)據(jù)庫腳本運行異常信息并定位出現(xiàn)異常的數(shù)據(jù)庫語句。
為了解決上述技術問題,本發(fā)明采用的技術方案為:
本發(fā)明提供一種數(shù)據(jù)庫腳本運行異常檢測方法,包括:
解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到關鍵字和運算符;
從預設復雜度評級表中分別獲取所述關鍵字和所述運算符對應的響應時長;
根據(jù)所述響應時長計算得到所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長;
比較所述數(shù)據(jù)庫語句的實際執(zhí)行時長和所述常規(guī)執(zhí)行時長,得到比較結果。
上述的數(shù)據(jù)庫腳本運行異常檢測方法,其有益效果在于:通過解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到所述數(shù)據(jù)庫語句中包含的關鍵字和運算符。其中,關鍵字和運算符是影響數(shù)據(jù)庫語句執(zhí)行速度的關鍵因素。因此,根據(jù)預設復雜度評級表中所述關鍵字和所述運算符分別對應的響應時長,能夠估算出所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。比較所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和所述數(shù)據(jù)庫語句在實際運行環(huán)境中的實際執(zhí)行時長,若所述實際執(zhí)行時長大于所述常規(guī)執(zhí)行時長,則所述數(shù)據(jù)庫語句運行異常,測試工程師可根據(jù)所述數(shù)據(jù)庫語句排查出現(xiàn)異常的原因。實現(xiàn)及時獲取數(shù)據(jù)庫腳本運行異常信息并定位出現(xiàn)異常的數(shù)據(jù)庫語句。
本發(fā)明還提供一種數(shù)據(jù)庫腳本運行異常檢測系統(tǒng),包括:
第一解析模塊,用于解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到關鍵字和運算符;
獲取模塊,用于從預設復雜度評級表中分別獲取所述關鍵字和所述運算符對應的響應時長;
第一計算模塊,用于根據(jù)所述響應時長計算得到所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長;
比較模塊,用于比較所述數(shù)據(jù)庫語句的實際執(zhí)行時長和所述常規(guī)執(zhí)行時長,得到比較結果。
上述的數(shù)據(jù)庫腳本運行異常檢測系統(tǒng),其有益效果在于:通過第一解析模塊解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到所述數(shù)據(jù)庫語句中包含的關鍵字和運算符。通過獲取模塊獲取預設復雜度評級表中所述關鍵字和所述運算符分別對應的響應時長。通過第一計算模塊計算出執(zhí)行所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。通過比較模塊比較所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和所述數(shù)據(jù)庫語句在實際運行環(huán)境中的實際執(zhí)行時長,若所述實際執(zhí)行時長大于所述常規(guī)執(zhí)行時長,則所述數(shù)據(jù)庫語句運行異常,測試工程師可根據(jù)所述數(shù)據(jù)庫語句排查出現(xiàn)異常的原因。實現(xiàn)及時獲取數(shù)據(jù)庫腳本運行異常信息并定位出現(xiàn)異常的數(shù)據(jù)庫語句。
附圖說明
圖1為本發(fā)明一種數(shù)據(jù)庫腳本運行異常檢測的方法流程框圖;
圖2為本發(fā)明一種數(shù)據(jù)庫腳本運行異常檢測的系統(tǒng)結構框圖;
標號說明:
1、第一解析模塊;2、獲取模塊;3、第一計算模塊;4、比較模塊。
具體實施方式
為詳細說明本發(fā)明的技術內(nèi)容、所實現(xiàn)目的及效果,以下結合實施方式并配合附圖予以說明。
本發(fā)明最關鍵的構思在于:通過比較數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和數(shù)據(jù)庫語句在實際運行環(huán)境中的實際執(zhí)行時長,分析得出所述數(shù)據(jù)庫語句是否處于異常運行狀態(tài)。
請參照圖1至圖2,
如圖1所示,本發(fā)明提供一種數(shù)據(jù)庫腳本運行異常檢測方法,包括:
解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到關鍵字和運算符;
從預設復雜度評級表中分別獲取所述關鍵字和所述運算符對應的響應時長;
根據(jù)所述響應時長計算得到所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長;
比較所述數(shù)據(jù)庫語句的實際執(zhí)行時長和所述常規(guī)執(zhí)行時長,得到比較結果。
進一步地,還包括:
預設索引記錄表;
若在所述預設索引記錄表中存在所述數(shù)據(jù)庫語句中涉及的數(shù)據(jù)表的索引,則所述常規(guī)執(zhí)行時長減少預設優(yōu)化時長。
由上述描述可知,當數(shù)據(jù)庫語句涉及的數(shù)據(jù)表存在索引時,考慮索引對數(shù)據(jù)庫語句執(zhí)行效率的優(yōu)化作用,從而更精確地計算出數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。
進一步地,還包括:
預設數(shù)量級;
預設數(shù)據(jù)表響應時長;所述預設數(shù)據(jù)表響應時長為對數(shù)據(jù)量為所述預設數(shù)量級的數(shù)據(jù)表執(zhí)行數(shù)據(jù)庫簡單語句操作的響應時長;
根據(jù)所述預設數(shù)量級、所述預設數(shù)據(jù)表響應時長和所述數(shù)據(jù)庫語句中涉及的數(shù)據(jù)表的數(shù)量級,得到第一數(shù)據(jù)表響應時長;
所述常規(guī)執(zhí)行時長增加所述第一數(shù)據(jù)表響應時長。
由上述描述可知,當數(shù)據(jù)庫語句涉及的數(shù)據(jù)表的數(shù)量級較大時,會影響數(shù)據(jù)庫語句的實際執(zhí)行時長,考慮數(shù)據(jù)表的數(shù)量級對數(shù)據(jù)庫語句執(zhí)行時長的影響,從而更精確地計算出數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。
進一步地,還包括:
解析數(shù)據(jù)庫腳本,得到嵌套語句;
解析所述嵌套語句為簡單語句集合。
由上述描述可知,由于嵌套語句通常較為復雜,涉及較多的關鍵字、數(shù)據(jù)表和運算符等,將嵌套語句解析為簡單語句集合,有利于定位出現(xiàn)異常的數(shù)據(jù)庫語句具體為簡單語句集合中的一簡單語句。
進一步地,還包括:
若所述比較結果為實際執(zhí)行時長大于所述常規(guī)執(zhí)行時長,則推送數(shù)據(jù)庫腳本運行異常的提示消息;所述提示信息包括所述數(shù)據(jù)庫語句的位置信息、所述實際執(zhí)行時長和所述常規(guī)執(zhí)行時長。
由上述描述可知,相關人員可及時獲知異常信息,并針對異常數(shù)據(jù)庫語句查找相應的異常原因。
進一步地,還包括:
根據(jù)所述比較結果將所述數(shù)據(jù)庫語句分為異常語句和無異常語句兩類,得到分類列表;
根據(jù)數(shù)據(jù)庫腳本中所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和實際執(zhí)行時長生成詳細列表;
根據(jù)所述分類列表和所述詳細列表自動生成數(shù)據(jù)庫腳本的運行報告。
由上述描述可知,相關人員可獲知數(shù)據(jù)庫腳本中各數(shù)據(jù)庫語句的詳細信息,為分析數(shù)據(jù)庫執(zhí)行腳本的效率提供數(shù)據(jù)。
如圖2所示,本發(fā)明還提供一種數(shù)據(jù)庫腳本運行異常檢測系統(tǒng),包括:
第一解析模塊1,用于解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到關鍵字和運算符;
獲取模塊2,用于從預設復雜度評級表中分別獲取所述關鍵字和所述運算符對應的響應時長;
第一計算模塊3,用于根據(jù)所述響應時長計算得到所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長;
比較模塊4,用于比較所述數(shù)據(jù)庫語句的實際執(zhí)行時長和所述常規(guī)執(zhí)行時長,得到比較結果。
進一步地,還包括:
第一預設模塊,用于預設索引記錄表;
減模塊,用于若在所述預設索引記錄表中存在所述數(shù)據(jù)庫語句中涉及的數(shù)據(jù)表的索引,則所述常規(guī)執(zhí)行時長減少預設優(yōu)化時長;
第二預設模塊,用于預設數(shù)量級;
第三預設模塊,用于預設數(shù)據(jù)表響應時長;所述預設數(shù)據(jù)表響應時長為對數(shù)據(jù)量為所述預設數(shù)量級的數(shù)據(jù)表執(zhí)行數(shù)據(jù)庫簡單語句操作的響應時長;
第二計算模塊,用于根據(jù)所述預設數(shù)量級、所述預設數(shù)據(jù)表響應時長和所述數(shù)據(jù)庫語句中涉及的數(shù)據(jù)表的數(shù)量級,得到第一數(shù)據(jù)表響應時長;
加模塊,用于所述常規(guī)執(zhí)行時長增加所述第一數(shù)據(jù)表響應時長。
進一步地,還包括:
第二解析模塊,用于解析數(shù)據(jù)庫腳本,得到嵌套語句;
第三解析模塊,用于解析所述嵌套語句為簡單語句集合。
進一步地,還包括:
推送模塊,用于若所述比較結果為實際執(zhí)行時長大于所述常規(guī)執(zhí)行時長,則推送數(shù)據(jù)庫腳本運行異常的提示消息;所述提示信息包括所述數(shù)據(jù)庫語句的位置信息、所述實際執(zhí)行時長和所述常規(guī)執(zhí)行時長;
分類模塊,用于根據(jù)所述比較結果將所述數(shù)據(jù)庫語句分為異常語句和無異常語句兩類,得到分類列表;
第一生成模塊,用于根據(jù)數(shù)據(jù)庫腳本中所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和實際執(zhí)行時長生成詳細列表;
第二生成模塊,用于根據(jù)所述分類列表和所述詳細列表自動生成數(shù)據(jù)庫腳本的運行報告。
本發(fā)明的實施例一為:
解析數(shù)據(jù)庫腳本,得到嵌套語句;
解析所述嵌套語句為簡單語句集合;
解析所述簡單語句集合中的簡單語句,得到關鍵字和運算符;
從預設復雜度評級表中分別獲取所述關鍵字和所述運算符對應的響應時長;根據(jù)所述響應時長計算得到所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長;
比較所述數(shù)據(jù)庫語句的實際執(zhí)行時長和所述常規(guī)執(zhí)行時長,得到比較結果;
若所述比較結果為實際執(zhí)行時長大于所述常規(guī)執(zhí)行時長,則推送數(shù)據(jù)庫腳本運行異常的提示消息;所述提示信息包括所述數(shù)據(jù)庫語句的位置信息、所述實際執(zhí)行時長和所述常規(guī)執(zhí)行時長。
根據(jù)所述比較結果將所述數(shù)據(jù)庫語句分為異常語句和無異常語句兩類,得到分類列表;
根據(jù)數(shù)據(jù)庫腳本中所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和實際執(zhí)行時長生成詳細列表;
根據(jù)所述分類列表和所述詳細列表自動生成數(shù)據(jù)庫腳本的運行報告。
其中,關鍵字和運算符對應的響應時長是根據(jù)數(shù)據(jù)量級和sql優(yōu)化的經(jīng)驗設置的?;镜亩x原則是會破壞索引導致掃秒全表的關鍵字和運算符對應的響應時長長。例如,where子句中使用?。交?lt;>操作符,或or操作符來連接條件等等,會導致掃描全表。對于不破壞索引的關鍵字和運算符對應的預設的響應時長短,類似union這類的關鍵字不計響應時長。例如,數(shù)據(jù)表的數(shù)量級在10萬的前提下,or關鍵字對應0.6s,LIKE關鍵字對應0.3s,LIKE和'%...'操作符對應0.9s等等。
在掃描數(shù)據(jù)表前,會先檢測數(shù)據(jù)表的數(shù)量級。數(shù)量級按1萬,10萬,100萬劃分,1萬起每增加10倍的數(shù)量響應時長乘以預設的系數(shù)1.2s,不同數(shù)量級根據(jù)系數(shù)的乘次得到不同的響應時長。
由上述描述可知,本實施例實現(xiàn)實時檢測數(shù)據(jù)庫語句在實際運行環(huán)境中的實際執(zhí)行時長,通過比較數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和實際執(zhí)行時長,分析得出所述數(shù)據(jù)庫語句是否處于異常運行狀態(tài),若處于異常運行狀態(tài),則向相關人員發(fā)送提示信息,使測試工程師能夠根據(jù)出現(xiàn)異常的數(shù)據(jù)庫語句快速排查異常原因,提高測試工程師的工作效率。
本發(fā)明的實施例二為:
在實施例一的基礎上,本實施例還包括:
預設索引記錄表;
若在所述預設索引記錄表中存在所述數(shù)據(jù)庫語句中涉及的數(shù)據(jù)表的索引,則所述常規(guī)執(zhí)行時長減少預設優(yōu)化時長;
預設數(shù)量級;
預設數(shù)據(jù)表響應時長;所述預設數(shù)據(jù)表響應時長為對數(shù)據(jù)量為所述預設數(shù)量級的數(shù)據(jù)表執(zhí)行數(shù)據(jù)庫簡單語句操作的響應時長;
根據(jù)所述預設數(shù)量級、所述預設數(shù)據(jù)表響應時長和所述數(shù)據(jù)庫語句中涉及的數(shù)據(jù)表的數(shù)量級,得到第一數(shù)據(jù)表響應時長;
所述常規(guī)執(zhí)行時長增加所述第一數(shù)據(jù)表響應時長。
由上述描述可知,本實施例在實施例一的基礎上可更加精確地計算出數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。
本發(fā)明的實施例三為:
例如:數(shù)據(jù)庫語句為:
select*from XUESHENG_ZZJY where ORGANIZATION_NO='3661000089'and RECORD_YEAR=2016and BUSINESS_TYPE_NO=365and SSZTXFSB=0and ISNULL(TYPE_LAST,”)?。?減少'and gj='中國'and NL=17
union
select*from XUESHENG_ZZJY where ORGANIZATION_NO='3661000089'and RECORD_YEAR=2016and BUSINESS_TYPE_NO=365and SSZTXFSB=0and ISNULL(TYPE_LAST,”)?。?減少'and gj!='中國'and NL=19;
對于并操作(union)的數(shù)據(jù)庫語句,該關鍵字本身不造成開銷,但是2個子句的開銷疊才是完整語句的開銷,所以該語句的常規(guī)執(zhí)行時長=子句A+子句B。該查詢語句可以拆分為2個簡單子句,由于where后面的4個字段是非聚集索引,根據(jù)預設的索引記錄表,減少預設優(yōu)化時長。此外,數(shù)據(jù)表的數(shù)量級是6萬+,屬于1萬量級,計算得該語句的常規(guī)執(zhí)行時長為(+0.25+0.25-0.25)*2=0.5s內(nèi)。
此外,還可對計算得到的常規(guī)執(zhí)行時長進行修正。比如where子句中有類似num>x and num<y的子句,其中num字段的影響被期望修正。此時,可對x和y的范圍大小進行判斷,如果篩選的范圍大于預設的閾值則適當增加時長,否則無需修正。
總的來說,修正可以認為是復雜度評級表計算方式的一種補充,可以不斷補充常規(guī)執(zhí)行時長的計算漏洞,使得計算所得的常規(guī)執(zhí)行時長更加精確。
本發(fā)明的實施例四為:
第一解析模塊解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到關鍵字和運算符;
獲取模塊從預設復雜度評級表中分別獲取所述關鍵字和所述運算符對應的響應時長;
第一計算模塊根據(jù)所述響應時長計算得到所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長;
比較模塊比較所述數(shù)據(jù)庫語句的實際執(zhí)行時長和所述常規(guī)執(zhí)行時長,得到比較結果。
由上述描述可知,本實施例提供一種數(shù)據(jù)庫腳本運行異常檢測的系統(tǒng),實現(xiàn)及時獲取數(shù)據(jù)庫腳本運行異常信息并定位出現(xiàn)異常的數(shù)據(jù)庫語句的功能。
綜上所述,本發(fā)明提供的一種數(shù)據(jù)庫腳本運行異常檢測的方法,通過解析數(shù)據(jù)庫腳本中的數(shù)據(jù)庫語句,得到所述數(shù)據(jù)庫語句中包含的關鍵字和運算符。其中,關鍵字和運算符是影響數(shù)據(jù)庫語句執(zhí)行速度的關鍵因素。因此,根據(jù)預設復雜度評級表中所述關鍵字和所述運算符分別對應的響應時長,能夠估算出所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。比較所述數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長和所述數(shù)據(jù)庫語句在實際運行環(huán)境中的實際執(zhí)行時長,若所述實際執(zhí)行時長大于所述常規(guī)執(zhí)行時長,則所述數(shù)據(jù)庫語句運行異常,測試工程師可根據(jù)所述數(shù)據(jù)庫語句排查出現(xiàn)異常的原因。實現(xiàn)及時獲取數(shù)據(jù)庫腳本運行異常信息并定位出現(xiàn)異常的數(shù)據(jù)庫語句。進一步地,當數(shù)據(jù)庫語句涉及的數(shù)據(jù)表存在索引時,考慮索引對數(shù)據(jù)庫語句執(zhí)行效率的優(yōu)化作用,從而更精確地計算出數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。進一步地,當數(shù)據(jù)庫語句涉及的數(shù)據(jù)表的數(shù)量級較大時,會影響數(shù)據(jù)庫語句的實際執(zhí)行時長,考慮數(shù)據(jù)表的數(shù)量級對數(shù)據(jù)庫語句執(zhí)行時長的影響,從而更精確地計算出數(shù)據(jù)庫語句的常規(guī)執(zhí)行時長。進一步地,由于嵌套語句通常較為復雜,涉及較多的關鍵字、數(shù)據(jù)表和運算符等,將嵌套語句解析為簡單語句集合,有利于定位出現(xiàn)異常的數(shù)據(jù)庫語句具體為簡單語句集合中的一簡單語句。進一步地,測試工程師可及時獲知異常信息,并針對異常數(shù)據(jù)庫語句查找相應的異常原因。進一步地,測試工程師可獲知數(shù)據(jù)庫腳本中各數(shù)據(jù)庫語句的詳細信息,為分析數(shù)據(jù)庫執(zhí)行腳本的效率提供數(shù)據(jù)。本發(fā)明提供一種數(shù)據(jù)庫腳本運行異常檢測的系統(tǒng),實現(xiàn)及時獲取數(shù)據(jù)庫腳本運行異常信息并定位出現(xiàn)異常的數(shù)據(jù)庫語句的功能。
以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等同變換,或直接或間接運用在相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。