關(guān)于My(//ω//)SQL中的(╥_╥)何影(′?`*)LSN(Log Sequence Number,日志序列號)一致ヽ(′ー`)ノ性級別的響事詳??細解釋?zhuān)??可以分成以下幾個(gè)小標題進(jìn)行展開(kāi):
(圖片來(lái)源網(wǎng)絡(luò ),中致性ヽ(′?`)ノ侵刪)1、何影LSN概念
定義:在MySQL中,響事LSN是中致性InnoDB存儲引擎用來(lái)跟蹤事務(wù)日志中各ヾ(^-^)ノ個(gè)記錄位置的唯一標識符,它是(╯°□°)╯︵ ┻━┻何影一個(gè)不斷遞增的整數,通常占用8個(gè)字節。響事
功能:LSN用于保證數據??一致性、中致性??支持崩潰恢復、何影實(shí)(′?`*)現多版本并發(fā)控制(MVCC)以及進(jìn)行日志管理。響事
2、LSN特性
遞增性:LSN是一個(gè)不斷遞增的整數,每當有新的日志記錄被寫(xiě)入redo log,LSN值就會(huì )隨之增加。
全局唯一:在整個(gè)MySQL實(shí)例中,LSN是全局唯一的??,即使在多線(xiàn)程并發(fā)寫(xiě)入日志的情況下,也不會(huì )有兩??個(gè)日志??記錄具有相同的LSN。
關(guān)聯(lián)性:LSN不僅與redo log條目關(guān)聯(lián),還與數據庫的數據頁(yè)、undo頁(yè)以及其他內部數據結構相關(guān)聯(lián)。
(圖片來(lái)源網(wǎng)絡(luò ),侵刪)3、LSN用途
崩潰恢復:InnoDB的崩潰恢復過(guò)程依賴(lài)于LSN,在數據庫重啟時(shí),InnoDB會(huì )從最后一個(gè)checkpoint LSN開(kāi)始,逆序掃描redo log,將日志中記錄(′?ω?`)的更改重新應用于數據頁(yè),以確保數據的一致性。
多版本控制:LSN有助于實(shí)現MVCC,InnoDB為每一行數據存儲多個(gè)版本,每個(gè)版本都有其對應的創(chuàng )建LSN,當查詢(xún)執行時(shí),InnoDB使用當前事務(wù)的視圖和行數據的LSN來(lái)決定可見(jiàn)性。
日志管理:LSN??ˉ\_(ツ)_/ˉ用于管理redo log文件??的循環(huán)使用和截斷,當某個(gè)LSN之前的日志記錄已經(jīng)被安全應用到數據頁(yè),InnoDB可以安全地截斷redo log,釋放空間給新的日志記錄。
4、LSN與一致性級別
一致性級別:Pola??rDB提供了四種(zhong)一致性級別,包括最(╯‵□′)╯(zui)終一致性、會(huì )話(huà)一致性、全局一致性和全局一致性(高性能模式)。
會(huì )話(huà)一致性:PolarDB通過(guò)(guo)追蹤各個(gè)節點(diǎn)已經(jīng)應用的Redo日志位點(diǎn)(即LSN)來(lái)保證會(huì )話(huà)一致性,??每次數據更新時(shí),PolarDB會(huì )記錄此次更新的位點(diǎn)為Session LSN,當有新請求到來(lái)時(shí),Pヽ(′▽?zhuān)?ノolarDB會(huì )比(bi)較Session LSN和當??前各個(gè)節點(diǎn)的LSN,僅將請求發(fā)往LSN大于或等于Session LSN的節點(diǎn)。
(圖片來(lái)源網(wǎng)絡(luò ),侵刪)全局一致性:為了解決會(huì )話(huà)一致性無(wú)法保證的問(wèn)題,PolarDB提供了全局一致性,每個(gè)讀請求到達PolarDB數據庫代理時(shí),代理都會(huì )先去主節點(diǎn)確認當前最新的LSN位點(diǎn),然后等待所有??只讀節點(diǎn)的LSN都更新至主節點(diǎn)?的LSN位點(diǎn)后,代理再將讀請求發(fā)送至只讀節點(diǎn)。