本文提要
從編碼角度來優(yōu)化數(shù)據(jù)層的話,我首先會(huì)去查一下項(xiàng)目中運(yùn)行的sql語(yǔ)句,定位到瓶頸是否出現(xiàn)在這里,首先去優(yōu)化sql語(yǔ)句,而慢sql就是其中的主要優(yōu)化對(duì)象,對(duì)于慢sql,顧名思義就是花費(fèi)較多執(zhí)行時(shí)間的語(yǔ)句,它帶來的影響也比較惡劣,首先是執(zhí)行時(shí)間過長(zhǎng)影響數(shù)據(jù)的返回速度,其次,慢sql的長(zhǎng)時(shí)間執(zhí)行也會(huì)消耗和占用mysql的系統(tǒng)資源,影響其他的sql語(yǔ)句執(zhí)行,過多的慢sql極其影響性能,如果系統(tǒng)流量或者并發(fā)量較大的情況下,過多的執(zhí)行慢sql很有可能造成mysql的死鎖以致于mysql服務(wù)無法正常使用。
druid整合到項(xiàng)目中以及druid監(jiān)控的開啟已經(jīng)持續(xù)了一段時(shí)間,因此對(duì)于慢sql的監(jiān)控和整理也大致有了一些結(jié)果,本篇文章就試著從日志文件和監(jiān)控面板中找出幾條慢sql并進(jìn)行優(yōu)化。
優(yōu)化步驟
總結(jié)了一下,大致步驟如下:
定位優(yōu)化對(duì)象的性能瓶頸;
明確優(yōu)化目標(biāo);
從explain入手分析;
找到優(yōu)化方法;
找出慢sql
首先進(jìn)入druid監(jiān)控后臺(tái),查看一下這幾天的運(yùn)行日志后,慢sql的大致情況,如圖:
從監(jiān)控后臺(tái)看到的數(shù)據(jù)只是一個(gè)粗略的統(tǒng)計(jì),是一個(gè)總覽記錄,想要看到詳細(xì)的執(zhí)行記錄及其中的慢sql統(tǒng)計(jì)可以通過日志文件,這個(gè)功能也已經(jīng)整合到項(xià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