什么是purge操作


要明白什么清空(purge)操作,你得明白什么是事務的多版本控制,即MVCC(multi-version concurrency control)。Innodb為了實現MVCC,

需要在表空間內保存老版本的記錄信息,這些信息存儲於回滾段中(rollback segment),所謂回滾段,在物理存儲上是UNDO log的記錄。

Purge到底做了些什么?其實它就相當於一個垃圾收集器。取個例子,當用戶下一個命令,如 “DELETE FROM t WHERE c = 1;”,

InnoDB 不會馬上刪除對應的記錄,它會做如下三件事情:

它標記此記錄為刪除(通過刪除標記位)

存儲原始的記錄到UNDO log

更新記錄列DB_TRX_ID和DB_ROLL_PTR(這些列是Innodb在原記錄列上增加的)。DB_TRX_ID記錄了最后操作記錄的事務ID。

DB_ROLL_PTR也叫回滾指針(rollback pointer),指向UNDO log 記錄,此UNDO Log記錄了原始記錄的信息,這些信息可以

用來重建原始記錄(如發生了rollback的情況)。如果操作是插入,還會有一個DB_ROW_ID,這個指明了新記錄的行號.

 

當事務提交后,那些標記了刪除的記錄,以及UNDOLog中的記錄並不會馬上清除,這些記錄信息可以被其它事務所重用,

或是共享。只有當沒有任何事務共享這些記錄的時候,這些記錄才會被清除(purge)。這就是所謂purge操作。

而為了提高數據庫的操作效率,purge操作是由另外的線程異步完成。這就是為何前面你所看到的為何存在unpurged的事務的原因。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM