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

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

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

3天內不再提示

自建MySQL遷移到云上RDS的故障起因及優化

我快閉嘴 ? 來源:云服務飛行團 ? 作者:翟振興 ? 2022-09-07 09:41 ? 次閱讀

長假某日,陽光明媚,春暖花開,恰逢冬奧會開幕,想著一定是一個黃道吉日,必能順風順水。沒想到卻遇到一個有點小波折 的客戶報障。

01 故障起因

故障起因是客戶前一天從自建MySQL遷移到云上RDS,在執行某個并發較高的業務時出現了大量鎖等待,客戶當時升級了實例到最高規格,但故障依舊。客戶反饋升級后的實例規格比自建實例高了一倍,自建實例上從未發生過類似情況。后客戶根據當時的業務故障模擬了現場,主要是并發執行如下存儲過程的時候性能很差:

fbf9d518-2deb-11ed-ba43-dac502259ad0.png

02 初步診斷

從存儲過程的邏輯看,比較簡單,主要涉及兩個SQL,一個從表t(隱藏了真實表名)中meeting_id根據傳入參數值查詢,具體的入參由字符型變量p_meeting_id帶入;另外一個根據meeting_id和剛查出的phone_id去更新t中的phone_id為phone_id+3。表t數據量約40w左右。

第一感覺這是個簡單問題,估計兩個SQL的meeting_id索引沒有生效,查詢表上索引后果然發現meeting_id和phone_id上沒有索引,建議客戶在兩個字段上分別創建了索引,且meeting_id為主鍵。此時用戶執行模擬的并發腳本反饋速度有了明顯提升,200個并發最高執行時間40s左右,但模擬500個并發的時候,超過了8分鐘還沒有執行完。用戶反饋在自建MySQL上并發500執行都是秒級完成。此時在控制臺看,這個存儲過程在慢查詢日志中批量出現,且掃描行數巨大,客戶端已經完全hang住:

fc2da532-2deb-11ed-ba43-dac502259ad0.png

03 進一步優化

雖然優化有了初步的效果, 但距離客戶自建環境性能描述還差距很大,由于并發高, 從監控看測試期間CPU到了100%,懷疑參數innodb_thread_concurrency的設置可能不當。此參數的作用是控制 InnoDB 的并發線程上限。也就是說,一旦并發線程數達到這個值,InnoDB 在接收到新請求的時候,就會進入等待狀態,直到有線程退出。RDS默認值為0,也就是沒有限制上限,在高并發的場景下可能會產生較多的上下文切換,導致CPU升高。和客戶咨詢了一下,他們自建環境的值設置為32,建議他們將RDS的值也改為32再看看效果。客戶很快反饋,修改后的確有效果,500個并發在3分鐘內完成,沒有再發生hang住不動的情況,性能有了進一步的提升。但參數innodb_thread_concurrency進一步調整效果不明顯。

04 加trace診斷

客戶看到性能不斷提升也很有信心,但和自建環境差距還是很大,還有哪里可能有問題?突然想到,創建索引后,在控制臺的慢查詢列表中看到很多存儲過程的調用sql,且掃描記錄數巨大,如果是走meeting_id唯一索引,應該掃描很少的記錄數才對,難道沒有走索引?或者沒有走meeting_id主鍵索引?聯系客戶,希望提供測試環境登陸測試。

在測試環境,首先希望驗證一下兩個SQL的執行計劃到底是怎么樣的。登陸實例后,分別對兩個存儲過程中的SQL執行explain,發現走的確實是主鍵(meeting_id):

fc56cc28-2deb-11ed-ba43-dac502259ad0.png

為了進一步確認SQL在存儲過程中的實際執行計劃,修改了一下測試的存儲過程邏輯,加入了SQL執行的explain結果和實際執行的trace,過程中主要增加的代碼如下:

fc98aea4-2deb-11ed-ba43-dac502259ad0.png

執行計劃結果如下:

fceb925e-2deb-11ed-ba43-dac502259ad0.png

從結果看,兩個SQL居然真的沒有走主鍵meeting_id索引,而是都走了phone_id這個普通的二級索引,其中第一個查詢SQL走的索引全掃描,掃描記錄數rows為397399,和表的記錄數一致,顯然走了全索引掃描,雖然比全表掃描好一些,但效率仍然低下;另外一個update的SQL走了正常的索引掃描,rows只有2,性能高效。為什么兩個SQL沒有走meeting_id這個主鍵索引呢?看trace打印的部分內容:

fd27f596-2deb-11ed-ba43-dac502259ad0.png

