日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL 8.0 redo log的深入解析

瀏覽:26日期:2023-10-05 07:04:55
前言

最開始了解mysql實(shí)現(xiàn)的時候,總聽到redo log, WAL(write-ahead logging),undo log這些關(guān)鍵詞,了解到redo log主要是用于實(shí)現(xiàn)事務(wù)的持久化的。為了進(jìn)一步了解redo log,看了下相關(guān)代碼(源碼版本: mysql 8.0.12),這里簡單總結(jié)下,主要介紹redo log是如何產(chǎn)生,如何落盤,以及最終通知用戶的。

redo log的產(chǎn)生

讀寫事務(wù)在執(zhí)行的過程中,會不斷的產(chǎn)生redo log。申請數(shù)據(jù)頁、修改數(shù)據(jù)頁、記錄undo log等,都會產(chǎn)生redo log。mysql將用戶事務(wù)拆分成一個個mtr(mini transaction),redo log最初產(chǎn)生時就是被記錄到mtr中的,并伴隨著mtr的提交而提交,最終落到硬盤上。

redo log 的提交

mtr在提交時,會將mtr中的redo log寫到系統(tǒng)變量log_sys的log buffer中。mysql8.0一個新特性就是redo log提交的無鎖化。在8.0以前,各個用戶線程都是通過互斥量競爭,串行的寫log buffer,因此能保證lsn的順序無間隔增長。8.0時用戶線程可以并發(fā)寫log buffer,如果某個用戶線程寫log buffer成功后,就將自己寫的lsn以前的log buffer刷盤,則有可能導(dǎo)致其他用戶線程寫log buffer還沒完成就被刷盤。

MySQL 8.0 redo log的深入解析

為了解決這個問題,mysql 8.0引入了Link_buf這個數(shù)據(jù)結(jié)構(gòu)來避免log buffer的空洞。Link_buf實(shí)際是一個定長數(shù)組,像滑動窗口一樣跟蹤log buffer一段區(qū)間的寫入情況,隨著log buffer中寫入連續(xù)redo log不斷向前推進(jìn)。

Link_buf的數(shù)據(jù)結(jié)構(gòu)如圖:

MySQL 8.0 redo log的深入解析

當(dāng)用戶在log buffer的start_lsn-end_lsn間寫下redo log時,會標(biāo)記Link_buf相應(yīng)的位置,即將m_link[start_lsn%m_capacity]賦值為為end_lsn-start_lsn。

redo log記錄到log buffer的過程如下:

1.首先,各用戶線程寫redo log時,先根據(jù)redo log長度,向系統(tǒng)全局原子變量log_sys.sn獲取本次redo log日志的start_lsn, end_lsn。原子變量sn能保證各線程獲得的start_lsn-end_lsn區(qū)間連續(xù)無空洞;

MySQL 8.0 redo log的深入解析

2.用戶線程申請到start_lsn-end_lsn區(qū)間后,需要先等待到Link_buf推進(jìn)到自己可以使用的位置。

MySQL 8.0 redo log的深入解析

如圖所示,start_lsn0-end_lsn0,start_lsn2-end_lsn2, start_lsn3-end_lsn3為三個用戶線程新申請的lsn區(qū)間;start_lsn1-end_lsn1對應(yīng)的區(qū)間已經(jīng)標(biāo)記到link_buf上;start_lsn3-end_lsn3距離tail太遠(yuǎn),需要等待link_buf推進(jìn)才能使用;

3.寫入log buffer后,再將start_lsn->end_lsn的范圍標(biāo)記到link_buf(注意:因為只在start_lsn%capacity的位置標(biāo)記link_buf,所以即使end_lsn超過(m_tail, m_tail+m_capacity)也不影響);

MySQL 8.0 redo log的深入解析

4.用戶線程提交事務(wù)時設(shè)置事件log_sys.writer_event,觸發(fā)log_writer線程將日志從redo log buffer寫到系統(tǒng)緩存(log_writer線程自己也會輪詢link_buf判斷是否寫入了新的日志);

5.log_writer線程推進(jìn)m_tail,并將m_tail前的log buffer落盤。

MySQL 8.0 redo log的深入解析

redo log 的落盤及通知

前面簡述了redo log是如何提交的,在redo log提交以及落盤時,涉及多個線程,他們的關(guān)系如下:

MySQL 8.0 redo log的深入解析

