深入淺出PostgreSQL之淺談MVCC


一、MVCC的簡介以及實現方式 多版本並發控制(Multi-Version Concurrency Control),簡稱MVCC,在大多數關系型數據庫中都支持MVCC特性。 MVCC主要用來提高並發性,實現讀寫相互不阻塞的目標。 在這里說明一下並發控制機制的種類: 1、基於鎖的並發控制機制稱為悲觀機制 2、基於MVCC的並發控制機制稱為樂觀機制 而MVCC的實現方式有以下兩種: 1、將舊版本的數據單獨存放到一個空間,一個事務如果想讀取舊版本的數據就從這個地方將數據讀出來。例如MySQL的innodb引擎或者Oracle數據庫都是將舊版本的數據放到undo段中的。 2、第二種就是舊版本的數據不刪除,插入新數據;舊數據確認沒有用時再由autovacuum來清理,PostgreSQL就是使用這種方式。 二、MVCC的原理 1、先簡單介紹幾個相關的概念便於理解 事務ID(XID)用32位無符號數來表示,依次增加1; 為了實現MVCC,每張表上添加了(tmin,tmax)這兩個字段 tmin存儲的是insert或者update這個元組的書屋ID,tmax存儲的是刪除這個元組的事務ID。tmin和tmax就標志着這個元組的有效性了(判斷tmiin和tmax對應的事務是commit還是rollback) 2、原理 當有事務讀取某個元組時,先比較當前的事務ID和tmin的大小,只有當前事務的ID大於tmin並且這個元組沒有被刪除才能讀的到。 三、PostgreSQL中的MVCC相比於其他數據庫的優劣勢 優勢; 1、由於舊版本的數據不在undo段中,數據的更改記錄都在表文件中,所以PostgreSQL數據庫事務發生回滾可以立即完成(不論這個事務是不是大事務)。 2、數據能夠進行大量的更新,不像MySQL的innodb引擎和Oracle數據更新先將更改前的數據放到undo空間中去(undo空間的暴增數據庫性能會很差,所以不能肆無忌憚的更新數據)。 劣勢; 1、大量的舊版本數據占用磁盤空間降低了查詢性能(需要掃描更多的數據塊) 2、事務ID個數有限制


免責聲明!

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



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