您好,登錄后才能下訂單哦!
這篇文章給大家介紹MYSQL 8在性能設計上的改變是怎么樣的,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
MYSQL 8 的在性能上的設計在MYSQL 的歷史上是具有突破性的,也是從底層的架構上進行的改變,可能未來MYSQL 越來越不像原來的MYSQL,長遠看MYSQL 是朝著企業和互聯網通吃的方向去的,其實MYSQL本身的設計和其他的數據庫相比是有差距的,例如doublewrite對性能的損耗,以及在RR上的GAP 其實可能對有些其他數據庫的使用者都是吐槽的對象。
而從MYSQL 8 上的新設計上來看,REDO LOG (WAL)的設計是進行改變了,這也是為什么會期盼MYSQL8 的聲音很多的原因之一。
老的MYQL的設計在目前越來越多,越復雜的任務中,REDO LOG 的設計的確說不上有多出色。
而新的設計,突發的就是他的并發性,這其實在程序設計里面并不容易,到底以什么來決定并發性,在程序設計里面如果是串行的,解決的方法都比較簡單,也不容易出錯,而只要設計并發性這樣的問題,則需要考慮的問題就很多,那個在前那個在后,無關聯的是否可以同時進行,并行對目前的磁盤壓力是否可以接受,等等,如何在并行中又保持一個順序。(個人覺得和MTS 的部分有類似的想法)
多線程的操作中,單個線程有自己的內部鎖保證刷新的順序,但和之前的設計不同的地方是不再以LSN 號作為一個刷新的順序。但需要考慮的是 checkpoint 和 flushing 總體的順序,因為REDO LOG 最終的目的是在DATABASE CRASH 時進行回滾,回滾是一定要有順序的。
下圖就是一個(粗糙)的解釋,上面是原先MYSQL的設計,下面是MYSQL8 的設計,如果從時間的角度來看,MYSQL8 的redo 刷新的設計是要節省時間的(如果長度代表時間的話)
而最終造成的效果就是 一整段的 dirty pages 寫入不在是順序性,(大括號的位置是未寫入的數據)這里面會有一個 log_closer thread 去掃描哪些是完成的段,并且更新哪些是已經完成的最大 LSN 號。
關于MYSQL 8在性能設計上的改變是怎么樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。