了解 multi-version concurrency control (多版本並行控制) (MVCC) 與快照集

已完成

大部分的資料庫管理系統 (DBMS) 使用鎖定來強制執行並行控制,但 PostgreSQL 會以替代方法補充鎖定。 PostgreSQL 使用稱為多版本並行控制 (MVCC) 的系統,讓相同資料列存在多個版本,以改善並行。 使用此系統時,每個查詢都會看到先前交易一致的資料快照集。 MVCC 可確保正在讀取資料的交易不會封鎖正在寫入資料的交易,反之亦然。

例如,連線 A 正在執行的查詢,會掃描資料表的所有資料列。 同一時間,連線 B 正在執行的查詢,會更新部分資料列。 MVCC 會建立受影響資料列的另一個版本,讓這兩個查詢可同時執行。 如此一來,連線 B 就可以執行更新,而不會影響連線 A。這個流程是透過每個資料列版本的「可見開始時間」交易有 xmin 值和「可見結束時間」交易有 xmax 值所達成。 使用此系統時,連線 A 會忽略連線 A 查詢啟動後所發生的任何修改。

多版本並行控制圖表的圖表,顯示讀取原始資料的讀取查詢,以及更新快照集的寫入查詢。

交易

DBMS 交易是不能部分完成的工作單位,因此交易為全部認可或完全不認可。 交易也會用於並行用途。 使用隔離等級時,可以定義某項交易對其他並行交易產生的效果。

您使用 BEGIN TRANSACTION 或 START TRANSACTION 啟動交易。 您使用 COMMIT 完成交易,以儲存該交易中執行的所有變更,或使用 ROLLBACK 復原該交易執行的任何變更。 例如:

BEGIN TRANSACTION;
    UPDATE production.workorder
        SET stockedqty=7
        WHERE workorderid=1;
COMMIT;