<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      高效的千萬級數據全表 update 正確姿勢

      0
      分享至

      釣友寶 (微信小程序):一款專門為 釣友 開發的 免費的 分享釣點地圖與實時天氣的軟件,地圖中標記了所有野釣、釣場、公共水域等的精確位置,支持導航、 預測釣魚位置的魚情 等功能。
      前言

      有些時候在進行一些業務迭代時需要我們對Mysql表中數據進行全表update,如果是在數據量比較小的情況下(萬級別),可以直接執行sql語句,但是如果數據量達到一個量級后,就會出現一些問題,比如主從架構部署的Mysql,主從同步需要需要binlog來完成,而binlog格式如下,其中使用statement和row格式的主從同步之間binlog在update情況下的展示:

      格式 內容 statement 記錄同步在主庫上執行的每一條sql,日志量較少,減少io,但是部分函數sql會出現問題比如random row 記錄每一條數據被修改或者刪除的詳情,日志量在特定條件下很大,如批量delete、update mixed 以上兩種方式混用,一般的語句修改使用statement記錄,其他函數式使用row

      我們當前線上mysql是使用row格式binlog來進行的主從同步,因此如果在億級數據的表中執行全表update,必然會在主庫中產生大量的binlog,接著會在進行主從同步時,從庫也需要阻塞執行大量sql,風險極高,因此直接update是不行的。

      本文就從我最開始的一個全表update sql開始,到最后上線的分批更新策略,如何優化和思考來展開說明。

      直接update的問題

      我們前段時間需要將用戶的一些基本信息存儲從http轉換為https,庫中數據大概在幾千w的級別,需要對一些大表進行全表update,最開始我試探性的跟dba同事拋出了一個簡單的update語句,想著流量低的時候執行,如下:

      update tb_user_info set user_img=replace(user_img,'http://','https://')
      深度分頁問題

      上面肯定是不合理的會給主庫生成binlog、從庫接收binlog寫數據帶來很大的壓力,于是就想使用腳本分批處理如下所示:寫一個這樣的腳本,依次分批替換,limit的游標不斷增加。

      大概一看是沒有問題的,但是仔細一想mysql的limit游標進行的范圍查找原理,是下沉到B+數的葉子節點進行的向后遍歷查找,在limit數據比較小的情況下還好,limit數據量比較大的情況下,效率很低接近于全表掃描,這也就是我們常說的“深度分頁問題”。

      update tb_user_info set user_img=replace(user_img,'http://','https://') limit 1,1000;
      in的效率

      既然mysql的深分頁有問題,那么我就把這批id全部查出來,然后更新的id in這些列表,進行批量更新可以嗎?

      于是我又寫了類似下面sql的腳本。結果是還不行,雖然mysql對于in這些查找有一些鍵值預測,但是仍然是很低效。

      select * from tb_user_info where id> {index} limit 100; update tb_user_info set user_img=replace(user_img,'http','https')where id in {id1,id3,id2};
      最終版本

      最終在與dba的多次溝通下,我們寫了如下的sql及腳本,這里有幾個問題需要注意,我們在select sql中使用了這個語法法/*!40001 SQL_NO_CACHE */,這個語法的意思就是本次查詢不使用innodb的buffer pool,也不會將本次查詢的數據頁放到buffer pool中作為熱點數據的緩存。

      接著對于查詢強制使用主鍵索引 FORCE INDEX(PRIMARY),并且根據主鍵索引排序,排序后的數據進行id游標的篩選。最后執行update更新時,由于我們在前面的sql中查詢到的就是已經排序后的主鍵,因此可以對id執行范圍查找。

      select /*!40001 SQL_NO_CACHE */ id from tb_user_info FORCE INDEX(`PRIMARY`) where id> "1" ORDER BY id limit 1000,1; update tb_user_info set user_img=replace(user_img,'http','https') where id >"{1}" and id <"{2}";

      我們可以僅關注第一個sql,如下圖所示,是buffer pool大概內容,我們可以通過這個no cache的關鍵字,對批量處理的數據進行強制指定不走buffer pool,不把這些冷數據影響到正常使用的緩存內容,防止效率的降低,其實mysql在一些備份的動作中。

      使用的數據掃描sql也會帶上這個關鍵字,防止影響到正常的業務緩存;接著需要強制對當前查詢指定的主鍵索引,然后進行排序,否則mysql有可能在計算io成本進行索引選擇時,選擇其他的索引。


      使用這樣的方式對數據庫進行批量更新可以通過一個接口來控制速率,對于數據庫主從同步、iops、內存使用率等關鍵屬性進行觀察,手動調整刷庫速率。這樣看是單線程阻塞的操作,其實接口也可以定義線程個數等屬性,接口中根據賦予的線程個數,通過線程池并行刷數據,從而提高全表更新速率的上限,同時對速率進行控制控制。

      其他問題

      如果我們使用snowflake雪花算法或者自增主鍵來生成主鍵id的話,插入的記錄都是根據主鍵id順序插入的,如果使用uuid這種我們怎么處理?

      當然是業務中就預先處理了,先把入庫的數據提前進行替換,進行代碼上線后再進行的全量數據更新了。

      結語

      刷數據本來是一個異常枯燥的工作內容,但是從這次數據量較大的數據更新從而與dba同事的多次溝通后,也對mysql有了一些新的理解,包括不限于下面幾個,共同學習。

      • binlog格式帶來的大數據量更新的主從同步問題;

      • Mysql深分頁的效率問題;

      • 全表掃數據如何防止對buffer pool污染到我們業務正常的熱點數據。


      Java精選面試題 (微信小程序):5000+道面試題和選擇題,包含Java基礎、MQ、Redis、SpringBoot、Elasticsearch、Docker、K8s、Flink、Spark、架構設計、大廠真題等,在線隨時刷題!
      來源:https://juejin.cn/post/6897185211340029966

      公眾號“Java精選”所發表內容注明來源的,版權歸原出處所有(無法查證版權的或者未注明出處的均來自網絡,系轉載,轉載的目的在于傳遞更多信息,版權屬于原作者。如有侵權,請聯系,筆者會第一時間刪除處理!

      最近有很多人問,有沒有讀者或者摸魚交流群!加入方式很簡單,公眾號Java精選,回復“加群”,即可入群!

      文章有幫助的話,點在看,轉發吧!

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      大連旅順一座老塔剛傳出要拆,日本立馬跳腳,開口就討“廢料”

      大連旅順一座老塔剛傳出要拆,日本立馬跳腳,開口就討“廢料”

      百態人間
      2025-12-19 16:48:22
      華子轟26+12仍無緣今日最佳!對不起,你碰到不講理的文班亞馬了

      華子轟26+12仍無緣今日最佳!對不起,你碰到不講理的文班亞馬了

      世界體育圈
      2025-12-20 13:38:48
      “成都27歲女子家門口被殺案”宣判,法院認為被告人行為不構成自首

      “成都27歲女子家門口被殺案”宣判,法院認為被告人行為不構成自首

      澎湃新聞
      2025-12-20 15:06:27
      “英國關之琳”閃婚大25歲白頭大叔,全網崩潰:垃圾堆里找男人?

      “英國關之琳”閃婚大25歲白頭大叔,全網崩潰:垃圾堆里找男人?

      陳天宇
      2025-12-20 00:04:13
      臺北市長蔣萬安將赴上海,行程曝光

      臺北市長蔣萬安將赴上海,行程曝光

      第一財經資訊
      2025-12-19 21:59:17
      小米17 Ultra代號夜神 盧偉冰:絕對是最強Ultra

      小米17 Ultra代號夜神 盧偉冰:絕對是最強Ultra

      快科技
      2025-12-20 22:58:07
      楊晨成國安新帥最大黑馬!球迷呼吁名宿回歸,德甲背景成關鍵優勢

      楊晨成國安新帥最大黑馬!球迷呼吁名宿回歸,德甲背景成關鍵優勢

      光輝與陰暗
      2025-12-20 23:57:45
      碾壓,曼城英超對陣西漢姆聯已連續20場不敗+7連勝

      碾壓,曼城英超對陣西漢姆聯已連續20場不敗+7連勝

      懂球帝
      2025-12-21 01:17:58
      邢自強:如果房地產不實現止跌回穩,很難打破消費疲軟等問題

      邢自強:如果房地產不實現止跌回穩,很難打破消費疲軟等問題

      新浪財經
      2025-12-18 15:48:03
      陳志的可怕,不在他有多狠,而在于他一路順風順水

      陳志的可怕,不在他有多狠,而在于他一路順風順水

      熱點菌本君
      2025-11-10 15:45:57
      2025國劇最高分!《反人類暴行》豆瓣開分8.5

      2025國劇最高分!《反人類暴行》豆瓣開分8.5

      新京報
      2025-12-19 17:46:22
      驚心動魄!60歲老人因意外“頭頸分離”直送ICU,經廣州醫生搶救獲重生

      驚心動魄!60歲老人因意外“頭頸分離”直送ICU,經廣州醫生搶救獲重生

      極目新聞
      2025-12-20 08:38:15
      網友們終于把蒸汽機發明這事給理明白了

      網友們終于把蒸汽機發明這事給理明白了

      清暉有墨
      2025-11-24 14:01:50
      早就想打!日媒首次爆料:中國雙航母出動時日軍戰機已做戰斗準備

      早就想打!日媒首次爆料:中國雙航母出動時日軍戰機已做戰斗準備

      詩意世界
      2025-08-21 13:13:50
      國際足聯官宣,登貝萊再破天花板,讓梅西和整個體壇都“沉默”了

      國際足聯官宣,登貝萊再破天花板,讓梅西和整個體壇都“沉默”了

      負面黑洞
      2025-12-20 07:31:41
      摩爾線程發布新一代GPU架構“花港”:能效提升10倍,支持十萬卡以上智算集群

      摩爾線程發布新一代GPU架構“花港”:能效提升10倍,支持十萬卡以上智算集群

      澎湃新聞
      2025-12-20 10:48:26
      俄羅斯沒想到,美國更沒想到,如今的中國石油,成為石油遙遙領先

      俄羅斯沒想到,美國更沒想到,如今的中國石油,成為石油遙遙領先

      生活新鮮市
      2025-12-20 16:24:32
      荷蘭不給晶圓,聞泰有新招

      荷蘭不給晶圓,聞泰有新招

      觀察者網
      2025-12-20 08:36:14
      連場轟20+!中國女籃26歲2米王牌閃耀:升聯盟第2,宮帥招她嗎?

      連場轟20+!中國女籃26歲2米王牌閃耀:升聯盟第2,宮帥招她嗎?

      李喜林籃球絕殺
      2025-12-20 16:09:28
      中日交惡,錯在中方?第二個指責我國的出現,點名中國用詞激烈

      中日交惡,錯在中方?第二個指責我國的出現,點名中國用詞激烈

      肖茲探秘說
      2025-11-25 13:12:05
      2025-12-21 01:51:00
      Java精選
      Java精選
      一場永遠也演不完的戲
      1764文章數 3859關注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時刻"還未到來

      頭條要聞

      印度官員:若"臺灣有事" 印度不太可能像西方那樣回應

      頭條要聞

      印度官員:若"臺灣有事" 印度不太可能像西方那樣回應

      體育要聞

      我開了20年大巴,現在是一名西甲主帥

      娛樂要聞

      2026央視跨年晚會陣容曝光,豪華陣仗

      財經要聞

      求解“地方財政困難”

      汽車要聞

      嵐圖推進L3量產測試 已完成11萬公里實際道路驗證

      態度原創

      本地
      時尚
      旅游
      健康
      公開課

      本地新聞

      云游安徽|訪黃山云海古村,讀一城山水風骨

      最顯腿細的騎士靴,誰穿誰是腿精

      旅游要聞

      虹口新春“五必”榜單來啦!一季度“樂購樂游”攻略輕松拿捏!

      這些新療法,讓化療不再那么痛苦

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 狠狠躁夜夜躁人人爽天天5| 久久青青草原亚洲AV无码麻豆| 性人久久久久| 超碰97人人天天蜜芽| 91在线综合| 凌海市| 性视频网址| 亚洲一区二区三区18禁| 色偷偷综合网,欧美日韩| 阿图什市| 无码帝国www无码专区色综合| 一本大道久久香蕉成人网| 无码人妻精品一区二区三区66| 亚洲精品无码专区在线| 98精品全国免费观看视频| 91福利姬| 日本熟妇人妻xxxxx人hd| 国产在线精品一区二区在线看| 无码色色| 国产精品午夜无码AV天美传媒| 婷婷综合社区| jjzzxxxx| 久久精品无码中文字幕| 米奇影视第四色| 久久国产精品偷| 久久久久亚洲av成人网址| 天堂无码| 亚洲性受| 色www88| 国产精品久久久久久久9999| 人妻va精品va欧美va| 国产精品伦子伦免费视频| 精品久久久中文字幕人妻| 亚洲精品久久久久午夜福禁果tⅴ| 揉着我的奶从后面进去视频| 99精品国产一区二区三区不卡 | 人妻体内射精一区二区三四| 久久人爽人人爽人人片av| 亚洲熟妇无码av在线播放| 1024你懂的国产精品| 爱3P|