用戶線程在讀寫事務(wù)提交時,會產(chǎn)生一些redo log,并隨著mtr提交而記錄到redo log buffer中,隨后用戶線程嘗試設(shè)置writer_event觸發(fā)log_writer線程寫日志,并監(jiān)聽屬于自己的flush_events[i]事件;

log_writer線程推進(jìn)Link_buf.m_tail,將最大連續(xù)lsn前的redo log寫入系統(tǒng)緩存,并設(shè)置flusher_event觸發(fā)log_flusher線程;

log_flusher線程將已寫入系統(tǒng)緩存的日志刷盤,并設(shè)置flush_notifier_event觸發(fā)log_flush_notifier線程通知用戶;

log_flush_notifier根據(jù)已刷盤的lsn換算出需要觸發(fā)的事件,通知用戶線程。

具體實(shí)現(xiàn)時,通過log_sys中的幾個成員變量,跟進(jìn)redo log的寫入情況。其中l(wèi)og_sys.recent_writtern.m_tail表示log buffer最大連續(xù)范圍;log_sys.write_lsn表示寫入到系統(tǒng)緩存的位置;log_sys.flushed_to_disk_lsn表示已落盤的位置。各標(biāo)記的推進(jìn)過程如下:

MySQL 8.0 redo log的深入解析

通知用戶線程

用戶提交事務(wù)時,會根據(jù)innodb_flush_log_at_trx_commit參數(shù),調(diào)用log_wait_for_write或log_wait_for_flush,來等待redo log寫入到系統(tǒng)緩存或刷到硬盤。用戶線程的通知是通過log_sys.flush_events事件數(shù)組來實(shí)現(xiàn)的,為了避免一次通知的flush_events過多,flush_events會像桶一樣劃分給不同的用戶線程:redo log是以一個個log block劃分的,假設(shè)log_sys.flush_events數(shù)組長度為m,則第n個log block的刷盤,由flush_events[n%m]事件監(jiān)聽。當(dāng)log buffer的第L1個log block到第L2個log block被刷盤時,會設(shè)置L1-L2之間的log block所屬的flush_events,從而redo log在L1-L2之間的用戶線程都會收到通知。

MySQL 8.0 redo log的深入解析

總結(jié)

mysql8.0通過redo log無鎖化,解決了用戶線程寫redo log時競爭鎖帶來的性能影響。同時將redo log寫文件、redo log刷盤從用戶線程中剝離出來,抽成單獨(dú)的線程,用戶線程只負(fù)責(zé)將redo log寫入到log buffer,不再關(guān)心redo log的落盤細(xì)節(jié),只需等待log_writer線程或log_flusher線程的通知。

