偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

CMU15-445 數(shù)據(jù)庫(kù)系統(tǒng)播客:數(shù)據(jù)庫(kù)恢復(fù)機(jī)制 ARIES - LSN、模糊檢查點(diǎn)與 ARIES 三階段協(xié)議

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
ARIES 協(xié)議通過(guò)預(yù)寫(xiě)式日志、重復(fù)歷史的重做、記錄日志的撤銷(xiāo),以及高效的模糊檢查點(diǎn)機(jī)制,完美地解決了高性能 ??STEAL/NO-FORCE?? 策略下的崩潰恢復(fù)難題。它的三個(gè)恢復(fù)階段——分析、重做、撤銷(xiāo)——分工明確,邏輯嚴(yán)謹(jǐn),確保了無(wú)論在何時(shí)發(fā)生崩潰,數(shù)據(jù)庫(kù)都能被恢復(fù)到一個(gè)正確的狀態(tài)。

在數(shù)據(jù)庫(kù)系統(tǒng)的世界里,無(wú)論硬件多可靠,軟件多健壯,意外崩潰(Crash)都是一個(gè)我們必須面對(duì)的現(xiàn)實(shí)。電源故障、操作系統(tǒng) Bug、硬件失靈……任何一個(gè)都可能讓數(shù)據(jù)庫(kù)瞬間“宕機(jī)”。當(dāng)系統(tǒng)重啟時(shí),我們最關(guān)心的問(wèn)題莫過(guò)于:我的數(shù)據(jù)還好嗎?事務(wù)是成功了還是失敗了?數(shù)據(jù)庫(kù)是否還處于一個(gè)一致的狀態(tài)?

為了回答這些問(wèn)題,并確保數(shù)據(jù)的 原子性(Atomicity) 、 持久性(Durability) 和 一致性(Consistency) ,數(shù)據(jù)庫(kù)工程師們?cè)O(shè)計(jì)了復(fù)雜的崩潰恢復(fù)(Crash Recovery)機(jī)制。而在眾多恢復(fù)算法中, ARIES (Algorithms for Recovery and Isolation Exploiting Semantics) 無(wú)疑是現(xiàn)代關(guān)系型數(shù)據(jù)庫(kù)的基石和事實(shí)上的工業(yè)標(biāo)準(zhǔn)。

今天,就讓我們一起深入探索 ARIES 的奧秘,看看它是如何通過(guò)一套精妙的機(jī)制,讓數(shù)據(jù)庫(kù)在崩潰后能夠安全、高效地“起死回生”。

一切的前提:高并發(fā)的緩沖池策略

在深入 ARIES 協(xié)議之前,我們必須先理解它所服務(wù)的數(shù)據(jù)庫(kù)環(huán)境。現(xiàn)代數(shù)據(jù)庫(kù)為了追求高性能,廣泛采用 緩沖池(Buffer Pool) 來(lái)緩存磁盤(pán)上的數(shù)據(jù)頁(yè)。為了最大化并發(fā)和減少 I/O 瓶頸,ARIES 協(xié)議被設(shè)計(jì)為在以下兩種緩沖池策略下工作:

  • STEAL :允許將 尚未提交 的事務(wù)所修改的“臟頁(yè)”(Dirty Pages)寫(xiě)入磁盤(pán)。這避免了緩沖池被巨大的事務(wù)占滿(mǎn),提升了內(nèi)存利用效率。
  • NO-FORCE :事務(wù)提交時(shí), 不強(qiáng)制 要求將該事務(wù)所修改的所有臟頁(yè)立即刷回磁盤(pán)。只需要確保相關(guān)的日志記錄被持久化即可。這極大地降低了提交操作的延遲,提升了系統(tǒng)的吞吐量。

