這篇文章給大家介紹MySQL 8在性能設(shè)計(jì)上的改變是怎么樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),洪江管理區(qū)企業(yè)網(wǎng)站建設(shè),洪江管理區(qū)品牌網(wǎng)站建設(shè),網(wǎng)站定制,洪江管理區(qū)網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,洪江管理區(qū)網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
MYSQL 8 的在性能上的設(shè)計(jì)在MYSQL 的歷史上是具有突破性的,也是從底層的架構(gòu)上進(jìn)行的改變,可能未來MYSQL 越來越不像原來的MYSQL,長遠(yuǎn)看MYSQL 是朝著企業(yè)和互聯(lián)網(wǎng)通吃的方向去的,其實(shí)MYSQL本身的設(shè)計(jì)和其他的數(shù)據(jù)庫相比是有差距的,例如doublewrite對性能的損耗,以及在RR上的GAP 其實(shí)可能對有些其他數(shù)據(jù)庫的使用者都是吐槽的對象。
而從MYSQL 8 上的新設(shè)計(jì)上來看,REDO LOG (WAL)的設(shè)計(jì)是進(jìn)行改變了,這也是為什么會(huì)期盼MYSQL8 的聲音很多的原因之一。
老的MYQL的設(shè)計(jì)在目前越來越多,越復(fù)雜的任務(wù)中,REDO LOG 的設(shè)計(jì)的確說不上有多出色。
而新的設(shè)計(jì),突發(fā)的就是他的并發(fā)性,這其實(shí)在程序設(shè)計(jì)里面并不容易,到底以什么來決定并發(fā)性,在程序設(shè)計(jì)里面如果是串行的,解決的方法都比較簡單,也不容易出錯(cuò),而只要設(shè)計(jì)并發(fā)性這樣的問題,則需要考慮的問題就很多,那個(gè)在前那個(gè)在后,無關(guān)聯(lián)的是否可以同時(shí)進(jìn)行,并行對目前的磁盤壓力是否可以接受,等等,如何在并行中又保持一個(gè)順序。(個(gè)人覺得和MTS 的部分有類似的想法)
多線程的操作中,單個(gè)線程有自己的內(nèi)部鎖保證刷新的順序,但和之前的設(shè)計(jì)不同的地方是不再以LSN 號(hào)作為一個(gè)刷新的順序。但需要考慮的是 checkpoint 和 flushing 總體的順序,因?yàn)镽EDO LOG 最終的目的是在DATABASE CRASH 時(shí)進(jìn)行回滾,回滾是一定要有順序的。
下圖就是一個(gè)(粗糙)的解釋,上面是原先MYSQL的設(shè)計(jì),下面是MYSQL8 的設(shè)計(jì),如果從時(shí)間的角度來看,MYSQL8 的redo 刷新的設(shè)計(jì)是要節(jié)省時(shí)間的(如果長度代表時(shí)間的話)
而最終造成的效果就是 一整段的 dirty pages 寫入不在是順序性,(大括號(hào)的位置是未寫入的數(shù)據(jù))這里面會(huì)有一個(gè) log_closer thread 去掃描哪些是完成的段,并且更新哪些是已經(jīng)完成的最大 LSN 號(hào)。
關(guān)于MYSQL 8在性能設(shè)計(jì)上的改變是怎么樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。