以上就是MySQL 8.0 redo log的深入解析的詳細(xì)內(nèi)容,更多關(guān)于MySQL 8.0 redo log的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
水蜜桃精品av一区二区| 99视频精品全部免费在线视频| 国产高清一区二区| 国产传媒在线观看| 一本大道色婷婷在线| 99精品小视频| 伊人久久成人| 亚洲精品系列| 欧美日韩1区| 国产精品va视频| 精品视频黄色| 久久精品青草| 日韩中文字幕麻豆| 日韩av午夜在线观看| 国产精品成人一区二区网站软件| 国产精品宾馆| 蜜桃精品在线| 亚洲欧美日韩专区| 日av在线不卡| 国产日韩一区二区三免费高清| 精品一区91| 亚洲网站视频| 亚洲精品成人一区| 美女av一区| 九一国产精品| 日韩精品亚洲一区二区三区免费| 国产精区一区二区| 黄色aa久久| 国产一区二区精品| 欧美日韩99| 国产精品二区不卡| 日韩午夜黄色| 国产精品一区三区在线观看| 97精品一区| 宅男噜噜噜66国产日韩在线观看| 日韩精品社区| 高清一区二区| 国产色综合网| 久久国产精品美女| 国内激情久久| 日本a级不卡| 日韩在线二区| 亚洲精品一级| 日韩电影免费网址| 亚洲午夜久久| 日韩欧美不卡| 日韩精品久久理论片| 成人精品动漫一区二区三区| 亚洲在线国产日韩欧美| 国产精品亚洲欧美日韩一区在线| 999久久久免费精品国产| 四虎在线精品| 国产 日韩 欧美一区| 日韩有吗在线观看| 精品欧美一区二区三区在线观看| 日本不卡在线视频| 成人羞羞视频在线看网址| 亚洲aa在线| 精品一区毛片| 精品国产乱码久久久| 亚洲精品乱码| 男女性色大片免费观看一区二区| 欧美日韩一区二区国产 | 精品国产欧美日韩一区二区三区| 婷婷久久一区| 欧美91在线| 久久国产高清| 日韩欧美视频专区| 国产精品美女久久久久久不卡| 好看的av在线不卡观看| 国产中文字幕一区二区三区| 亚洲精品一区二区在线播放∴| 日韩一区二区三区在线免费观看| 欧美日本一区| 国产免费成人| 麻豆精品蜜桃| 久久wwww| 天使萌一区二区三区免费观看| 久久这里只有| 日韩欧美中文字幕在线视频| 久久美女精品| 国产精品99一区二区三区| 日本视频在线一区| 亚洲激情二区| 久久狠狠婷婷| 精品日韩一区| 久久精品72免费观看| 丝袜a∨在线一区二区三区不卡| av综合电影网站| 国产精品国产三级在线观看| 亚洲综合色婷婷在线观看| 亚洲精品午夜av福利久久蜜桃| 成人午夜在线| 国产黄色精品| 欧美亚洲福利| 日本不卡不码高清免费观看| 性欧美长视频| 一区二区视频欧美| 99久久久久久中文字幕一区| 久草免费在线视频| 国产在线视频欧美一区| 国产高清视频一区二区| 国产欧美亚洲一区| 欧美片第1页综合| 日韩动漫一区| 日韩av中文在线观看| 亚洲精品在线国产| 亚洲v天堂v手机在线| 国产精品嫩草99av在线| 黑丝一区二区三区| 黑丝一区二区| 亚洲欧洲一区二区天堂久久| 亚洲精品一区二区妖精| 91精品二区| 91久久国产| 在线一区视频| 天堂av在线一区| 久久xxxx精品视频| 男女精品网站| 蜜桃91丨九色丨蝌蚪91桃色| 在线国产日韩| 日本91福利区| 国产精品白丝av嫩草影院| 国产精品一区二区三区美女| 国产精品久久久久久久久久齐齐| 国产精品久久久久久久免费软件| 国产日韩在线观看视频| 国产精品99久久免费观看| 欧美激情福利| 国产a亚洲精品| 欧美日韩免费看片| 亚洲先锋成人| 视频一区在线播放| 日本中文字幕视频一区| 国产精品中文字幕亚洲欧美| 成人污污视频| 久久国产电影| 石原莉奈在线亚洲二区| 亚洲精品看片| 国产精品xxx| 国产精品亚洲一区二区三区在线观看| 久久久久亚洲| 99香蕉国产精品偷在线观看| 中文在线日韩| 国产精品va视频| 中文在线а√在线8| 亚洲二区视频| 最新亚洲国产| 国产精品久久久久久久久久妞妞 | 国产日韩精品视频一区二区三区| 麻豆一区二区在线| 国产传媒在线观看| 精品在线91| 亚洲综合色婷婷在线观看| 国产精品尤物| 精品国模一区二区三区| 国产一区二区高清| 男人操女人的视频在线观看欧美| 在线看片日韩| 免费成人av在线播放| 亚洲一区二区三区四区五区午夜 | 亚洲www啪成人一区二区| 久久免费精品| 亚洲激情av| 亚洲精品成人一区| 久久福利一区| 91大神在线观看线路一区| 国产精品一区二区三区www| 国产欧美三级| 色婷婷综合网| 日韩欧美激情电影| 久久精品毛片| 涩涩涩久久久成人精品| 久久男人av| 欧美aⅴ一区二区三区视频| 日韩av首页| 成人在线视频区| 青青国产精品| 亚洲伦乱视频| 久久精品人人| 国产精品一区二区美女视频免费看 | 欧美午夜不卡| 国产一区二区三区四区五区| 伊人久久国产| 日韩午夜在线| 国产精品xx| 91视频一区| 日本中文字幕一区二区| 精品欧美一区二区三区在线观看| 奶水喷射视频一区| 久久av日韩| 亚洲性色av| 亚洲精品极品少妇16p| 精品一区毛片| 国产亚洲观看| 一区二区视频欧美| 精品久久美女| 四虎成人精品一区二区免费网站 | 香蕉精品999视频一区二区| 国产在线不卡一区二区三区 |