国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
當前位置: 首頁 - 科技 - 知識百科 - 正文

解決MySQLSendingdata導致查詢很慢問題的方法與思路_MySQL

來源:懂視網 責編:小采 時間:2020-11-09 20:19:33
文檔

解決MySQLSendingdata導致查詢很慢問題的方法與思路_MySQL

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

【問題現象】

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

【處理過程】

1)explain

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


從explain的結果來看,整個語句的索引設計是沒有問題的,除了第一個表因為業務需要進行整表掃描外,其它的表都是通過索引訪問

2)show processlist;

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

于是想到了使用 show processlist查看sql語句執行狀態,查詢結果如下:


發現很長一段時間,查詢都處在 “Sending data”狀態

查詢一下“Sending data”狀態的含義,原來這個狀態的名稱很具有誤導性,所謂的“Sending data”并不是單純的發送數據,而是包括“收集 + 發送 數據”。

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

3)show profile

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

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

結果如下:


從結果可以看出,Sending data的狀態執行了216s

4)排查對比

經過以上步驟,已經確定查詢慢是因為大量的時間耗費在了Sending data狀態上,結合Sending data的定義,將目標聚焦在查詢語句的返回列上面

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

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


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

【原理研究】

至此問題已經明確,但原理上我們還需要繼續探究。

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

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

我們使用show table status來查看表的相關信息:


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

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

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

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

【解決方法】

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

1)查詢時去掉description的查詢,但這受限于業務的實現,可能需要業務做較大調整

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

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

文檔

解決MySQLSendingdata導致查詢很慢問題的方法與思路_MySQL

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 综合视频在线 | 国产精品久久久久aaaa | 日韩精品一区在线观看 | 精品一区二区三 | 国产亚洲欧美在线人成aaaa | 欧美成人猛男性色生活 | 精品综合一区二区三区 | 欧美日韩国产高清 | 久久er99热精品一区二区 | 久久成人国产 | 日韩国产一区二区 | 欧美不卡一区 | 7777精品伊人久久久大香线蕉 | 伊人久久91| 国产乱了真实在线观看 | 亚洲欧美日韩高清一区二区三区 | 国内精品1区1区3区4区 | 国内精品久久久久激情影院 | 91精品专区 | 久久久久久综合一区中文字幕 | 国产精品99| 国产日韩欧美亚洲综合在线 | 亚洲一区二区三区精品影院 | 欧美一区二区在线视频 | 国产 日韩 欧美在线 | 在线播放国产视频 | 欧美激情视频一区二区 | 日本久久精品免视看国产成人 | 国产精品综合一区二区 | 免费又黄又爽又猛大片午夜 | 中文字幕高清 | 亚洲第一免费视频 | 91久久青草精品38国产 | 久久首页 | 激情综合亚洲欧美日韩 | 麻豆视频一区二区 | 精品在线一区 | 欧美在线观看网站 | 国产一区二区三区视频在线观看 | 免费看全黄特黄毛片 | 国产一区二区三区夜色 |