本發(fā)明涉及sql檢查
技術(shù)領(lǐng)域:
:,尤指一種sql語句檢查方法及裝置。
背景技術(shù):
::數(shù)據(jù)庫管理系統(tǒng)是操縱和管理數(shù)據(jù)庫的大型軟件,在任何平臺、系統(tǒng)中都是必不可少的,它提供的數(shù)據(jù)操作語言dml(datamanipulationlanguage)可供用戶對數(shù)據(jù)進(jìn)行增刪查改等操作。尤其是在分布式系統(tǒng)和大型應(yīng)用中,數(shù)據(jù)量大,涉及的表多,對于數(shù)據(jù)的操作更為頻繁且邏輯復(fù)雜,所以對于數(shù)據(jù)操作sql語句的編寫要求更高,不同的sql語句,消耗的時間可能有很大的差別,執(zhí)行sql導(dǎo)致全表掃描也是目前遇到的超時、宕機(jī)等問題的原因之一,所以檢索出不匹配索引導(dǎo)致全表掃描的sql極其重要。目前,對于無法匹配索引的sql檢查方法有靜態(tài)代碼掃描和動態(tài)監(jiān)控系統(tǒng),靜態(tài)代碼掃描對于sql語句、參數(shù)的多樣性適應(yīng)性不高,動態(tài)監(jiān)控系統(tǒng)通過時間、內(nèi)存消耗等維度進(jìn)行分析存在一定的誤報,在測試環(huán)境中對于數(shù)據(jù)量較少的表無法準(zhǔn)確定位出來。而對于實際的中大型規(guī)范項目,企業(yè)往往會將涉及的日志規(guī)范的存儲至相應(yīng)的文件,比如對于涉及數(shù)據(jù)操作的sql語句,會統(tǒng)一存儲至某一sql日志文件,并且對于外傳的參數(shù)會將數(shù)據(jù)類型一并打印。技術(shù)實現(xiàn)要素:針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明實施例的主要目的在于提供一種sql語句檢查方法及裝置,實現(xiàn)提高sql語句檢查的完整性和準(zhǔn)確性。為了實現(xiàn)上述目的,本發(fā)明實施例提供一種sql語句檢查方法,所述方法包括:獲取應(yīng)用日志文件,并對所述應(yīng)用日志文件進(jìn)行語句提取,得到文本數(shù)據(jù);其中,所述文本數(shù)據(jù)包括文本語句及傳入?yún)?shù);根據(jù)所述文本語句及所述傳入?yún)?shù),得到所述文本語句對應(yīng)的數(shù)據(jù)信息,并將所述文本語句對應(yīng)的數(shù)據(jù)信息輸入至預(yù)先建立的預(yù)測模型中,得到所述文本語句對應(yīng)的語句預(yù)測結(jié)果;若所述語句預(yù)測結(jié)果為sql語句,則根據(jù)對應(yīng)的文本語句及傳入?yún)?shù)生成完整sql語句;獲取所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,并根據(jù)所述語句預(yù)測結(jié)果及所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,生成語句檢查結(jié)果??蛇x的,在本發(fā)明一實施例中,所述根據(jù)所述文本語句及所述傳入?yún)?shù),得到所述文本語句對應(yīng)的數(shù)據(jù)信息包括:對所述文本語句及所述傳入?yún)?shù)進(jìn)行預(yù)處理;其中,所述預(yù)處理包括文本填充及格式轉(zhuǎn)換;根據(jù)預(yù)設(shè)的字典,對預(yù)處理后的文本語句及傳入?yún)?shù)進(jìn)行文本轉(zhuǎn)換,得到所述文本語句對應(yīng)的數(shù)據(jù)信息。可選的,在本發(fā)明一實施例中,所述預(yù)測模型是通過如下方式建立的:獲取歷史日志文件及其對應(yīng)的預(yù)測結(jié)果,對所述歷史日志文件進(jìn)行語句提取,得到歷史數(shù)據(jù);其中,所述歷史數(shù)據(jù)包括歷史語句及歷史參數(shù);根據(jù)所述歷史語句及所述歷史參數(shù),得到所述歷史語句對應(yīng)的歷史數(shù)據(jù)信息,并根據(jù)所述歷史日志文件對應(yīng)的預(yù)測結(jié)果與所述歷史數(shù)據(jù)信息得到訓(xùn)練樣本;利用所述訓(xùn)練樣本,對初始卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,得到所述預(yù)測模型??蛇x的,在本發(fā)明一實施例中,所述方法還包括:根據(jù)所述語句預(yù)測結(jié)果對所述應(yīng)用日志文件進(jìn)行語句歸類;其中,所述語句預(yù)測結(jié)果還包括非sql語句。本發(fā)明實施例還提供一種sql語句檢查裝置,所述裝置包括:語句提取模塊,用于獲取應(yīng)用日志文件,并對所述應(yīng)用日志文件進(jìn)行語句提取,得到文本數(shù)據(jù);其中,所述文本數(shù)據(jù)包括文本語句及傳入?yún)?shù);預(yù)測結(jié)果模塊,用于根據(jù)所述文本語句及所述傳入?yún)?shù),得到所述文本語句對應(yīng)的數(shù)據(jù)信息,并將所述文本語句對應(yīng)的數(shù)據(jù)信息輸入至預(yù)先建立的預(yù)測模型中,得到所述文本語句對應(yīng)的語句預(yù)測結(jié)果;完整語句模塊,用于若所述語句預(yù)測結(jié)果為sql語句,則根據(jù)對應(yīng)的文本語句及傳入?yún)?shù)生成完整sql語句;檢查結(jié)果模塊,用于獲取所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,并根據(jù)所述語句預(yù)測結(jié)果及所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,生成語句檢查結(jié)果??蛇x的,在本發(fā)明一實施例中,所述預(yù)測結(jié)果模塊包括:預(yù)處理單元,用于對所述文本語句及所述傳入?yún)?shù)進(jìn)行預(yù)處理;其中,所述預(yù)處理包括文本填充及格式轉(zhuǎn)換;數(shù)據(jù)信息單元,用于根據(jù)預(yù)設(shè)的字典,對預(yù)處理后的文本語句及傳入?yún)?shù)進(jìn)行文本轉(zhuǎn)換,得到所述文本語句對應(yīng)的數(shù)據(jù)信息??蛇x的,在本發(fā)明一實施例中,所述裝置還包括:歷史數(shù)據(jù)模塊,用于獲取歷史日志文件及其對應(yīng)的預(yù)測結(jié)果,對所述歷史日志文件進(jìn)行語句提取,得到歷史數(shù)據(jù);其中,所述歷史數(shù)據(jù)包括歷史語句及歷史參數(shù);訓(xùn)練樣本模塊,用于根據(jù)所述歷史語句及所述歷史參數(shù),得到所述歷史語句對應(yīng)的歷史數(shù)據(jù)信息,并根據(jù)所述歷史日志文件對應(yīng)的預(yù)測結(jié)果與所述歷史數(shù)據(jù)信息得到訓(xùn)練樣本;預(yù)測模型模塊,用于利用所述訓(xùn)練樣本,對初始卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,得到所述預(yù)測模型??蛇x的,在本發(fā)明一實施例中,所述裝置還包括:語句歸類模塊,用于根據(jù)所述語句預(yù)測結(jié)果對所述應(yīng)用日志文件進(jìn)行語句歸類;其中,所述語句預(yù)測結(jié)果還包括非sql語句。本發(fā)明還提供一種電子設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機(jī)程序,所述處理器執(zhí)行所述程序時實現(xiàn)上述方法。本發(fā)明還提供一種計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可讀存儲介質(zhì)存儲有執(zhí)行上述方法的計算機(jī)程序。本發(fā)明通過分析應(yīng)用日志文件得到文本語句,結(jié)合預(yù)測模型及執(zhí)行計劃結(jié)果對文本語句進(jìn)行預(yù)測,以此對應(yīng)用日志文件中的語句是否為非sql語句進(jìn)行判斷,減少其導(dǎo)致的全表掃描的隱患,同時擺脫靜態(tài)代碼掃描的配置依賴,相較動態(tài)監(jiān)控更具有針對性,降低誤報率。附圖說明為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1為本發(fā)明實施例一種sql語句檢查方法的流程圖;圖2為本發(fā)明實施例中得到數(shù)據(jù)信息的流程圖;圖3為本發(fā)明實施例中建立預(yù)測模型的流程圖;圖4為本發(fā)明一具體實施例中sql語句檢查方法的流程圖;圖5為本發(fā)明一具體實施例中預(yù)測模型訓(xùn)練示意圖;圖6為本發(fā)明另一具體實施例中預(yù)測模型訓(xùn)練過程示意圖;圖7為本發(fā)明實施例一種sql語句檢查裝置的結(jié)構(gòu)示意圖;圖8為本發(fā)明實施例中預(yù)測結(jié)果模塊的結(jié)構(gòu)示意圖;圖9為本發(fā)明一具體實施例中sql語句檢查裝置的結(jié)構(gòu)示意圖;圖10為本發(fā)明另一具體實施例中sql語句檢查裝置的結(jié)構(gòu)示意圖;圖11為本發(fā)明一實施例所提供的電子設(shè)備的結(jié)構(gòu)示意圖。具體實施方式本發(fā)明實施例提供一種sql語句檢查方法及裝置,可用于金融領(lǐng)域或其他領(lǐng)域,需要說明的是,本發(fā)明的sql語句檢查方法及裝置可用于金融領(lǐng)域,也可用于除金融領(lǐng)域之外的任意領(lǐng)域,本發(fā)明的sql語句檢查方法及裝置應(yīng)用領(lǐng)域不做限定。下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。如圖1所示為本發(fā)明實施例一種sql語句檢查方法的流程圖,本發(fā)明實施例提供的sql語句檢查方法的執(zhí)行主體包括但不限于計算機(jī)。圖中所示方法包括:步驟s1,獲取應(yīng)用日志文件,并對所述應(yīng)用日志文件進(jìn)行語句提取,得到文本數(shù)據(jù);其中,所述文本數(shù)據(jù)包括文本語句及傳入?yún)?shù)。其中,通過程序或者手工方式從應(yīng)用部署的服務(wù)器獲取應(yīng)用日志文件,利用正則表達(dá)式對應(yīng)用產(chǎn)生的日志文件中的文本語句及傳入?yún)?shù)進(jìn)行提取,刪除無用的語句,比如日志中的時間節(jié)點等。進(jìn)一步的,對應(yīng)用日志文件中的語句進(jìn)行提取,得到文本數(shù)據(jù),文本數(shù)據(jù)包括文本語句和傳入?yún)?shù)的數(shù)據(jù)信息。文本數(shù)據(jù)具體如下所示:selectafromtablewherecol1=?andcol2=?params:(string)c1,(integer)2其中,c1、2即為傳入?yún)?shù),傳入的類型為string、integer。步驟s2,根據(jù)所述文本語句及所述傳入?yún)?shù),得到所述文本語句對應(yīng)的數(shù)據(jù)信息,并將所述文本語句對應(yīng)的數(shù)據(jù)信息輸入至預(yù)先建立的預(yù)測模型中,得到所述文本語句對應(yīng)的語句預(yù)測結(jié)果。其中,對文本語句和傳入?yún)?shù)進(jìn)行預(yù)處理,包括文本填充及格式變換等,并對預(yù)處理之后的文本語句和傳入?yún)?shù)輸入并存儲。具體的,將文本語句以空格分割存儲在列表list中,將每段短文本處理為同一長度,缺失部分可用某一特定文本填充,之后創(chuàng)建詞典或利用已創(chuàng)建的詞典,為文本語句中每一個單詞附上一個整數(shù)的編號。進(jìn)一步的,把文本信息根據(jù)字典編號替換成數(shù)值信息,得到文本語句對應(yīng)的數(shù)據(jù)信息。具體的,假設(shè)現(xiàn)在有語句:selectaccnofromtablewherecardno=?params:(string)*其中,參數(shù)語句即為“(string)*”,可以空格為分隔符得到長度為8的list集合和長度為1的參數(shù)集合,缺失部分可用</p>填充,得到:[’select’,’accno’,’from’,’table’,’where’,’cardno’,’=’,’?’],[‘(string)*’]創(chuàng)建詞典,對于新出現(xiàn)的詞匯會依次累加字典值,豐富詞典,如下:{’</p>’:0,”select’:1,’delete’:2,’update’:3,’cardno’:4,’from’:5,’where’:6,’order’:7,’group’:8,’by’:9,’accno’:10,’=’:11,’table’:12,’?’:13,’and’:14,’date’:15,‘(string)*’:16},將文本轉(zhuǎn)換為數(shù)值信息如:[1,10,5,12,6,4,11,13],[0,0,0,0,0,0,0,16]。進(jìn)一步的,將文本語句對應(yīng)的數(shù)據(jù)信息輸入至預(yù)先建立的預(yù)測模型中,得到文本語句對應(yīng)的語句預(yù)測結(jié)果。具體的,預(yù)測模型是利用卷積神經(jīng)網(wǎng)絡(luò)建立的,用于預(yù)測文本語句是否為sql語句,即預(yù)測結(jié)果為sql語句或非sql語句。步驟s3,若所述語句預(yù)測結(jié)果為sql語句,則根據(jù)對應(yīng)的文本語句及傳入?yún)?shù)生成完整sql語句。其中,若語句預(yù)測結(jié)果為sql語句,則根據(jù)文本語句以及傳入?yún)?shù)的類型,拼接得到完整的sql語句。具體的,由于sql字段的基本類型有12種,可提前根據(jù)類型進(jìn)行參數(shù)配置。比如string類型,可自行設(shè)置參數(shù)為“abc”等,integer類型,可自行設(shè)置1等,date類型,可自行設(shè)置為now()等。步驟s4,獲取所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,并根據(jù)所述語句預(yù)測結(jié)果及所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,生成語句檢查結(jié)果其中,獲取各應(yīng)用具有對應(yīng)的數(shù)據(jù)庫信息,包括url、用戶、密碼等,結(jié)合完整sql語句,對sql語句進(jìn)行執(zhí)行計劃結(jié)果獲取。執(zhí)行計劃結(jié)果是指一條sql語句的執(zhí)行過程或訪問路徑的描述。通過執(zhí)行計劃結(jié)果可以分析出sql語句的性能問題。具體的,實際中可通過工具執(zhí)行explain+sql語句得到結(jié)果。此處可通過程序代碼進(jìn)行獲取,如下:class.foename(“com.mysql.jdbc.driver”);//加載驅(qū)動connetionconn=drivermanager.getconnection(url,用戶名,密碼);//建立數(shù)據(jù)庫連接,獲取連接對象statementstat=conn.createstatement();//創(chuàng)建statement對象resultsetrs=stat.executequery(explain+sql語句);//獲取sql執(zhí)行計劃結(jié)果進(jìn)一步的,對于執(zhí)行計劃結(jié)果中的訪問類型type為all(全表掃描),或者索引key為null的sql語句,生成的語句檢查結(jié)果為異常sql語句。作為本發(fā)明的一個實施例,如圖2所示,根據(jù)所述文本語句及所述傳入?yún)?shù),得到所述文本語句對應(yīng)的數(shù)據(jù)信息包括:步驟s21,對所述文本語句及所述傳入?yún)?shù)進(jìn)行預(yù)處理;其中,所述預(yù)處理包括文本填充及格式轉(zhuǎn)換;步驟s22,根據(jù)預(yù)設(shè)的字典,對預(yù)處理后的文本語句及傳入?yún)?shù)進(jìn)行文本轉(zhuǎn)換,得到所述文本語句對應(yīng)的數(shù)據(jù)信息。其中,對文本語句和傳入?yún)?shù)進(jìn)行預(yù)處理,包括文本填充及格式變換等,并對預(yù)處理之后的文本語句和傳入?yún)?shù)輸入并存儲。具體的,將文本語句以空格分割存儲在列表list中,將每段短文本處理為同一長度,缺失部分可用某一特定文本填充,之后創(chuàng)建詞典或利用已創(chuàng)建的詞典,為文本語句中每一個單詞附上一個整數(shù)的編號。進(jìn)一步的,把文本信息根據(jù)字典編號替換成數(shù)值信息,得到文本語句對應(yīng)的數(shù)據(jù)信息。具體的,假設(shè)現(xiàn)在有語句:selectaccnofromtablewherecardno=?params:(string)*其中,參數(shù)語句即為“(string)*”,可以空格為分隔符得到長度為8的list集合和長度為1的參數(shù)集合,缺失部分可用</p>填充,得到:[’select’,’accno’,’from’,’table’,’where’,’cardno’,’=’,’?’],[‘(string)*’]創(chuàng)建詞典,對于新出現(xiàn)的詞匯會依次累加字典值,豐富詞典,如下:{’</p>’:0,”select’:1,’delete’:2,’update’:3,’cardno’:4,’from’:5,’where’:6,’order’:7,’group’:8,’by’:9,’accno’:10,’=’:11,’table’:12,’?’:13,’and’:14,’date’:15,‘(string)*’:16},將文本轉(zhuǎn)換為數(shù)值信息如:[1,10,5,12,6,4,11,13],[0,0,0,0,0,0,0,16]。作為本發(fā)明的一個實施例,如圖3所示,預(yù)測模型是通過如下方式建立的:步驟s31,獲取歷史日志文件及其對應(yīng)的預(yù)測結(jié)果,對所述歷史日志文件進(jìn)行語句提取,得到歷史數(shù)據(jù);其中,所述歷史數(shù)據(jù)包括歷史語句及歷史參數(shù);步驟s32,根據(jù)所述歷史語句及所述歷史參數(shù),得到所述歷史語句對應(yīng)的歷史數(shù)據(jù)信息,并根據(jù)所述歷史日志文件對應(yīng)的預(yù)測結(jié)果與所述歷史數(shù)據(jù)信息得到訓(xùn)練樣本;步驟s33,利用所述訓(xùn)練樣本,對初始卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,得到所述預(yù)測模型。其中,與應(yīng)用日志文件處理過程類似的,通過程序或者手工方式獲取歷史日志文件,利用正則表達(dá)式對歷史日志文件中的歷史語句及歷史參數(shù)進(jìn)行提取,刪除無用的語句,比如日志中的時間節(jié)點等。進(jìn)一步的,對歷史日志文件中的語句進(jìn)行提取,得到歷史數(shù)據(jù),歷史數(shù)據(jù)包括歷史語句和歷史參數(shù)的數(shù)據(jù)信息。對歷史日志文件對應(yīng)的預(yù)測結(jié)果與歷史數(shù)據(jù)信息進(jìn)行特征提取等處理,得到訓(xùn)練樣本。具體的,訓(xùn)練樣本包括sql常規(guī)的增、刪、改、查操作的語句,傳入?yún)?shù)類型包括string、integer、date、long等。利用訓(xùn)練樣本,對初始卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,得到預(yù)測模型。作為本發(fā)明的一個實施例,方法還包括:根據(jù)所述語句預(yù)測結(jié)果對所述應(yīng)用日志文件進(jìn)行語句歸類;其中,所述語句預(yù)測結(jié)果還包括非sql語句。其中,對執(zhí)行計劃結(jié)果出現(xiàn)異常的sql語句歸類為異常sql語句,以及對語句預(yù)測結(jié)果中非sql語句冶歸類為異常sql語句。利用異常sql語句再次對預(yù)測模型進(jìn)行訓(xùn)練,自學(xué)習(xí)優(yōu)化進(jìn)行模型更新。進(jìn)一步的,對于執(zhí)行出錯的sql語句會自動輸出至另一文件中,同時標(biāo)記為異常sql的語句,掃描結(jié)束之后會將此文件中的語句作為負(fù)樣本再自學(xué)習(xí),訓(xùn)練得到更新的模型。在本發(fā)明一個具體實施例中,如圖4所示為本發(fā)明一具體實施例中sql語句檢查方法的流程圖,具體包括:1、由于目前的日志數(shù)據(jù)較多,所以一般情況下會對應(yīng)用測試環(huán)境中產(chǎn)生的日志進(jìn)行日清,所以可以通過手工或者程序定時獲取日志文件,利用正則表達(dá)式將日志文件中的日志語句提取出來,同時利用正則表達(dá)式將傳入?yún)?shù)如:(string)123、(integer)12替換為(string)*,(integer)*。2、數(shù)據(jù)預(yù)處理,采集sql語句和傳入?yún)?shù)作為原始數(shù)據(jù),作為待處理的文本sql數(shù)據(jù)集。根據(jù)sql語句和參數(shù)經(jīng)過預(yù)處理、格式變換之后輸入并存儲。具體的,將文本以空格分割存儲在列表list中,首先將每段短文本處理為同一長度,缺失部分可用某一特定文本填充,之后創(chuàng)建詞典,為每一個單詞附上一個整數(shù)的編號,最后把文本信息根據(jù)字典編號替換成數(shù)值信息。具體的,假設(shè)現(xiàn)在有語句selectaccnofromtablewherecardno=?params:(string)*其中,參數(shù)語句即為“(string)*”,可以空格為分隔符得到長度為8的list集合和長度為1的參數(shù)集合,缺失部分可用</p>填充,得到:[’select’,’accno’,’from’,’table’,’where’,’cardno’,’=’,’?’],[‘(string)*’]創(chuàng)建詞典,對于新出現(xiàn)的詞匯會依次累加字典值,豐富詞典,如下:{’</p>’:0,”select’:1,’delete’:2,’update’:3,’cardno’:4,’from’:5,’where’:6,’order’:7,’group’:8,’by’:9,’accno’:10,’=’:11,’table’:12,’?’:13,’and’:14,’date’:15,‘(string)*’:16},將文本轉(zhuǎn)換為數(shù)值信息如下:[1,10,5,12,6,4,11,13],[0,0,0,0,0,0,0,16]。3、利用卷積神經(jīng)網(wǎng)絡(luò)對采集的數(shù)據(jù)樣本預(yù)處理得到數(shù)值信息之后進(jìn)行訓(xùn)練,數(shù)據(jù)樣本包括sql常規(guī)的增、刪、改、查操作的語句,傳入?yún)?shù)類型包括string、integer、date、long等,模型訓(xùn)練示意圖如圖5所示,其過程如圖6所示。步驟3.1:根據(jù)步驟2的處理,輸入數(shù)據(jù)轉(zhuǎn)換成固定長度m,文本涉及的詞匯個數(shù)n,所以嵌入層處理后數(shù)據(jù)格式為[n,m],設(shè)置s個濾波器與數(shù)據(jù)進(jìn)行卷積運算,得到特征圖。具體的,設(shè)置嵌入層的固定長度為m=5,比如上述例子中的sql語句,涉及詞匯9個,所以可得到尺寸大小為[9,5]的矩陣數(shù)據(jù),此時可設(shè)置寬度與數(shù)據(jù)列數(shù)一致,高度分別為4、3、2各兩個的6個濾波器filter1、filter2、filter3,如下:當(dāng)步長設(shè)置為1時,進(jìn)行卷積運算之后分別輸出結(jié)果為[4,1][5,1][6,1]的特征圖。步驟3.2:進(jìn)行特征提取,為縮小矩陣的尺寸大小,對矩陣數(shù)據(jù)進(jìn)行壓縮,保留重要信息,此處再添加池化層。同時為減少鄰域大小受限造成的估計值方差增大的影響,和卷積層參數(shù)誤差造成估計均值的偏移,采用隨機(jī)池化,具體過程如下:步驟3.2.1:對矩陣中的元素同時除以元素之和,得到概率矩陣,其每個元素值表示對應(yīng)位置處值的概率;步驟3.2.2:按照概率隨機(jī)選中矩陣中的元素,池化結(jié)果就是對應(yīng)原矩陣的元素值。步驟3.3:加入全連接層,將步驟3.2得到的二維矩陣數(shù)據(jù)進(jìn)行扁平化處理,得到一維矩陣數(shù)據(jù),然后乘以權(quán)重weight求和,加偏置σ,經(jīng)過激活函數(shù)處理,此處選用relu激活函數(shù)梯度下降法優(yōu)化權(quán)重,最后進(jìn)行數(shù)據(jù)歸一化,輸出是否為sql語句的概率,如公式,其中x表示樣本向量,j表示分類的類別,k表示輸出值個數(shù)。4、對應(yīng)用的日志文件進(jìn)行掃描將文件中的每一行文本信息轉(zhuǎn)換為數(shù)值信息,根據(jù)步驟3中獲得的預(yù)測模型對數(shù)值信息進(jìn)行預(yù)測。如:selectafromtablewherecol1=?andcol2=?(string)*,(integer)*此時預(yù)測結(jié)果為是sql語句,則可得sql:selectafromtablewherecol1=(string)*andcol2=(integer)*??赏ㄟ^程序代碼對語句進(jìn)行替換處理得到完整的sql語句:selectafromtablewherecol1=”123”andcol2=123,然后對sql的執(zhí)行計劃結(jié)果進(jìn)行獲取。對于訪問類型type為all(全表掃描),或者索引key為null的sql語句,會輸出至結(jié)果文件。程序代碼如下:class.forname(“com.mysql.jdbc.driver”);//加載驅(qū)動connetionconn=drivermanager.getconnection(url,用戶名,密碼);//建立數(shù)據(jù)庫連接,獲取連接對象statementstat=conn.createstatement();//創(chuàng)建statement對象resultsetrs=stat.executequery(explain+sql語句);//獲取sql執(zhí)行計劃結(jié)果5、對步驟4中執(zhí)行計劃結(jié)果出現(xiàn)異常的語句歸類為異常sql語句,再次進(jìn)行訓(xùn)練,自學(xué)習(xí)優(yōu)化得到新模型。本發(fā)明通過分析應(yīng)用日志文件得到文本語句,結(jié)合預(yù)測模型及執(zhí)行計劃結(jié)果對文本語句進(jìn)行預(yù)測,以此對應(yīng)用日志文件中的語句是否為非sql語句進(jìn)行判斷,減少其導(dǎo)致的全表掃描的隱患,同時擺脫靜態(tài)代碼掃描的配置依賴,相較動態(tài)監(jiān)控更具有針對性,降低誤報率。如圖7所示為本發(fā)明實施例一種sql語句檢查裝置的結(jié)構(gòu)示意圖,圖中所示裝置包括:語句提取模塊10,用于獲取應(yīng)用日志文件,并對所述應(yīng)用日志文件進(jìn)行語句提取,得到文本數(shù)據(jù);其中,所述文本數(shù)據(jù)包括文本語句及傳入?yún)?shù)。其中,通過程序或者手工方式從應(yīng)用部署的服務(wù)器獲取應(yīng)用日志文件,利用正則表達(dá)式對應(yīng)用產(chǎn)生的日志文件中的文本語句及傳入?yún)?shù)進(jìn)行提取,刪除無用的語句,比如日志中的時間節(jié)點等。進(jìn)一步的,對應(yīng)用日志文件中的語句進(jìn)行提取,得到文本數(shù)據(jù),文本數(shù)據(jù)包括文本語句和傳入?yún)?shù)的數(shù)據(jù)信息。文本數(shù)據(jù)具體如下所示:selectafromtablewherecol1=?andcol2=?params:(string)c1,(integer)2其中,c1、2即為傳入?yún)?shù),傳入的類型為string、integer。預(yù)測結(jié)果模塊20,用于根據(jù)所述文本語句及所述傳入?yún)?shù),得到所述文本語句對應(yīng)的數(shù)據(jù)信息,并將所述文本語句對應(yīng)的數(shù)據(jù)信息輸入至預(yù)先建立的預(yù)測模型中,得到所述文本語句對應(yīng)的語句預(yù)測結(jié)果。其中,對文本語句和傳入?yún)?shù)進(jìn)行預(yù)處理,包括文本填充及格式變換等,并對預(yù)處理之后的文本語句和傳入?yún)?shù)輸入并存儲。具體的,將文本語句以空格分割存儲在列表list中,將每段短文本處理為同一長度,缺失部分可用某一特定文本填充,之后創(chuàng)建詞典或利用已創(chuàng)建的詞典,為文本語句中每一個單詞附上一個整數(shù)的編號。進(jìn)一步的,把文本信息根據(jù)字典編號替換成數(shù)值信息,得到文本語句對應(yīng)的數(shù)據(jù)信息。具體的,假設(shè)現(xiàn)在有語句:selectaccnofromtablewherecardno=?params:(string)*其中,參數(shù)語句即為“(string)*”,可以空格為分隔符得到長度為8的list集合和長度為1的參數(shù)集合,缺失部分可用</p>填充,得到:[’select’,’accno’,’from’,’table’,’where’,’cardno’,’=’,’?’],[‘(string)*’]創(chuàng)建詞典,對于新出現(xiàn)的詞匯會依次累加字典值,豐富詞典,如下:{’</p>’:0,”select’:1,’delete’:2,’update’:3,’cardno’:4,’from’:5,’where’:6,’order’:7,’group’:8,’by’:9,’accno’:10,’=’:11,’table’:12,’?’:13,’and’:14,’date’:15,‘(string)*’:16},將文本轉(zhuǎn)換為數(shù)值信息如:[1,10,5,12,6,4,11,13],[0,0,0,0,0,0,0,16]。進(jìn)一步的,將文本語句對應(yīng)的數(shù)據(jù)信息輸入至預(yù)先建立的預(yù)測模型中,得到文本語句對應(yīng)的語句預(yù)測結(jié)果。具體的,預(yù)測模型是利用卷積神經(jīng)網(wǎng)絡(luò)建立的,用于預(yù)測文本語句是否為sql語句,即預(yù)測結(jié)果為sql語句或非sql語句。完整語句模塊30,用于若所述語句預(yù)測結(jié)果為sql語句,則根據(jù)對應(yīng)的文本語句及傳入?yún)?shù)生成完整sql語句。其中,其中,若語句預(yù)測結(jié)果為sql語句,則根據(jù)文本語句以及傳入?yún)?shù)的類型,拼接得到完整的sql語句。具體的,由于sql字段的基本類型有12種,可提前根據(jù)類型進(jìn)行參數(shù)配置。比如string類型,可自行設(shè)置參數(shù)為“abc”等,integer類型,可自行設(shè)置1等,date類型,可自行設(shè)置為now()等。檢查結(jié)果模塊40,用于獲取所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,并根據(jù)所述語句預(yù)測結(jié)果及所述完整sql語句對應(yīng)的執(zhí)行計劃結(jié)果,生成語句檢查結(jié)果。其中,獲取各應(yīng)用具有對應(yīng)的數(shù)據(jù)庫信息,包括url、用戶、密碼等,結(jié)合完整sql語句,對sql語句進(jìn)行執(zhí)行計劃結(jié)果獲取。執(zhí)行計劃結(jié)果是指一條sql語句的執(zhí)行過程或訪問路徑的描述。通過執(zhí)行計劃結(jié)果可以分析出sql語句的性能問題。具體的,實際中可通過工具執(zhí)行explain+sql語句得到結(jié)果。此處可通過程序代碼進(jìn)行獲取,如下:class.foename(“com.mysql.jdbc.driver”);//加載驅(qū)動connetionconn=drivermanager.getconnection(url,用戶名,密碼);//建立數(shù)據(jù)庫連接,獲取連接對象statementstat=conn.createstatement();//創(chuàng)建statement對象resultsetrs=stat.executequery(explain+sql語句);//獲取sql執(zhí)行計劃結(jié)果進(jìn)一步的,對于執(zhí)行計劃結(jié)果中的訪問類型type為all(全表掃描),或者索引key為null的sql語句,生成的語句檢查結(jié)果為異常sql語句。作為本發(fā)明的一個實施例,如圖8所示,所述預(yù)測結(jié)果模塊20包括:預(yù)處理單元21,用于對所述文本語句及所述傳入?yún)?shù)進(jìn)行預(yù)處理;其中,所述預(yù)處理包括文本填充及格式轉(zhuǎn)換;數(shù)據(jù)信息單元22,用于根據(jù)預(yù)設(shè)的字典,對預(yù)處理后的文本語句及傳入?yún)?shù)進(jìn)行文本轉(zhuǎn)換,得到所述文本語句對應(yīng)的數(shù)據(jù)信息。作為本發(fā)明的一個實施例,如圖9所示,所述裝置還包括:歷史數(shù)據(jù)模塊50,用于獲取歷史日志文件及其對應(yīng)的預(yù)測結(jié)果,對所述歷史日志文件進(jìn)行語句提取,得到歷史數(shù)據(jù);其中,所述歷史數(shù)據(jù)包括歷史語句及歷史參數(shù);訓(xùn)練樣本模塊60,用于根據(jù)所述歷史語句及所述歷史參數(shù),得到所述歷史語句對應(yīng)的歷史數(shù)據(jù)信息,并根據(jù)所述歷史日志文件對應(yīng)的預(yù)測結(jié)果與所述歷史數(shù)據(jù)信息得到訓(xùn)練樣本;預(yù)測模型模塊70,用于利用所述訓(xùn)練樣本,對初始卷積神經(jīng)網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,得到所述預(yù)測模型。作為本發(fā)明的一個實施例,如圖10所示,所述裝置還包括:語句歸類模塊80,用于根據(jù)所述語句預(yù)測結(jié)果對所述應(yīng)用日志文件進(jìn)行語句歸類;其中,所述語句預(yù)測結(jié)果還包括非sql語句?;谂c上述一種sql語句檢查方法相同的申請構(gòu)思,本發(fā)明還提供了上述一種sql語句檢查裝置。由于該一種sql語句檢查裝置解決問題的原理與一種sql語句檢查方法相似,因此該一種sql語句檢查裝置的實施可以參見一種sql語句檢查方法的實施,重復(fù)之處不再贅述。本發(fā)明通過分析應(yīng)用日志文件得到文本語句,結(jié)合預(yù)測模型及執(zhí)行計劃結(jié)果對文本語句進(jìn)行預(yù)測,以此對應(yīng)用日志文件中的語句是否為非sql語句進(jìn)行判斷,減少其導(dǎo)致的全表掃描的隱患,同時擺脫靜態(tài)代碼掃描的配置依賴,相較動態(tài)監(jiān)控更具有針對性,降低誤報率。本發(fā)明還提供一種電子設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機(jī)程序,所述處理器執(zhí)行所述程序時實現(xiàn)上述方法。本發(fā)明還提供一種計算機(jī)可讀存儲介質(zhì),所述計算機(jī)可讀存儲介質(zhì)存儲有執(zhí)行上述方法的計算機(jī)程序。如圖11所示,該電子設(shè)備600還可以包括:通信模塊110、輸入單元120、音頻處理單元130、顯示器160、電源170。值得注意的是,電子設(shè)備600也并不是必須要包括圖11中所示的所有部件;此外,電子設(shè)備600還可以包括圖11中沒有示出的部件,可以參考現(xiàn)有技術(shù)。如圖11所示,中央處理器100有時也稱為控制器或操作控件,可以包括微處理器或其他處理器裝置和/或邏輯裝置,該中央處理器100接收輸入并控制電子設(shè)備600的各個部件的操作。其中,存儲器140,例如可以是緩存器、閃存、硬驅(qū)、可移動介質(zhì)、易失性存儲器、非易失性存儲器或其它合適裝置中的一種或更多種??蓛Υ嫔鲜雠c失敗有關(guān)的信息,此外還可存儲執(zhí)行有關(guān)信息的程序。并且中央處理器100可執(zhí)行該存儲器140存儲的該程序,以實現(xiàn)信息存儲或處理等。輸入單元120向中央處理器100提供輸入。該輸入單元120例如為按鍵或觸摸輸入裝置。電源170用于向電子設(shè)備600提供電力。顯示器160用于進(jìn)行圖像和文字等顯示對象的顯示。該顯示器例如可為lcd顯示器,但并不限于此。該存儲器140可以是固態(tài)存儲器,例如,只讀存儲器(rom)、隨機(jī)存取存儲器(ram)、sim卡等。還可以是這樣的存儲器,其即使在斷電時也保存信息,可被選擇性地擦除且設(shè)有更多數(shù)據(jù),該存儲器的示例有時被稱為eprom等。存儲器140還可以是某種其它類型的裝置。存儲器140包括緩沖存儲器141(有時被稱為緩沖器)。存儲器140可以包括應(yīng)用/功能存儲部142,該應(yīng)用/功能存儲部142用于存儲應(yīng)用程序和功能程序或用于通過中央處理器100執(zhí)行電子設(shè)備600的操作的流程。存儲器140還可以包括數(shù)據(jù)存儲部143,該數(shù)據(jù)存儲部143用于存儲數(shù)據(jù),例如聯(lián)系人、數(shù)字?jǐn)?shù)據(jù)、圖片、聲音和/或任何其他由電子設(shè)備使用的數(shù)據(jù)。存儲器140的驅(qū)動程序存儲部144可以包括電子設(shè)備的用于通信功能和/或用于執(zhí)行電子設(shè)備的其他功能(如消息傳送應(yīng)用、通訊錄應(yīng)用等)的各種驅(qū)動程序。通信模塊110即為經(jīng)由天線111發(fā)送和接收信號的發(fā)送機(jī)/接收機(jī)110。通信模塊(發(fā)送機(jī)/接收機(jī))110耦合到中央處理器100,以提供輸入信號和接收輸出信號,這可以和常規(guī)移動通信終端的情況相同。基于不同的通信技術(shù),在同一電子設(shè)備中,可以設(shè)置有多個通信模塊110,如蜂窩網(wǎng)絡(luò)模塊、藍(lán)牙模塊和/或無線局域網(wǎng)模塊等。通信模塊(發(fā)送機(jī)/接收機(jī))110還經(jīng)由音頻處理器130耦合到揚(yáng)聲器131和麥克風(fēng)132,以經(jīng)由揚(yáng)聲器131提供音頻輸出,并接收來自麥克風(fēng)132的音頻輸入,從而實現(xiàn)通常的電信功能。音頻處理器130可以包括任何合適的緩沖器、解碼器、放大器等。另外,音頻處理器130還耦合到中央處理器100,從而使得可以通過麥克風(fēng)132能夠在本機(jī)上錄音,且使得可以通過揚(yáng)聲器131來播放本機(jī)上存儲的聲音。本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。本發(fā)明中應(yīng)用了具體實施例對本發(fā)明的原理及實施方式進(jìn)行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。當(dāng)前第1頁12當(dāng)前第1頁12