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