本發(fā)明涉及軟件開發(fā)領(lǐng)域,尤其涉及一種基于日志分析的應(yīng)用可靠性增強(qiáng)方法、設(shè)備及介質(zhì)。
背景技術(shù):
1、軟件工程中一般有測試環(huán)境和正式環(huán)境兩類應(yīng)用環(huán)境,兩類環(huán)境的配置信息往往不同,而代碼和數(shù)據(jù)庫結(jié)構(gòu)通常相同。
2、一方面,由于測試環(huán)境的表的數(shù)據(jù)量通常遠(yuǎn)小于正式環(huán)境,這可能導(dǎo)致出現(xiàn)一個(gè)sql在小數(shù)據(jù)量的測試環(huán)境中的執(zhí)行時(shí)間小于設(shè)置的慢語句的閾值,因而未及時(shí)被識(shí)別為慢語句而加以優(yōu)化就上線到正式環(huán)境中,而其在數(shù)據(jù)量大的正式環(huán)境中變成慢語句,影響正式環(huán)境的運(yùn)行。
3、其次,當(dāng)正式環(huán)境中數(shù)據(jù)庫出現(xiàn)性能問題時(shí),僅查看數(shù)據(jù)庫管理系統(tǒng)列出的慢語句是不夠的,而需要快速定位到慢語句所在代碼源文件甚至代碼行進(jìn)行處理。
4、再次,一個(gè)請求中可能涉及同一個(gè)參數(shù)化sql語句的多次查詢,這些查詢可能是熱點(diǎn)數(shù)據(jù)的多次請求,也可能是單次請求中的循環(huán)重復(fù)點(diǎn)查,尤其是在循環(huán)體中的函數(shù)嵌套調(diào)用,使得識(shí)別出這些重復(fù)查詢更為困難。
技術(shù)實(shí)現(xiàn)思路
1、為了解決上述問題,本發(fā)明提出了一種基于日志分析的應(yīng)用可靠性增強(qiáng)方法、設(shè)備及介質(zhì)。
2、具體方案如下:
3、一種基于日志分析的應(yīng)用可靠性增強(qiáng)方法,包括以下步驟:
4、在應(yīng)用上線前,逐行提取應(yīng)用日志中的sql語句,并對提取的每條sql語句分別進(jìn)行explain分析,基于explain分析結(jié)果判斷各sql語句是否為慢語句;在應(yīng)用上線前或后,實(shí)時(shí)分析應(yīng)用日志中各sql語句的耗時(shí),基于耗時(shí)與耗時(shí)閾值的大小關(guān)系,判斷各sql語句是否為慢語句;將慢語句作為待優(yōu)化的sql語句進(jìn)行優(yōu)化;
5、在應(yīng)用上線前或后,統(tǒng)計(jì)各請求對應(yīng)的日志序列中包含的各源文件位置的重復(fù)次數(shù),將重復(fù)次數(shù)位于前列的源文件位置對應(yīng)的日志中的sql語句作為待優(yōu)化sql語句;統(tǒng)計(jì)一段時(shí)間內(nèi)出現(xiàn)的來自相同和不同請求的各源文件位置的重復(fù)次數(shù),將重復(fù)次數(shù)最多的n個(gè)源文件位置對應(yīng)的日志中的sql語句作為待優(yōu)化sql語句;對待優(yōu)化sql語句進(jìn)行優(yōu)化。
6、進(jìn)一步的,基于explain分析結(jié)果判斷各sql語句是否為慢語句的方法為:將explain分析結(jié)果中type字段值為all或extra字段值中包括using?filesort的sql語句判定為慢語句。
7、進(jìn)一步的,還包括:在應(yīng)用上線后,提取最近額定時(shí)間或最近額定數(shù)目的日志中的存在慢語句的日志,并獲取各日志中的源文件位置;統(tǒng)計(jì)各請求的日志序列中所有源文件位置的重復(fù)次數(shù),將重復(fù)次數(shù)位于前列的源文件位置對應(yīng)的sql語句作為隱患程度較高的語句,將這些隱患程度較高的語句優(yōu)先進(jìn)行優(yōu)化處理。
8、進(jìn)一步的,在識(shí)別到待優(yōu)化sql語句后,還包括記錄各待優(yōu)化sql語句的發(fā)現(xiàn)時(shí)間、隱患類型、相關(guān)日志序列和所屬責(zé)任人。
9、進(jìn)一步的,對待優(yōu)化sql語句進(jìn)行優(yōu)化時(shí),將待優(yōu)化sql語句發(fā)送至其所屬責(zé)任人進(jìn)行優(yōu)化。
10、一種基于日志分析的應(yīng)用可靠性增強(qiáng)終端設(shè)備,包括處理器、存儲(chǔ)器以及存儲(chǔ)在所述存儲(chǔ)器中并可在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)本發(fā)明實(shí)施例上述的方法的步驟。
11、一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)本發(fā)明實(shí)施例上述的方法的步驟。
12、本發(fā)明采用如上技術(shù)方案,在應(yīng)用上線前后通過日志分析主動(dòng)識(shí)別sql中的慢語句,解決了測試環(huán)境中數(shù)據(jù)量不足以充分暴露性能問題的局限性;主動(dòng)識(shí)別程序中的高頻sql語句,可將這些多次查詢優(yōu)化為單次查詢,減少sql服務(wù)器的壓力。
1.一種基于日志分析的應(yīng)用可靠性增強(qiáng)方法,其特征在于,包括以下步驟:
2.根據(jù)權(quán)利要求1所述的基于日志分析的應(yīng)用可靠性增強(qiáng)方法,其特征在于:基于explain分析結(jié)果判斷各sql語句是否為慢語句的方法為:將explain分析結(jié)果中type字段值為all或extra字段值中包括using?filesort的sql語句判定為慢語句。
3.根據(jù)權(quán)利要求1所述的基于日志分析的應(yīng)用可靠性增強(qiáng)方法,其特征在于,還包括:在應(yīng)用上線后,提取最近額定時(shí)間或最近額定數(shù)目的日志中的存在慢語句的日志,并獲取各日志中的源文件位置;統(tǒng)計(jì)各請求的日志序列中所有源文件位置的重復(fù)次數(shù),將重復(fù)次數(shù)位于前列的源文件位置對應(yīng)的sql語句作為隱患程度較高的語句,將這些隱患程度較高的語句優(yōu)先進(jìn)行優(yōu)化處理。
4.根據(jù)權(quán)利要求1所述的基于日志分析的應(yīng)用可靠性增強(qiáng)方法,其特征在于:在識(shí)別到待優(yōu)化sql語句后,還包括記錄各待優(yōu)化sql語句的發(fā)現(xiàn)時(shí)間、隱患類型、相關(guān)日志序列和所屬責(zé)任人。
5.根據(jù)權(quán)利要求1所述的基于日志分析的應(yīng)用可靠性增強(qiáng)方法,其特征在于:對待優(yōu)化sql語句進(jìn)行優(yōu)化時(shí),將待優(yōu)化sql語句發(fā)送至其所屬責(zé)任人進(jìn)行優(yōu)化。
6.一種基于日志分析的應(yīng)用可靠性增強(qiáng)終端設(shè)備,其特征在于:包括處理器、存儲(chǔ)器以及存儲(chǔ)在所述存儲(chǔ)器中并在所述處理器上運(yùn)行的計(jì)算機(jī)程序,所述處理器執(zhí)行所述計(jì)算機(jī)程序時(shí)實(shí)現(xiàn)如權(quán)利要求1~5中任一所述方法的步驟。
7.一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)存儲(chǔ)有計(jì)算機(jī)程序,其特征在于:所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如權(quán)利要求1~5中任一所述方法的步驟。