本文提要

從編碼角度來優(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的大致情況,如圖:
電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

從監(jiān)控后臺(tái)看到的數(shù)據(jù)只是一個(gè)粗略的統(tǒng)計(jì),是一個(gè)總覽記錄,想要看到詳細(xì)的執(zhí)行記錄及其中的慢sql統(tǒng)計(jì)可以通過日志文件,這個(gè)功能也已經(jīng)整合到項(xiàng)目中,直接在tomcat的logs目錄即可查看。
電腦培訓(xùn),計(jì)算機(jī)培訓(xùn),平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),Web培訓(xùn),Web前端開發(fā)培訓(xùn)

日志文件內(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