STEAL + NO-FORCE 的組合性能極佳,但它也給恢復(fù)帶來(lái)了挑戰(zhàn):

  • STEAL 的存在意味著磁盤(pán)上可能包含未提交事務(wù)的數(shù)據(jù)。如果系統(tǒng)崩潰,這些數(shù)據(jù)必須被撤銷(xiāo)(Undo)。
  • NO-FORCE 的存在意味著磁盤(pán)上的數(shù)據(jù)可能落后于已提交事務(wù)的狀態(tài)。如果系統(tǒng)崩潰,這些已提交的修改必須被重做(Redo)。

ARIES 的核心使命,正是在這個(gè)高性能但復(fù)雜的環(huán)境下,提供一個(gè)可靠的恢復(fù)方案,同時(shí)處理好 Undo 和 Redo 的問(wèn)題。

ARIES 的三大核心思想

ARIES 的設(shè)計(jì)哲學(xué)可以概括為三個(gè)核心原則,它們共同構(gòu)成了整個(gè)恢復(fù)協(xié)議的基石:

預(yù)寫(xiě)式日志(Write-Ahead Logging - WAL)

這是數(shù)據(jù)庫(kù)恢復(fù)的“黃金法則”。任何對(duì)數(shù)據(jù)頁(yè)的修改,都必須  將描述該修改的日志記錄(Log Record)寫(xiě)入穩(wěn)定的存儲(chǔ)(如磁盤(pán)), 然后 才能將修改后的數(shù)據(jù)頁(yè)寫(xiě)入磁盤(pán)。這個(gè)順序至關(guān)重要,它確保了我們總是有足夠的信息來(lái)恢復(fù)數(shù)據(jù)。日志是所有真相的來(lái)源。

重做時(shí)重復(fù)歷史(Repeating History During Redo)

在恢復(fù)的重做(Redo)階段,ARIES 會(huì)嚴(yán)格按照日志的記錄,從一個(gè)已知的正確狀態(tài)(檢查點(diǎn))開(kāi)始,重新執(zhí)行所有記錄在案的操作,將數(shù)據(jù)庫(kù)恢復(fù)到 崩潰發(fā)生前的確切狀態(tài) 。這包括所有已提交事務(wù)的修改,也包括那些最終需要被回滾的未提交事務(wù)的修改。這個(gè)階段的目標(biāo)是“回到現(xiàn)場(chǎng)”,而不是“清理現(xiàn)場(chǎng)”。

撤銷(xiāo)時(shí)記錄更改(Logging Changes During Undo)

在恢復(fù)的撤銷(xiāo)(Undo)階段,當(dāng)系統(tǒng)回滾一個(gè)未提交的事務(wù)時(shí),這個(gè) 撤銷(xiāo)操作本身也會(huì)被記錄為一種特殊的日志記錄 ——補(bǔ)償日志記錄(Compensation Log Records, CLRs)。這確保了撤銷(xiāo)操作的持久性和冪等性。即使在撤銷(xiāo)過(guò)程中再次發(fā)生崩潰,系統(tǒng)重啟后也能知道哪些操作已經(jīng)被撤銷(xiāo)過(guò),從而避免重復(fù)撤銷(xiāo),保證恢復(fù)過(guò)程的正確性。

ARIES 的“語(yǔ)言”:日志與 LSN

為了精確地追蹤和管理數(shù)據(jù)庫(kù)中的每一次變更,ARIES 引入了一套關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)和概念。

日志序列號(hào)(Log Sequence Number - LSN)

每個(gè)日志記錄都被賦予一個(gè) 全局唯一且單調(diào)遞增的 LSN 。LSN 不僅僅是日志的編號(hào),它像一個(gè)時(shí)間戳,貫穿于整個(gè)系統(tǒng)中,用于協(xié)調(diào)數(shù)據(jù)頁(yè)、事務(wù)和日志之間的狀態(tài)。

