本文提要
從編碼角度來優(yōu)化數(shù)據(jù)層的話,我首先會去查一下項目中運行的sql語句,定位到瓶頸是否出現(xiàn)在這里,首先去優(yōu)化sql語句,而慢sql就是其中的主要優(yōu)化對象,對于慢sql,顧名思義就是花費較多執(zhí)行時間的語句,它帶來的影響也比較惡劣,首先是執(zhí)行時間過長影響數(shù)據(jù)的返回速度,其次,慢sql的長時間執(zhí)行也會消耗和占用mysql的系統(tǒng)資源,影響其他的sql語句執(zhí)行,過多的慢sql極其影響性能,如果系統(tǒng)流量或者并發(fā)量較大的情況下,過多的執(zhí)行慢sql很有可能造成mysql的死鎖以致于mysql服務(wù)無法正常使用。
druid整合到項目中以及druid監(jiān)控的開啟已經(jīng)持續(xù)了一段時間,因此對于慢sql的監(jiān)控和整理也大致有了一些結(jié)果,本篇文章就試著從日志文件和監(jiān)控面板中找出幾條慢sql并進(jìn)行優(yōu)化。
優(yōu)化步驟
總結(jié)了一下,大致步驟如下:
定位優(yōu)化對象的性能瓶頸;
明確優(yōu)化目標(biāo);
從explain入手分析;
找到優(yōu)化方法;
找出慢sql
首先進(jìn)入druid監(jiān)控后臺,查看一下這幾天的運行日志后,慢sql的大致情況,如圖:
從監(jiān)控后臺看到的數(shù)據(jù)只是一個粗略的統(tǒng)計,是一個總覽記錄,想要看到詳細(xì)的執(zhí)行記錄及其中的慢sql統(tǒng)計可以通過日志文件,這個功能也已經(jīng)整合到項目中,直接在tomcat的logs目錄即可查看。
日志文件內(nèi)容節(jié)選:
//1.圖片表查詢sql [10:13:37] StatFilter - slow sql 1572 millis. select * from ssm_picture WHERE type = ? and grade = ? limit ?,? ["1","1",0,10] ... //2.更新文章表sql[14:19:12] StatFilter - slow sql 1926 millis. update ssm_article set article_title=?,article_content=?, add_name=? where id=? ["11","<p>1324354657usdfghjnkm,zxvb nm,,fgfhjtfggggggggggggggggggg<br/></p>","22","1033"] ... //3.文章表查詢sql[15:07:04] StatFilter - slow&n