MySQL 8 日志系統(tǒng)到底比MYSQL 5.X好在哪里,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,集網(wǎng)站策劃、網(wǎng)站設(shè)計、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文發(fā)稿等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計,讓網(wǎng)站在運行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。
實際上MYSQL 5.x的日志系統(tǒng)存在兩個問題,導(dǎo)致一些性能問題,尤其在高并發(fā)寫入和對數(shù)據(jù)修改的情況下,其中的瓶頸的問題在于兩個瓶頸, 當多線程訪問數(shù)據(jù)在落入到 log_buffer 的情況下,還是需要獲取鎖讓寫入有順序性, 同時在獲取redo已經(jīng)將數(shù)據(jù)頁面寫入后,也會在log_buffer中將寫入到日志中的順序進行一個重排,這也是需要有順序性.
有順序性則就會有鎖的需求,否則無法保證系統(tǒng)的硬性需求,所以性能的問題在這個部分就會產(chǎn)生. 下面的源代碼中 log_sys->mutex, log_sys->flush_order_mutex, 對于日志的寫入產(chǎn)生了兩個鎖.
為什么MYSQL 8 要解決這個問題,主要的原因是多CPU 在MYSQL中的使用越來越被支持,而瓶頸在于并發(fā)和順序之間的矛盾.
MYSQL 8 解決關(guān)于鎖的問題,采用了另一種方式,因為記錄必須有順序性,而不在增加鎖,則順序性如何完成, 這里MYSQL 8 采用的方式是預(yù)留空間的方式來對還未寫的日志預(yù)留空間,然后
通過預(yù)留的方式,將log_sys->mutex 數(shù)據(jù)鎖去掉 ,預(yù)留空間的方式可以進行并發(fā)的寫入,保證了之前的部分的順序性,但又沒有相關(guān)的寫入的強制的順序性.
但這還沒有完全解決問題,log_sys->flush_order_mutex 鎖是解決最終刷入到日志中的鎖. 如何避免這個鎖.
MYSQL 8 提出了新的一個數(shù)據(jù)結(jié)構(gòu),來解決以下幾個問題
1 填補的數(shù)據(jù)并沒有完全填充滿, 而其中有空洞的問題
2 怎么能不使用鎖來將信息繼續(xù)有序的刷入到日志中
這里MYSQL 8 采用了log_writer線程來檢測日志中LOG BUFFER 有沒有空洞的問題,如果有寫入就會等待,通過并集的方式來確認LOG BUFFER 寫入的日志是否有空洞,
上圖是官方給出的圖,通過并集很快的可以知道某個塊是否是空, 寫數(shù)據(jù)到log buffer也就從左到右的方式,并且看似是無序的但無序最終是有序的寫入,但不在使用原來的兩個鎖,進行寫入數(shù)據(jù)的控制.
通過更細化的設(shè)計,將原來的數(shù)據(jù)中的瓶頸化解, 這點的設(shè)計,其實和MYSQL GROUP REPLICATION 的化解原有數(shù)據(jù)復(fù)制的瓶頸的想法有共同的地方.
其中把log buffer 中的對應(yīng)的dirty page 并不按照順序添加到flush list. 用戶寫完log buffer 可以將相應(yīng)的 log buffer 對應(yīng)的dirty page 添加到flush list列表中,InnoDB 用一個recent_closed 來記錄添加到flush list 的這一段log buffer 確認是否連續(xù), 那么容易得出, flush list 上page lsn - recent_closed.size() 得到的lsn 用于做checkpoint同時InnoDB 后臺有Log_closer 線程定期檢查recent_closed 是否連續(xù), 如果連續(xù)就把 recent_closed buffer 向前推進, 那么checkpoint 的信息也可以往前推進了.
這里借用某帖子關(guān)于MYSQL 8 改進后整體的數(shù)據(jù)寫入的流程總結(jié)
在整體將MYSQL 8 相關(guān)的改進過了一遍后, 發(fā)現(xiàn)以下幾個問題
1 有鎖的設(shè)計相對簡單,但有鎖的設(shè)計并發(fā)性差
2 無鎖的設(shè)計復(fù)雜,其中,中間段是優(yōu)化的方面,將原來有序的寫入,變?yōu)榱藷o序的寫入,加大了由于順序+鎖的方式造成的寫入的性能瓶頸
3 雖然是無鎖的設(shè)計,但最終數(shù)據(jù)的寫入與原先設(shè)計的方式并沒有區(qū)別,都是有序的.
這里面覺得相關(guān)的數(shù)據(jù)處理方式,由整體,變?yōu)榉稚⑻幚?在重新歸位整體, 增加了多線程并發(fā)寫入的方式, 并且部分預(yù)處理了數(shù)據(jù)刷新到磁盤的方式提高了寫入的速度.
看完上述內(nèi)容,你們掌握MYSQL 8 日志系統(tǒng)到底比MYSQL 5.X好在哪里的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享題目:MYSQL8日志系統(tǒng)到底比MYSQL5.X好在哪里
文章鏈接:http://muchs.cn/article10/gdohgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、面包屑導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)