trace顯示兩個SQL在優化器分析時,將meeting_id做了隱式轉換,轉換函數為convert('meeting_id' using utf8mb4),也就是將meeting_id做了字符集的轉換,熟悉索引機制的同學都清楚,這種情況下優化器是不會走meeting_id索引的。這也可以解釋了客戶第一次創建索引的時候為啥有性能提升,但效果并不明顯,原因就是只有update語句真正用到了索引帶來的性能提升,而且是phone_id索引帶來的提升,不是性能更高的主鍵meeting_id。

05 真相大白

現在聚焦到最關鍵的問題,meeting_id為啥要做字符集的隱式轉換?查看了一下實例相關字符集的設置:

  1. 表和列的字符集都為utf8;

  2. 表所在庫的字符集為utf8mb4;

  3. server字符集((character_set_server))為utf8

  4. character_set_client/character_set_connection/character_set_results為utf8mb4

果然,server、database、table的字符集不完全一致,猜想一下實際流程應該是這樣的:存儲過程中傳入的字符參數字符集為utf8mb4,和表中字符集為utf8的字段meeting_id比較時,meeting_id做了字符集的隱式轉換,轉換為utf8mb4后再和輸入參數比較,從而導致meeting_id上的索引無法使用。

根據這個猜測,建議用戶將表的字符集更改為utf8mb4,這樣應該可以避免字符集的轉換。由于這個功能還未上線,用戶直接對 表做了字符集的修改:

alter table zm_meeting convert to character set utf8mb4;

修改后讓用戶再次測試,預期效果終于出現,并發500測試在秒級完成,trace查看執行計劃,都走了meeting_id的主鍵索引,隱式轉換也隨之消失,性能問題得到了徹底解決。

06

后續思考

存儲過程的入參為啥使用了utf8mb4?這是本次案例的核心,查閱mysql文檔,存儲過程介紹里面有一段描述:

fd5b763c-2deb-11ed-ba43-dac502259ad0.png

簡單說,就是存儲過程的字符型參數,如果沒有顯式指定字符集,默認將會使用所在數據庫的字符集,而本案例中表所在的數據庫字符集為utf8mb4,所以參數默認使用了utf8mb4,導致了匹配過程的隱式轉換。存儲過程外直接寫SQL為什么沒有這種情況發生,我猜測比較的字符串應該會自動匹配‘=’左邊表字段的字符集。

既然這樣,理論上直接修改參數的字符集應該也可以達到同樣結果,簡單測試下,將存儲過程參數加上表上的字符集屬性:

CREATE  PROCEDURE `zm_sp_next_phone_id`(IN `p_meeting_id` VARCHAR(36) character set utf8)

測試結果如我們預期,不會產生隱式轉換,執行計劃正確。

問題雖然解決了,原因也找到了,但反思一下整個過程,如果用戶的server、庫、表字符集能夠保持一致,將完全可以避免這個故障。與字符集相關的類似故障也可以大概率避免,所以客戶側還是要有一定的設計規范;產品側如果有一定的檢查規則可以幫客戶發現類似的隱患,對提升客戶體驗也是一種很有價值的服務。

審核編輯:湯梓紅

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

    關注

    6

    文章

    387

    瀏覽量

    29455
  • MySQL
    +關注

    關注

    1

    文章

    829

    瀏覽量

    26734
  • RDS
    RDS
    +關注

    關注

    0

    文章

    103

    瀏覽量

    16892

