innodb 02 undo 日誌詳解

2021-10-14 10:19:27 字數 863 閱讀 1884

undo log

undo log有兩個作用:提供回滾和多個行版本控制(mvcc)。

undo log和redo log記錄物理日誌不一樣,它是邏輯日誌。可以認為當delete一條記錄時,undo log中會記錄一條對應的insert記錄,反之亦然,當update一條記錄時,它記錄一條對應相反的update記錄。

undo log是採用段(segment)的方式來記錄的,每個undo操作在記錄的時候占用乙個undo log segment。

另外,undo log也會產生redo log,因為undo log也要實現永續性保護。

當執行rollback時,就可以從undo log中的邏輯記錄讀取到相應的內容並進行回滾

當讀取的某一行被其他事務鎖定時,它可以從undo log中分析出該行記錄以前的資料是什麼,從而提供該行版本資訊,讓使用者實現非鎖定一致性讀取。

儲存引擎對undo的管理採用段的方式。rollback segment稱為回滾段,每個回滾段中有1024個undo log segment。

undo log預設存放在共享表空間中。

果開啟了 innodb_file_per_table ,將放在每個表的.ibd檔案中。

通過undo log記錄delete和update操作的結果發現:(insert操作無需分析,就是插入行而已)

delete操作實際上不會直接刪除,而是將delete物件打上delete flag,標記為刪除,最終的刪除操作是purge執行緒完成的。

update分為兩種情況:update的列是否是主鍵列。

如果不是主鍵列,在undo log中直接反向記錄是如何update的。即update是直接進行的。

如果是主鍵列,update分兩部執行:先刪除該行,再插入一行目標行。

每日演算法 4月11日 02

給定兩個序列,分別為入棧序列和出棧序列,判斷出棧序列是否合理,注 入棧時可能不是一次性全部入棧,也可能不是一次性全部出棧 例如 輸入 pushed 1,2,3,4,5 popped 4,3,5,1,2 輸出 false 解釋 1 不能在 2 之前彈出。首先確定要排除特殊情況,比如給定序列為空或者給定...

flume學習02 日誌記錄除錯

在許多生產環境中,記錄流過攝取流水線的原始資料流是不期望的行為,因為這可能導致洩露敏感資料或安全相關配置,例如到flume日誌檔案的金鑰。預設情況下,flume不會記錄這樣的資訊。另一方面,如果資料流水線斷開,flume將嘗試提供除錯問題的線索。除錯事件管道問題方法 b 確保資料的記錄 bin fl...

DFS 02 生日蛋糕

問題描述 要製作乙個體積為 n 的 m層生日蛋糕,每層都是乙個圓柱體 每層的高度和半徑都比下一層至少 少1,由於要在蛋糕上抹忌廉,希望蛋糕的外表面最小 根據n和m,找到最小的外表面s 由第 n 層蛋糕的狀態 到第 n 1 層蛋糕的狀態 列舉 n 1 層蛋糕的半徑和高度 針對每個列舉結果,再去列舉 n...