色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

一次分頁慢查詢導致的事故處理過程

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-08-21 16:44 ? 次閱讀

事故背景

這次事故也是我們組里遇到的一次關于分頁慢查詢的典型例子,通過這篇文章,你可以很清晰的跟隨我們還原事故現場,以及每一步遇到問題做出的調整和改動。

事故問題現場

  • 16:00 收到同事反饋,融合系統分?查詢可?率降低
  • 16:05 查詢接?UMP監控,發現接?TP99異常彪?
9527948e-3ea6-11ee-ac96-dac502259ad0.png95589bc4-3ea6-11ee-ac96-dac502259ad0.png

打開機器監控,發現?乎所有機器的TP999都異常的?,觀察機器CPU監控,發現CPU使?率并不?

9577a9ec-3ea6-11ee-ac96-dac502259ad0.png
  • 16:10 查看數據庫監控,發現數據庫CPU異常彪?,定位到是數據庫問題,同時收到了?量的慢SQL郵件。
959c7ce0-3ea6-11ee-ac96-dac502259ad0.png

定位到這里,我們基本確定這個不是幾分鐘能解決的問題,于是我們分成兩步去處理。第一步:打開限流,防止更多的慢sql請求進行 第二步:分析慢sql,進行改造上線 查看慢SQL,?部分都是融合系統分?查詢接?涉及到的SQL,同時由于上游系統在15:35左右對于該接?調?流量激增,和數據庫CPU暴漲,接?TP999暴漲的時間吻合,推測是由于庫存對于該接?的調?對于數據庫造成了壓?,導致接?耗時增加。但是該接?的調?量并不?,再次查看慢SQL,發現有?量已經遍歷到?百?的慢SQL。推測是深分?的問題。

  • 16:15 排查?志發現,?部分SQL都指向商家xxxx,查詢發現其下有10W條數據(占?總數量的?分之?),MQ發現有?量重試,分?查詢接?超時時間發現配置的是2S。推測是慢查詢導致的?頻次重試將數據庫的性能拖垮。
  • 16:25 觀察代碼后,確定了是深分?問題,確定下來了優化?案。為了避免庫存修改接?,?先我們優化SQL將其優化為?查詢的形式。即先通過pageNo和pageSize查詢出ID,然后取出當中的最?值和最?值,然后使?范圍查詢去查詢出來全表數據。由于線上持續對數據庫造成壓?,先讓上游把MQ的消費暫停消費。
  • 17:40 優化代碼上線,上游重新打開MQ消費,但是由于消費積累的消息?較多,直接打開后,還是對融合數據庫造成了壓?。接?的TP99再次飆升,數據庫CPU再次飆到100%。
  • 18:00 復盤了下,決定不再優化舊接?,?是開發新接?,基于滾動ID進?分?查詢。需要推動上游?起參與開發和聯調。
  • 22:20 新接?上線,重新放開MQ消費,上游積壓了?量消息的情況下,新接?表現平穩,“問題解決”
95b1e058-3ea6-11ee-ac96-dac502259ad0.png

問題原因和解決?法

深分?出現原因

問題SQL:

select*fromtablewhereorg_code=xxxxlimit1000,100

以上?的SQL為例,MySQL的limit?作原理就是先讀取前?1000條記錄,然后拋棄前1000條,讀后?100條想要的,所以?碼越?,偏移量越?,性能就越差。

深分?的?種解決?法

查詢ID+基于ID查詢

即先使?查詢條件查詢出來id,再通過id進?范圍查詢,也就是說我第?次優化的時候使?的?法 ?先查詢出來ID,以上?的SQL為例

selectidfromtablewhereorg_code=xxxxlimit1000,5

然后查詢出來id后,使?id進?in查詢,由于是直接基于主鍵的in查詢,所以效率較?

select*fromtablewhereidin(1,2,3,4,5);

基于ID查詢優化

由于在第?次查詢已經查詢出來了所有符合條件的ID了,可以使?范圍查詢來替代in查詢,效率更?(in 查詢需要和集合??的元素進??對,但是范圍查詢只需要?較最?和最?即可)

select*fromtablewhereorg_code=xxxxandid>=1andid<=?5;

使??查詢

selecta.id,a.dj_sku_id,a.jd_sku_idfromtableajoin(selectidfrom

jd_spu_skuwhereorg_code=xxxxlimit1000,5)b

ona.id=b.id;

使??查詢可以減少和數據庫的IO交互,也是?種常?的解決深分?的?法。

使?滾動查詢

每次接?都會返回查詢出來的數據的最?的id(游標),下?次查詢傳?這個游標,服務端只需要根據這個游標,取出id?于這個游標的n個數據即可。n為每?展示條數。

select*fromtablewhereorg_code=xxxxandid>0limit10;

這種?式服務端實現起來?較簡單且性能很好。缺點是需要客戶端修改,且需要保證ID是?增有序且結果需要是按照ID排序的。最終定下的是使?滾動查詢的?法。最終優化SQL上線后,表現平穩。第?周和庫存?起重新優化了?多規格SKU的SQL。如下:

