【經驗】GaussDB(for MySQL)性能優化 —— 日志的“快遞驛站”

      網友投稿 622 2025-04-02

      【經驗】GaussDB(for MySQL)性能優化 —— 日志的“快遞驛站”


      GaussDB(for MySQL)數據庫在寫入性能上,在業界同類產品中是最好的,這主要得益于GaussDB(for MySQL)在MySQL內核方面的諸多優化。其中有一項從“送快遞”得來靈感的優化——事務異步提交,值得我們分析。

      背景

      我們先來看看MySQL 8.0的事務提交的大致流程

      圖1 MySQL 8.0事務執行流程

      以上流程,是MySQL8.0對WAL原則的一種實現,這個流程意味著,任何一個事務的提交,一定要完成write buffer和flush to disk流程。

      然而那么這個流程中,有一個問題:每個服務器的CPU是有限的,服務器能處理的Thread也是有上限的,那么當我們的業務的并發數量,遠遠大于我們服務器能并行處理的數量時,那么后來的事務,只能等待前面的事務提交后才能被處理。在這之前,他們什么也做不了。因此,在大并發場景下,如何進一步提升線程的使用率,是大并發事物寫入的一個關鍵。

      靈感來源于生活

      一個優化,并不是憑空想象出來的,有時候,往往來源于現實生活。下面,我們先來看看我們身邊,和事務提交流程非常類似的一個例子:快遞。

      現在的快遞配送,一般一個快遞員會負責一片區域,快遞剛開始興起時,數量不多,那么一個快遞員基本上可以在規定時間內完成配送。

      圖2 過去的快遞配送

      但是,隨著快遞數量越來越多,一個快遞員要在一個小區配送很長的時間,才能到下一個小區,常常導致了快遞員無法準時的配送。在這個問題的催動下,隨后,一個新的行業開始出現 – 快遞驛站。

      圖3 現在的快遞配送

      快遞的優化原理

      接下來,讓我們來看下,快遞驛站究竟解決了什么問題。

      快遞的配送過程中,最耗時的,不是裝貨,不是卸貨,而是電話和等待。配送一個小區的時間,取決于這個最后一個來取快遞的人的時間,在最后一個人取完快遞錢,快遞員除了打電話,做不了其他任何事情(也沒有辦法通知下一個小區的人,因為最后一個人來取得時間是無法確定的)。那么這個等待的時間,對于快遞員來說,就是一種浪費。

      快遞驛站可以很大程度解決這個問題,快遞員到了以后,只需要將快遞卸貨,即可前往下一個小區,剩下的事情,就可以由驛站的人員來完成,大大提升了快遞員的配送效率。

      分析

      回過頭來,我們看看數據庫,如果把Transaction線程看做快遞員,存儲上的文件看做取快遞的人,那么我們會發現兩者有非常大的相似性。那么我們可以像快遞配送優化那樣去優化事務的處理流程嗎?答案是可以的。

      圖4 事務處理和快讀配送非常類似

      根據快遞驛站的優化原理,我們知道,快遞驛站幫快遞員免去了等待客戶取貨的時間,那么事務處理過程中,有沒有等待的過程呢?答案是有的,存儲的IO就是一個較長的等待。數據庫使用經驗豐富的開發人員來都知道,等待redo日志寫入存儲的磁盤IO性能,很大程度上決定了數據庫的寫入性能。對于現代數據庫來說,尤其對于GaussDB(for MySQL)這樣計算于存儲分離的數據庫,存儲的IO耗時,在事務處理的總耗時中,占據了不小的比例,雖然有log buffer的合并寫入,提升并發情況下的整體吞吐,但是如果在等待IO的這段時間中,這些線程能夠去做別的事情(例如處理等待中的其他事務)。那么將會有進一步的性能提升。

      GaussDB(for MySQL)的優化

      既然找到了等待的點,那么我們就可以像快遞配送的優化方法,為數據庫,也創造一個“快遞驛站”,讓“快遞驛站”來做等待的事情,而事務線程就可以去處理其他等待中的事務,讓CPU不會“閑下來”。

      圖5?GaussDB(for MySQL)的“快遞驛站”

      如圖5所示,GaussDB(for MySQL)當redo日志的flush to disk動作完成后,即可進行事務提交,但是此時并不應答客戶端,而是直接處理下一個事務。同時使用少量”post comit worker線程”,來批量等待日志寫入完成(等待的過程其實并不占用CPU),并應答客戶端,這就可以讓“等待”和“下一個事務的處理”并行化,讓CPU“閑不下來”。

      實際測試

      圖6 Sysbench write only 模型下寫入性能測試

      根據實際測試,在標準的sysbench寫入模型下,沒有使用Post Commit時,極限性能是35萬QPS左右,而使用Post commit后,可以到大42萬以上的QPS,提升了20%的寫入性能。

      數據庫 Mysql 華為云數據庫 數據庫 云數據庫 MySQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:更改Excel默認的工作表數根據自己的需要臨時增加工作表(excel怎么按月份增加工作表)
      下一篇:#華為云·尋找黑馬程序員#華為云!我的摯愛!
      相關文章
      大桥未久亚洲无av码在线| 亚洲欧洲日韩综合| 亚洲欧美日韩中文无线码| 亚洲精品线在线观看| 久久青草亚洲AV无码麻豆| 亚洲一区二区三区影院| 亚洲精品无码av人在线观看| 亚洲天堂免费在线视频| 亚洲男人第一无码aⅴ网站| 亚洲av无码一区二区三区天堂| 亚洲无吗在线视频| 亚洲欧洲另类春色校园网站| 亚洲AV成人噜噜无码网站| 亚洲综合中文字幕无线码| 国产人成亚洲第一网站在线播放| 亚洲一区免费视频| 亚洲综合色一区二区三区| 亚洲日产乱码一二三区别| 亚洲丰满熟女一区二区哦| 亚洲aⅴ无码专区在线观看| 亚洲国产精品综合久久网各| 亚洲香蕉免费有线视频| 久久久久久亚洲AV无码专区| 亚洲视频一区在线播放| 亚洲另类小说图片| 亚洲中文字幕无码久久2020 | 亚洲成a人片77777老司机| 亚洲视频在线观看一区| 中文字幕在线观看亚洲| 亚洲三级视频在线观看| 亚洲欧美综合精品成人导航| 自拍偷自拍亚洲精品偷一| 亚洲日韩在线观看免费视频| 亚洲精品成人无码中文毛片不卡| 亚洲伦理一区二区| 亚洲1区1区3区4区产品乱码芒果 | 亚洲免费综合色在线视频| 亚洲国产精品激情在线观看| 亚洲色WWW成人永久网址| 亚洲电影免费在线观看| 亚洲人成电影在线观看网|