以下是幾個(gè)至關(guān)重要的 LSN:

  • pageLSN :記錄在每個(gè)數(shù)據(jù)頁(yè)的頭部,代表 對(duì)此頁(yè)的最后一次修改所對(duì)應(yīng)的日志記錄的 LSN 。
  • flushedLSN :一個(gè)內(nèi)存中的變量,表示已成功持久化到磁盤(pán)的 最后一個(gè)日志記錄的 LSN 。WAL 協(xié)議的核心約束可以表示為:在將一個(gè)數(shù)據(jù)頁(yè)寫(xiě)入磁盤(pán)前,必須保證該頁(yè)的 pageLSN ≤ flushedLSN。
  • recLSN (Recovery LSN):記錄在臟頁(yè)表(DPT)中,表示某個(gè)臟頁(yè) 首次被修改 時(shí)所對(duì)應(yīng)的日志記錄的 LSN。它標(biāo)記了重做操作需要關(guān)注的“最早起點(diǎn)”。
  • lastLSN :記錄在事務(wù)表中,表示該事務(wù)產(chǎn)生的 最新一條日志記錄的 LSN 。
  • MasterRecord LSN :一個(gè)持久化在磁盤(pán)上的特殊位置,指向 最近一次成功完成的檢查點(diǎn)(Checkpoint)的起始 LSN ,是恢復(fù)流程的入口點(diǎn)。

事務(wù)的生命周期日志

事務(wù)提交(Commit)

當(dāng)用戶(hù)執(zhí)行 COMMIT 時(shí),系統(tǒng)會(huì)寫(xiě)入一條 COMMIT 日志記錄,并 同步地(synchronously) 將其連同之前該事務(wù)的所有日志一起刷入磁盤(pán)。只有當(dāng)刷盤(pán)成功后,系統(tǒng)才會(huì)向用戶(hù)確認(rèn)事務(wù)已提交。隨后,系統(tǒng)會(huì)再寫(xiě)入一條 TXN-END 日志記錄,標(biāo)記該事務(wù)的徹底終結(jié)。

事務(wù)撤銷(xiāo)(Abort)與補(bǔ)償日志記錄(CLR)

當(dāng)一個(gè)事務(wù)需要被撤銷(xiāo)時(shí),ARIES 使用日志記錄中的 prevLSN 字段來(lái)高效地回溯。prevLSN 指向由同一個(gè)事務(wù)生成的上一條日志記錄,從而將一個(gè)事務(wù)的所有修改串成一個(gè)反向鏈表。

更關(guān)鍵的是,每當(dāng) ARIES 撤銷(xiāo)一個(gè)更新操作時(shí),它會(huì)生成一條 CLR (Compensation Log Record) 并寫(xiě)入日志。CLR 描述了“為了撤銷(xiāo) LSN 為 X 的操作,我做了 Y”。

為什么 CLR 至關(guān)重要? 想象一下在撤銷(xiāo)過(guò)程中系統(tǒng)再次崩潰。重啟后,恢復(fù)過(guò)程會(huì)進(jìn)入 Redo 階段,它會(huì)重放所有日志,包括這些 CLR。通過(guò)重放 CLR,系統(tǒng)能將已經(jīng)完成的撤銷(xiāo)操作恢復(fù),然后從中斷處繼續(xù)撤銷(xiāo),而不會(huì)錯(cuò)誤地去撤銷(xiāo)一個(gè)已經(jīng)被撤銷(xiāo)過(guò)的原始操作。 CLR 自身是不需要被撤銷(xiāo)的 ,這巧妙地避免了無(wú)限循環(huán)的撤銷(xiāo)問(wèn)題。

檢查點(diǎn)(Checkpointing):為快速恢復(fù)鋪路

如果每次恢復(fù)都需要從頭掃描所有日志,那將是一場(chǎng)災(zāi)難。 檢查點(diǎn)(Checkpointing) 的目的就是定期創(chuàng)建一個(gè)“快照”,以限定恢復(fù)時(shí)需要處理的日志范圍。