SELECTid,dj_org_code,dj_sku_id,jd_sku_id,ynFROMtablewhere

org_code=xxxxandid>0orderbyidasclimit500

測試了沒問題后上線。觀察線上監控穩定。本以為?枕?憂的時候,?周之后,數據庫再次出現了?量的慢查詢,數據庫CPU報警,觀察接?監控:

95d1f28a-3ea6-11ee-ac96-dac502259ad0.png

可以看到在調?量并不?的前提下,接?的耗時達到了60S。聯系運維同學幫忙排查,發現了?量的慢 SQL:

SELECTid,dj_org_code,dj_sku_id,jd_sku_id,ynFROMtablewhere

org_code=xxxxandid>0orderbyidasclimit500

可以看出來,這就是我們優化后的SQL。運維同學explain這條sql后發現,這條SQL?了主鍵索引,沒有?我們以為應該要?的org_code的索引。

95fc651a-3ea6-11ee-ac96-dac502259ad0.png

和運維初步溝通后得出結論,在某些情況下,主鍵索引的優先級是會?于普通索引的。

最終解決方案

引用join

因為我們使?了主鍵索引進?排序,且查詢了不在索引樹只在葉?節點中的字段。因此mysql認為主鍵索引更優,因為既可以排序,?不?回表,所以就使?主鍵索引最終導致了全表掃描。

最終使?了先查詢ID(不查詢葉?節點字段保證使?索引),在通過join,使?查詢出來的ID來查詢對應的數據的SQL:

selecta.idASid,a.dj_org_codeASdjOrgCode,a.dj_sku_idAS

djSkuId,a.jd_sku_idASjdSkuId,a.ynASynfrom

tableajoin

(

SELECTidFROMtablewhereorg_code=xxxxandid>0order

byidasclimit500

)tona.id=t.id;

再次explain了下,可以發現?了我們既定的索引:

9627f84c-3ea6-11ee-ac96-dac502259ad0.png

于是上線,解決問題。上線穩定后,分析之前的問題SQL,執?下?兩條語句,同樣的SQL,不同的商家,MYSQL的執?結果也是不?樣的

964c2a96-3ea6-11ee-ac96-dac502259ad0.png

查詢資料找原因

查閱資料得知

  • MYSQL會將limit的數量和where條件?查詢出的數量進??對,如果limit數量占?較? (例如某些商家的sku數??較多),則會"優化"為主鍵索引,因為MYSQL此時認為?主鍵索引會減少 ?次索引樹的查詢,且可以在較短時間??得到結果。(沒有LIMIT不會?主鍵索引)
  • 因此在where 索引A order by 主鍵索引 limit N的這種SQL,需要考慮MYSQL優化主鍵索引的情況。
  • 除了上?最終上線后的優化SQL,也可以通過force index強制使?索引:
SELECTid,dj_org_code,dj_sku_id,jd_sku_id,ynFROMtableforce

index(idx_upc)whereorg_code=xxxxandid>0orderbyidasclimit

500

但是這種寫死了索引名稱的?式,如果以后修改了索引名,容易導致安全隱患。

問題總結

  • B端系統也需要考慮對??系統的保護,接?限流等,防?異常流量或者異常調?把??的系統調死。這次幸虧上游系統是通過MQ調?融合API的,可以暫停消費,如果是?API調?,且流量較?,持續讓數據庫處于?壓狀態,會影響到融合系統的整體穩定性。
  • 針對可能出現的?險點絕不姑息。這次這個分?查詢sku的接?,之前就看到過,但是當時覺得這個接?在數據量較少的情況下性能也還好,?且也有了商家維度的索引,就放過了,考慮后續優化。結果現在就爆出了問題。
  • 針對SQL的優化,上線前要謹慎,?且需要同?條SQL,需要針對不同的邊界情況(例如這次的多SKU的商家)進?反復測試,調整。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10901

    瀏覽量

    212739
  • API
    API
    +關注

    關注

    2

    文章

    1510

    瀏覽量

    62320
  • SQL
    SQL
    +關注

    關注

    1

    文章

    773

    瀏覽量

    44224

