<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        解決MySQLSendingdata導(dǎo)致查詢很慢問題的方法與思路_MySQL

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-09 20:19:33
        文檔

        解決MySQLSendingdata導(dǎo)致查詢很慢問題的方法與思路_MySQL

        解決MySQLSendingdata導(dǎo)致查詢很慢問題的方法與思路_MySQL:最近幫忙定位一個mysql查詢很慢的問題,定位過程綜合各種方法、理論、工具,很有代表性,分享給大家。【問題現(xiàn)象】使用sphinx支持倒排索引,但sphinx從mysql查詢源數(shù)據(jù)的時候,查詢的記錄數(shù)才幾萬條,但查詢的速度非常慢,大概要4~5分鐘左右【處理過程】1)
        推薦度:
        導(dǎo)讀解決MySQLSendingdata導(dǎo)致查詢很慢問題的方法與思路_MySQL:最近幫忙定位一個mysql查詢很慢的問題,定位過程綜合各種方法、理論、工具,很有代表性,分享給大家。【問題現(xiàn)象】使用sphinx支持倒排索引,但sphinx從mysql查詢源數(shù)據(jù)的時候,查詢的記錄數(shù)才幾萬條,但查詢的速度非常慢,大概要4~5分鐘左右【處理過程】1)
        最近幫忙定位一個mysql查詢很慢的問題,定位過程綜合各種方法、理論、工具,很有代表性,分享給大家。

        【問題現(xiàn)象】

        使用sphinx支持倒排索引,但sphinx從mysql查詢源數(shù)據(jù)的時候,查詢的記錄數(shù)才幾萬條,但查詢的速度非常慢,大概要4~5分鐘左右

        【處理過程】

        1)explain

        首先懷疑索引沒有建好,于是使用explain查看查詢計劃,結(jié)果如下:


        從explain的結(jié)果來看,整個語句的索引設(shè)計是沒有問題的,除了第一個表因為業(yè)務(wù)需要進(jìn)行整表掃描外,其它的表都是通過索引訪問

        2)show processlist;

        explain看不出問題,那到底慢在哪里呢?

        于是想到了使用 show processlist查看sql語句執(zhí)行狀態(tài),查詢結(jié)果如下:


        發(fā)現(xiàn)很長一段時間,查詢都處在 “Sending data”狀態(tài)

        查詢一下“Sending data”狀態(tài)的含義,原來這個狀態(tài)的名稱很具有誤導(dǎo)性,所謂的“Sending data”并不是單純的發(fā)送數(shù)據(jù),而是包括“收集 + 發(fā)送 數(shù)據(jù)”。

        這里的關(guān)鍵是為什么要收集數(shù)據(jù),原因在于:mysql使用“索引”完成查詢結(jié)束后,mysql得到了一堆的行id,如果有的列并不在索引中,mysql需要重新到“數(shù)據(jù)行”上將需要返回的數(shù)據(jù)讀取出來返回個客戶端。

        3)show profile

        為了進(jìn)一步驗證查詢的時間分布,于是使用了show profile命令來查看詳細(xì)的時間分布

        首先打開配置:set profiling=on;
        執(zhí)行完查詢后,使用show profiles查看query id;
        使用show profile for query query_id查看詳細(xì)信息;

        結(jié)果如下:


        從結(jié)果可以看出,Sending data的狀態(tài)執(zhí)行了216s

        4)排查對比

        經(jīng)過以上步驟,已經(jīng)確定查詢慢是因為大量的時間耗費在了Sending data狀態(tài)上,結(jié)合Sending data的定義,將目標(biāo)聚焦在查詢語句的返回列上面

        經(jīng)過一 一排查,最后定為到一個description的列上,這個列的設(shè)計為:`description`varchar(8000) DEFAULT NULL COMMENT '游戲描述',

        于是采取了對比的方法,看看“不返回description的結(jié)果”如何。show profile的結(jié)果如下:


        可以看出,不返回description的時候,查詢時間只需要15s,返回的時候,需要216s,兩者相差15倍

        【原理研究】

        至此問題已經(jīng)明確,但原理上我們還需要繼續(xù)探究。

        這篇淘寶的文章很好的解釋了相關(guān)原理:innodb使用大字段text,blob的一些優(yōu)化建議

        這里的關(guān)鍵信息是:當(dāng)Innodb的存儲格式是 ROW_FORMAT=COMPACT (or ROW_FORMAT=REDUNDANT)的時候,Innodb只會存儲前768字節(jié)的長度,剩余的數(shù)據(jù)存放到“溢出頁”中。

        我們使用show table status來查看表的相關(guān)信息:


        可以看到,平均一行大約1.5K,也就說大約1/10行會使用“溢出存儲”,一旦采用了這種方式存儲,返回數(shù)據(jù)的時候本來是順序讀取的數(shù)據(jù),就變成了隨機讀取了,所以導(dǎo)致性能急劇下降。

        另外,在測試過程中還發(fā)現(xiàn),無論這條語句執(zhí)行多少次,甚至將整個表select *幾次,語句的執(zhí)行速度都沒有明顯變化。這個表的數(shù)據(jù)和索引加起來才150M左右,而整個Innodb buffer pool有5G,緩存整張表綽綽有余,如果緩存了溢出頁,性能應(yīng)該大幅提高才對。

        但實測結(jié)果卻并沒有提高,因此從這個測試可以推論Innodb并沒有將溢出頁(overflow page)緩存到內(nèi)存里面。

        這樣的設(shè)計也是符合邏輯的,因為overflow page本來就是存放大數(shù)據(jù)的,如果也放在緩存里面,就會出現(xiàn)一次大數(shù)據(jù)列(blob、text、varchar)查詢,可能就將所有的緩存都更新了,這樣會導(dǎo)致其它普通的查詢性能急劇下降。

        【解決方法】

        找到了問題的根本原因,解決方法也就不難了。有幾種方法:

        1)查詢時去掉description的查詢,但這受限于業(yè)務(wù)的實現(xiàn),可能需要業(yè)務(wù)做較大調(diào)整

        2)表結(jié)構(gòu)優(yōu)化,將descripion拆分到另外的表,這個改動較大,需要已有業(yè)務(wù)配合修改,且如果業(yè)務(wù)還是要繼續(xù)查詢這個description的信息,則優(yōu)化后的性能也不會有很大提升。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        解決MySQLSendingdata導(dǎo)致查詢很慢問題的方法與思路_MySQL

        解決MySQLSendingdata導(dǎo)致查詢很慢問題的方法與思路_MySQL:最近幫忙定位一個mysql查詢很慢的問題,定位過程綜合各種方法、理論、工具,很有代表性,分享給大家。【問題現(xiàn)象】使用sphinx支持倒排索引,但sphinx從mysql查詢源數(shù)據(jù)的時候,查詢的記錄數(shù)才幾萬條,但查詢的速度非常慢,大概要4~5分鐘左右【處理過程】1)
        推薦度:
        標(biāo)簽: 非常的 的問題 很慢
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲大香伊人蕉在人依线| 亚洲精品天天影视综合网| 亚洲国产欧美国产综合一区 | 亚洲国语精品自产拍在线观看| 新最免费影视大全在线播放| 免费大片黄手机在线观看| 日韩国产欧美亚洲v片| 国产大片免费观看中文字幕| 香港特级三A毛片免费观看 | 亚洲乱亚洲乱少妇无码| 深夜免费在线视频| 国外亚洲成AV人片在线观看 | 9久热精品免费观看视频| 亚洲精品无码Av人在线观看国产 | 亚洲色偷偷色噜噜狠狠99网| 午夜精品在线免费观看| 最新亚洲人成网站在线观看| 亚洲成网777777国产精品| 全免费a级毛片免费看| 777亚洲精品乱码久久久久久 | 亚洲人成网址在线观看 | 在线美女免费观看网站h| 亚洲一区在线观看视频| 日本免费电影一区| 一级毛片人与动免费观看| 久久精品国产精品亚洲艾草网| 亚洲视频在线观看免费视频| 亚洲高清一区二区三区电影| 亚洲一区二区三区免费| 91精品免费观看| 久久亚洲色WWW成人欧美| 国产亚洲美女精品久久久2020| 99热免费在线观看| 麻豆亚洲AV成人无码久久精品| 亚洲日韩精品一区二区三区无码 | 亚洲国产第一页www| 天天摸夜夜摸成人免费视频| 成人免费777777被爆出| 亚洲国产成人精品无码一区二区| 国产一级高清视频免费看| 午夜精品一区二区三区免费视频 |