原文標題:一次較波折的MySQL調優

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    阿里大數據利器之-RDS遷移到Maxcompute實現動態分區

    摘要: 當前,很多用戶的業務數據存放在傳統關系型數據庫,例如阿里RDS,做業務讀寫操作。當數據量非常大的時候,此時傳系關系型數據庫會顯得有些吃力,那么會經常有將mysql數據庫的
    發表于 01-23 18:40

    如此簡單 】 教你如何實施遷移之中小企業篇

    /document_detail/62394.html神器二:數據遷移工具DTS,是一個可以幫助企業一鍵完成本地自建數據庫或者數據庫遷移到
    發表于 03-09 17:19

    全球唯一:MySQL社區2018年度公司貢獻獎頒給阿里

    ,或者正在阿里RDS上解決著你的業務需求:1. 多源復制(Multiple Source Replication)多源復制是在 MySQL 基于 Binary Log 單向一對多復制的基礎
    發表于 04-25 11:51

    阿里如何打破Oracle遷移的壁壘

    數據庫遷移到,我們可以繼續在ECS中運行Oracle,也可以遷移到MySQL。當然也可以將應用及數據庫系統
    發表于 05-29 20:03

    兌吧:從自建HBase遷移到阿里HBase實戰經驗

    物理HBase遷移到阿里HBase最開始我們是物理機房自建HBase,選擇阿里HBase主要出于以下幾個考慮:HBase服務基本免運維
    發表于 06-19 17:32

    請問一下mysql怎么快速遷移到oceanBase啊?

    mysql怎么快速遷移到oceanBase啊
    發表于 05-30 17:04

    Uber為什么從Postgres遷移到MySQL

    。特別是在之前一些使用Postgres的案例中,現在則改用Schemaless(一個基于MySQL的全新數據庫分片)。本文將探索Postgres的缺陷,解釋遷移到MySQL的基礎構建
    發表于 09-30 14:45 ?4次下載
    Uber為什么從Postgres<b class='flag-5'>遷移到</b><b class='flag-5'>MySQL</b>

    輕松云系列之一:本地數據遷移

    在線遷移服務HTTP/HTTPS源遷移教程RDS使用SSMS和BCP遷移SQL Server數據庫使用 DTS 遷移
    發表于 12-18 17:15 ?443次閱讀

    輕松云系列之二:其他數據遷移至阿里

    本文檔圍繞如何將您其他廠商的數據遷移到阿里,提供了多個場景的實踐方案。文檔合集AWS 數據遷移至阿里
    發表于 12-19 16:16 ?435次閱讀

    計算中遷移到和建設私有

    對于互聯網公司而言,遷移到是一個明智的決定。它減少了總的成本支出,同時最大限度地提高了工作效率和生產率,本文將指出遷移到或者建設私有
    的頭像 發表于 04-02 09:16 ?2472次閱讀

    組織如何有效地將業務遷移到平臺

    調研機構Gartner公司指出,如果不采取正確的策略,組織遷移到平臺將會導致成本增加、安全漏洞以及對遷移結果的失望。
    的頭像 發表于 01-03 14:32 ?2108次閱讀

    讓用戶聚焦核心業務,華為數據庫RDS for MySQL表現給力!

    。那么,華為數據庫RDS for MySQL在為企業數字化轉型服務中,究竟有何優勢呢? 據了解,相比自建數據庫,華為數據庫
    的頭像 發表于 10-21 14:35 ?739次閱讀

    華為數據庫 RDS for MySQL,用心保障企業數字化發展

    。為此,華為依托于自身技術水平能力,專門推出了華為數據庫 RDS for MySQL,一一解決這些痛點,助推企業業務快速發展。 華為
    的頭像 發表于 10-23 18:24 ?1173次閱讀
    華為<b class='flag-5'>云</b>數據庫 <b class='flag-5'>RDS</b> for <b class='flag-5'>MySQL</b>,用心保障企業數字化發展

    華為數據庫-RDS for MySQL數據庫

    華為數據庫-RDS for MySQL數據庫 華為數據庫作為華為的一款數據庫產品,它主要是以MyS
    的頭像 發表于 10-27 11:06 ?1569次閱讀

    如何將數據從MySQL遷移到Influxdb中

    如果以前是將時序數據存放在MySQL,現在為了獲取更好的性能和使用可視化工具,我們需要將數據從MySQL遷移到Influxdb中。 這看起來是一個常見場景,經過一番查閱,發現了
    的頭像 發表于 11-02 10:54 ?1306次閱讀
    主站蜘蛛池模板: 久久青草免费91线频观看站街 | 日日噜噜夜夜爽爽 | 亚洲 日韩经典 中文字幕 | 国产99九九久久无码熟妇 | 手机看片一区二区 | 国产精品久久久久成人免费 | 成人国产精品免费网站 | 国产午夜电影院 | 国产精品成人不卡在线观看 | 国产精品久久久久久久久久影院 | 日韩一本在线 | 国产-第1页-浮力影院 | 91交换论坛 | 国产精品JK白丝AV网站 | 粗大分开挺进内射 | 伊人大香线蕉影院在线播放 | 九九热国产视频 | 99E久热只有精品8在线直播 | 成 人 片 免费播放 成 人 免费 黄 色 网站无毒下载 | 东京热百度影音 | 国产亚洲日韩欧美视频 | 午夜DV内射一区二区 | 色戒无删减流畅完整版 | 国产精品亚洲第一区二区三区 | 亚州日韩精品AV片无码中文 | 69SEX久久精品国产麻豆 | 九九精品视频在线播放 | 最新无码国产在线视频9299 | 大迪克黑人异族 | 好妞操 | 亚洲一区免费观看 | 精品午夜国产福利观看 | 久久99影院 | 男人吃奶摸下挵进去啪啪 | 久久99国产精品一区二区 | 色视频色露露永久免费观看 | 欧美不卡一区二区三区 | 亚洲 小说 欧美 激情 另类 | 国产亚洲精品久久综合阿香蕉 | 国产一卡2卡3卡4卡孕妇网站 | 怡春院国产精品视频 |