原文標題:坑慘了!一次分頁慢查詢導致的事故處理過程

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    文了解MyBatis的查詢原理

    本文通過MyBatis個低版本的bug(3.4.5之前的版本)入手,分析MyBatis的一次完整的查詢流程,從配置文件的解析到查詢的完
    的頭像 發表于 10-10 11:42 ?1462次閱讀

    處理溫度控制模擬VI 輸出階段的處理過程

    處理溫度控制模擬VI 輸出階段的處理過程 輸出階段處理過程所要實現的功能為:根據計算階段處理產生的風扇打開和關閉執行命令;檢查前
    發表于 10-08 09:22

    vison assistant中的圖像處理過程

    新手求教!在vision assistant中驗證圖片時在圖像處理畫面可以看到圖像的處理過程,但完成退回到labview中后,為什么在顯示的 圖片中看不到處理過程呢?
    發表于 06-24 15:55

    JPA分頁查詢的常用方法

    JPA分頁查詢與條件分頁查詢
    發表于 10-23 17:10

    51單片機中斷處理過程有幾個

    51單片機中斷處理過程有幾個,文章目錄中斷定義預備知識正文中斷對于剛上大的小伙伴,應該和我樣第一次見到“中斷”這個詞。估計也困擾了許多小伙伴很久,今天以我的角度重新給大家說
    發表于 07-22 09:32

    CPU的內部處理過程是怎樣的

    CPU是什么?CPU主要由哪幾部分構成?CPU的內部處理過程是怎樣的?
    發表于 10-19 09:21

    污水處理過程儀表技術的研究現狀

    污水處理過程固有的非線性、時變性特征對傳感器的可靠性、適應性提出了很高的要求。污水處理過程涉及多種傳感器,多數傳感器是污水處理過程所特有的,分別為人們提供所監
    發表于 12-20 15:11 ?10次下載

    污水處理過程儀表技術的研究現狀

    污水處理過程固有的非線性、時變性特征對傳感器的可靠性、適應性提出了很高的要求。污水處理過程涉及多種傳感器,多數傳感器是污水處理過程所特有的,分別為人們提供所監
    發表于 01-07 15:39 ?15次下載

    一次過程的等值電路

    一次過程的等值電路 圖 一次過程的等值電路 在電動機端子上安裝阻抗匹配器可
    發表于 07-18 11:24 ?1723次閱讀
    <b class='flag-5'>一次</b>波<b class='flag-5'>過程</b>的等值電路

    數字電視的典型的處理過程

    典型的處理過程 下面介紹數字電視的幾個典型的處理過程
    發表于 07-31 14:23 ?1549次閱讀
    數字電視的典型的<b class='flag-5'>處理過程</b>

    SQL查詢的原因分析總結

    sql 查詢的48個原因分析 1、沒有索引或者沒有用到索引(這是查詢最常見的問題,是程序設計的缺陷)。 2、I/O吞吐量小,形成了瓶頸效應。 3、沒有創建計算列
    發表于 03-08 11:58 ?0次下載

    MyBatis流式查詢輕松幫你解決分頁的問題

    結果。流式查詢的好處是能夠降低內存使用。 如果沒有流式查詢,我們想要從數據庫取 1000 萬條記錄而又沒有足夠的內存時,就不得不分頁查詢,而分頁
    的頭像 發表于 08-04 15:52 ?4248次閱讀

    個由于MySQL分頁導致的線上事故

    其實對于我們的 MySQL 查詢語句來說,整體效率還是可以的,該有的聯表查詢優化都有,該簡略的查詢內容也有,關鍵條件字段和排序字段該有的索引也都在,問題在于他
    的頭像 發表于 05-10 15:31 ?816次閱讀

    MyBatis Plus解決大數據量查詢問題

    在實際工作中當指定查詢數據過大時,我們般使用分頁查詢的方式頁的將數據放到內存
    的頭像 發表于 01-16 10:17 ?1922次閱讀

    mybatis邏輯分頁和物理分頁的區別

    這兩種分頁方式的區別。 邏輯分頁是在數據庫中執行查詢時使用的分頁方式。這種方式是通過在查詢
    的頭像 發表于 12-03 14:54 ?971次閱讀
    主站蜘蛛池模板: 牢记永久免费网址 | 久久全国免费观看视频 | 国产原创剧情麻豆在线 | 国产精品亚洲污污网站入口 | 免费看欧美一级特黄a大片 免费看欧美xxx片 | 九九热这里只有精品视频免费 | 99热国产这里只有精品9九 | 乱码AV午夜噜噜噜噜 | 免费成人高清在线视频 | 一二三四视频免费社区5 | 中文字幕无线手机在线 | 九色PORNY蝌蚪视频首页 | 麻豆COMCN| 午夜DY888国产精品影院 | 亚洲成年人免费网站 | 狠狠色欧美亚洲狠狠色www | 国产精品人妻一区免费看8C0M | 久久理论片迅播影院一级 | 欧美亚洲国产手机在线有码 | 欧美精品九九99久久在观看 | 久久全国免费观看视频 | 女仆翻身大作战 | 亚洲免费观看 | 好看的电影网站亚洲一区 | 国产AV电影区二区三区曰曰骚网 | 一个人高清在线观看日本免费 | 国产精品亚洲精品影院 | 精品久久久噜噜噜久久7 | 91精品国产91 | 2020无码最新国产在线观看 | 俄罗斯freeⅹ性欧美 | 99九九免费热在线精品 | 亚洲精品色情婷婷在线播放 | 1234成人网| 国产高潮久久精品AV无码 | 挺进老师的紧窄小肉六电影完整版 | 囯产精品久久久久久久久蜜桃 | 亚洲 无码 制服 日韩 | 美女扒开尿孔 | 男人一进一出桶女人视频 | 0855午夜福利伦理电影 |