成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

被面試官問住了,MySQL兩階段提交是什么鬼?

數據庫 MySQL
MySQL中既存在redo log,又存在bin log,這是因為Bin Log是MySQL Server提供的一種歸檔日志,其本身并不具備Crash-Safe能力。而Redo Log本身不具備歸檔能力,他是一種循環寫的日志。

前言

MySQL通過兩階段提交的機制,保證了redo log和bin log的邏輯一致性,進而保證了數據的不丟失以及主從庫的數據一致。

而說起兩階段提交,就不得不先介紹一下redo log和bin log。

redo log

redo log即重做日志,是InnoDB引擎特有的一種日志(有的面試官經常問到這一點)。

redo log主要做什么呢?

以更新數據為例,我們知道,MySQL的數據是存儲在磁盤上的,如果每一次更新數據,都去磁盤尋址找到要更新的數據,進行更新操作的話,這個IO成本是非常高的。

如果是固態硬盤還好,如果是機械硬盤,那么MySQL的更新性能根本無法滿足我們的業務需要。

所以,MySQL采用了一種叫做WAL的技術,Write-Ahead Logging。

當更新數據時,將更新操作(即某個數據頁上做了什么修改)先寫到redo log里面,然后更新內存,這個更新操作就算完成了。MySQL會在服務器空閑的時候,把redo log的操作記錄刷新到磁盤里,以保持數據的一致性。

需要注意的是,redo log雖然也是磁盤上的一個文件,但是由于操作是順序寫,所以性能是非常高的。

當然了,redo log也是有大小上限的,不可能無限制的寫入。

以上圖為例,配置了4個redo log,write pos就是代表當前記錄寫到什么位置了,而check point表示一個推進點,它會不斷的前移,做擦除數據的操作,以保證redo log可以不斷的寫入。

當然,擦除數據之前,會把redo log的記錄刷新到磁盤。

通過redo log,可以保證即使MySQL發生異常重啟,數據也不會丟失(因為redo log是物理日志,可以進行重放),這個特性就叫做crash-safe。

bin log

bin log是MySQL Server提供的一種日志,叫做歸檔日志,所有引擎都可以使用bin log。

那bin log和redo log的區別是什么呢?

1,這兩種日志的提供者不同:bin log是由MySQL Server提供的,redo log是InnoDB引擎特有的。

2,redo log主要記錄的是某個數據頁做了什么修改,bin log記錄的是語句的原始邏輯,比如更新了某一行的某個字段。

3,redo log是循環寫的,數據會被覆蓋。bin log是追加寫,一個文件寫滿,就寫下一個文件。

兩階段提交

介紹完了redo log和bin log,我們再看一下他們兩者是如何配合完成兩階段提交的。

上圖就是一個更新數據的流程,可以看到,在更新一條數據之前,MySQL會先將數據加載到內存,然后更新內存,開始寫redo log。

此時,redo log處于prepare狀態,等到bin log寫完之后,再提交事務,這一條記錄的更新操作就算完成了。

redo log prepare -> 寫bin log -> redo log commit,這個流程就叫做兩階段提交。

下面我們分析一下,采用兩階段提交的好處。

情景一,redo log處于prepare狀態時,如果寫bin log失敗了,那么更新失敗,此時redo log沒有commit,bin log也沒有記錄,兩者的狀態是一致的,沒有問題。

情景二,redo log處于prepare狀態時,寫bin log成功,但是宕機導致commit失敗了。此時bin log產生了記錄,redo log沒有寫入成功,數據暫時不一致。

但是不用擔心,當MySQL重啟時,會檢查redo log中處于prepare狀態的記錄。在redo log中,記錄了一個叫做XID的字段,這個字段在bin log中也有記錄,MySQL會通過這個XID,如果在bin log中找到了,那么就commit這個redo log,如果沒有找到,說明bin log其實沒有寫成功,就放棄提交。

通過這樣的機制,保證了redo log和bin log的一致性。

總結

之所以MySQL中既存在redo log,又存在bin log,這是因為bin log是MySQL Server提供的一種歸檔日志,其本身并不具備crash-safe能力。而redo log本身不具備歸檔能力,他是一種循環寫的日志。

MySQL通過將這兩種日志整合起來,并通過兩階段提交的機制,保證了數據的一致性。

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-12-05 09:33:08

分布式事務

2022-03-28 10:44:51

MySQL日志存儲

2024-12-06 07:10:00

2024-05-21 14:12:07

2020-06-22 07:47:46

提交面試官訂單

2020-08-03 07:04:54

測試面試官應用程序

2023-11-22 09:30:50

e簽寶面試企業面經

2023-07-26 09:24:03

分布式事務分布式系統

2020-05-12 11:05:54

MySQL索引數據庫

2025-03-05 00:01:00

ReduxReact

2017-08-30 18:15:54

MySql

2018-10-29 08:44:29

分布式兩階段提交事務

2023-11-29 07:47:58

DDIA兩階段提交

2019-10-21 09:56:37

MySQLCOUNTInnoDB

2025-06-10 08:02:15

2021-06-03 08:55:54

分布式事務ACID

2024-02-20 08:13:35

類加載引用Class

2021-03-17 08:39:24

作用域作用域鏈JavaScript

2022-12-21 19:04:35

InnoDBMySQL

2025-06-19 08:03:03

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产美女永久免费无遮挡 | 亚洲高清一区二区三区 | 欧美一级一区 | 日韩一二三区视频 | 精品视频导航 | 久久手机视频 | 看毛片网站 | 亚洲精品视频一区 | 国产精品一区二区视频 | 午夜视频在线观看一区二区 | 超碰免费在线观看 | 成人网址在线观看 | 欧美在线国产精品 | 欧美日韩在线精品 | 一区二区手机在线 | 人人干人人干人人 | 国外成人在线视频网站 | 欧美视频三级 | 免费观看黄 | 在线免费观看黄视频 | 亚洲第一av | 欧美日韩国产一区二区三区 | 亚洲不卡一 | 亚洲福利视频一区二区 | 久久99精品久久久97夜夜嗨 | 成人在线视频免费播放 | 国产成人精品一区二 | 国产一区二区激情视频 | 国产不卡在线观看 | 日韩在线一区二区 | 日本免费一区二区三区四区 | 亚洲免费精品 | 中文字幕在线一区 | 男人av在线 | 网站黄色av | 亚洲综合精品 | 国产精品夜夜夜一区二区三区尤 | 久久国产亚洲 | 日韩一区不卡 | 成人免费一区二区三区视频网站 | 久久免费精彩视频 |