早期的檢查點(diǎn)機(jī)制是阻塞式的,它會(huì)暫停所有事務(wù)處理,這嚴(yán)重影響了系統(tǒng)可用性。ARIES 采用了一種更優(yōu)雅的方案—— 模糊檢查點(diǎn)(Fuzzy Checkpoint) 。

模糊檢查點(diǎn) 不會(huì)暫停系統(tǒng) ,它在允許事務(wù)正常運(yùn)行的同時(shí),悄悄地完成以下工作:

  1. 寫(xiě)入一條 CHECKPOINT-BEGIN 日志記錄。
  2. 掃描緩沖池,記錄下當(dāng)前 活動(dòng)事務(wù)表(Active Transaction Table - ATT) 和 臟頁(yè)表(Dirty Page Table - DPT) 的快照。

a.ATT :包含檢查點(diǎn)開(kāi)始時(shí)所有尚未完成的事務(wù)及其狀態(tài)(如 Running, Committing)。

b.DPT :包含緩沖池中所有臟頁(yè)的 ID 及其 recLSN。

  1. 將 ATT 和 DPT 的快照信息寫(xiě)入一條 CHECKPOINT-END 日志記錄。
  2. 將 CHECKPOINT-BEGIN 的 LSN 更新到 MasterRecord 中。

通過(guò)這個(gè)快照,恢復(fù)系統(tǒng)就不再需要從日志的“創(chuàng)世紀(jì)”開(kāi)始掃描,而只需從最近的檢查點(diǎn)開(kāi)始,大大縮短了恢復(fù)時(shí)間。

王者歸來(lái):ARIES 的三階段恢復(fù)協(xié)議

當(dāng)數(shù)據(jù)庫(kù)從崩潰中重啟,ARIES 將嚴(yán)格按照以下三個(gè)階段執(zhí)行恢復(fù),確保數(shù)據(jù)最終的正確性。

階段一:分析(Analysis)

目標(biāo) :確定崩潰時(shí)數(shù)據(jù)庫(kù)的狀態(tài)——哪些事務(wù)是“失敗者”(需要回滾),哪些頁(yè)是“臟”的(可能需要重做)。

過(guò)程 :

  1. 從 MasterRecord 指向的最后一個(gè)檢查點(diǎn)開(kāi)始, 向前 掃描日志,直至日志末尾。
  2. 根據(jù)日志內(nèi)容,動(dòng)態(tài)地重建 ATT 和 DPT 。
  3. 如果日志記錄屬于一個(gè)新事務(wù),則將其加入 ATT。
  4. 如果日志記錄是 COMMIT 或 TXN-END,則更新或移除 ATT 中的對(duì)應(yīng)事務(wù)。
  5. 如果日志記錄是一個(gè)更新操作,且其影響的頁(yè)不在 DPT 中,則將該頁(yè)加入 DPT。

結(jié)果 :分析階段結(jié)束后,我們得到一個(gè)精確的 ATT(包含所有在崩潰時(shí)仍活躍的事務(wù))和 DPT(包含所有在崩潰時(shí)可能仍在內(nèi)存中且未刷盤(pán)的臟頁(yè))。

階段二:重做(Redo)

目標(biāo) :重復(fù)歷史,將數(shù)據(jù)庫(kù)恢復(fù)到崩潰前的確切物理狀態(tài)。

過(guò)程 :

  1. 從分析階段得到的 DPT 中最小的 recLSN 開(kāi)始, 向前 掃描日志。這是個(gè)重要的優(yōu)化,因?yàn)槿魏卧诖酥暗男薷目隙ㄒ呀?jīng)被包含在檢查點(diǎn)之前的某個(gè)時(shí)間點(diǎn)刷盤(pán)了。
  2. 對(duì)于每一條更新日志記錄或 CLR,檢查它所影響的數(shù)據(jù)頁(yè)。
  3. 如果頁(yè)面的 pageLSN小于 當(dāng)前日志記錄的 LSN,意味著這個(gè)修改尚未在頁(yè)面上體現(xiàn),因此 執(zhí)行重做操作 (即重新應(yīng)用修改),并更新頁(yè)面的 pageLSN。否則,跳過(guò)。
  4. 此階段 不會(huì) 生成新的日志記錄。

