PostgreSQL中的多版本併發控制

2021-08-15 00:03:23 字數 711 閱讀 9226

多版本併發控制的原理

在併發操作中,當正在寫時,如果使用者在讀,可能會產生資料不一致的問題。比如一行的前半部分剛寫入,後半部分還沒有寫入,這時讀的人可能讀取到的資料行,其前半部分資料是新的,後半部分資料是舊的,這樣就導致了資料一致性問題。解決這個問題最簡單的辦法是使用讀寫鎖。寫的時候,不允許讀,正在讀的時候也不允許寫,但這種方法導致讀和寫不能併發。於是,有人想到了一種能夠讓讀寫併發的方法(mvcc)。

實現mvcc的方法有兩種

1、寫資料時,把舊資料移到乙個單獨的地方,如回滾段中,其他人讀資料時,從回滾段中把舊的資料讀出來。

2、寫資料時,舊資料不刪除,而是把新資料插入。

postgresql資料庫使用的是第二種方法,而oracle和mysql中的innodb引擎使用的是第一種方法。

postgresql中多版本併發控制

postgresql中是通過把舊資料留在資料檔案中,新插入一條資料來實現多版本功能,為實現該功能,沒長表上都新增了四個系統欄位tmin、tmax、cmin、cmax。當兩個事物同事訪問記錄時,通過參考tmin和tmax的標記可判斷記錄的版本,然後根據版本號與自己當前的事務標識進行比較,確定自己的資料許可權。postgresql通過執行vaccum程序**之前的儲存空間解決舊資料的空間釋放問題。

在postgresql中,處於效率的考慮。若事務失敗,事務產生的資料不會在事務回滾時被清理,而是標記為無效。通過記錄事務的狀態,postgresql可以判斷資料是否有效。

PostgreSQL 多版本併發控制MVCC

什麼是mvcc?mvcc,multi version concurrency control,多版本併發控制,mvcc就是用同乙份資料臨時保留多版本的方式,實現併發控制。它可以避免讀寫事務之間的互相阻塞,相比通常的封鎖技術可極大的提高業務的併發效能。如果有人從資料庫中讀資料的同時,有另外的人寫入資料...

Python中多版本的interpreter選擇

電腦上裝了python2.7 和 python3.6.1,而且還安裝了anaconda anaconda中有自帶的python解析器,我的是anaconda 4.4 通過pip install 命令安裝的包都會儲存在.python python36 32 lib site packages下面 py...

MySQL中的多版本併發控制

基於提高併發效能的考慮,mysql中大多數事務型儲存引擎實現的都不是簡單的行級鎖,一般都同時實現了多版本併發控制 mvcc 可以將多版本併發控制視為行級鎖的乙個變種,但是在很多情況下,它都能避免了加鎖操作,因此開銷更低。雖然實現機制有所不同,但是大都實現了非阻塞式的讀操作,寫操作也只鎖定了必要的行。...