結(jié)果 :重做階段完成后,數(shù)據(jù)庫(kù)的狀態(tài)與崩潰瞬間完全一致。所有已提交的修改都被應(yīng)用,所有未提交的修改也暫時(shí)被應(yīng)用。

階段三:撤銷(xiāo)(Undo)

目標(biāo) :清理現(xiàn)場(chǎng),將所有在分析階段被確定為“失敗者”的事務(wù)(即 ATT 中未提交的事務(wù))的所有修改進(jìn)行回滾。

過(guò)程 :

  1. 從 ATT 中 identified 的“失敗者”事務(wù)集合(Loser Transactions)開(kāi)始。
  2. 以 LSN 降序 (即從后往前)的方向,利用 prevLSN 鏈表,撤銷(xiāo)這些事務(wù)的每一個(gè)操作。
  3. 對(duì)于每一次撤銷(xiāo)操作,都生成一條對(duì)應(yīng)的 CLR 日志記錄 ,并寫(xiě)入日志。
  4. 當(dāng)一個(gè)“失敗者”事務(wù)的所有修改都被撤銷(xiāo)后,為其寫(xiě)入一條 TXN-END 日志記錄。

結(jié)果 :撤銷(xiāo)階段完成后,所有未提交事務(wù)的影響被徹底消除。數(shù)據(jù)庫(kù)達(dá)到了一致且持久的狀態(tài),可以安全地開(kāi)放給新的事務(wù)。

總結(jié)

ARIES 協(xié)議通過(guò)預(yù)寫(xiě)式日志、重復(fù)歷史的重做、記錄日志的撤銷(xiāo),以及高效的模糊檢查點(diǎn)機(jī)制,完美地解決了高性能 STEAL/NO-FORCE 策略下的崩潰恢復(fù)難題。它的三個(gè)恢復(fù)階段——分析、重做、撤銷(xiāo)——分工明確,邏輯嚴(yán)謹(jǐn),確保了無(wú)論在何時(shí)發(fā)生崩潰,數(shù)據(jù)庫(kù)都能被恢復(fù)到一個(gè)正確的狀態(tài)。

盡管 ARIES 的細(xì)節(jié)非常復(fù)雜,但理解其核心思想,對(duì)于我們深入認(rèn)識(shí)現(xiàn)代數(shù)據(jù)庫(kù)的健壯性與可靠性至關(guān)重要。正是因?yàn)橛邢?ARIES 這樣強(qiáng)大的“守護(hù)者”,我們才能放心地將數(shù)據(jù)托付給數(shù)據(jù)庫(kù)系統(tǒng)。

責(zé)任編輯:武曉燕 來(lái)源: Piper蛋窩
相關(guān)推薦

2025-08-18 07:32:23

2025-08-14 07:32:42

2025-08-11 02:00:00

2025-08-12 07:31:11

2025-08-11 02:25:00

數(shù)據(jù)庫(kù)數(shù)據(jù)模型

2025-08-04 06:00:00

2025-08-21 06:39:13

2025-08-06 01:22:00

2025-08-06 00:00:00

2025-08-11 07:31:40

2025-08-18 05:11:00

數(shù)據(jù)庫(kù)系統(tǒng)播客

2025-08-04 07:31:30

2025-08-22 06:49:20

2025-08-13 07:31:18

2025-08-08 07:37:07

2025-08-07 07:31:42

2025-08-26 02:12:00

2025-08-26 03:15:00

2025-08-18 01:01:00

樂(lè)觀并發(fā)控制

2025-08-20 07:40:05

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)