了解多版本并发控制 (MVCC) 和快照

已完成

大多数数据库管理系统(DBMS)使用锁来强制实施并发控制,但 PostgreSQL 使用替代方法补充锁定。 PostgreSQL 使用称为多版本并发控制(MVCC)的系统,该系统允许存在同一行的多个版本以提高并发性。 使用此系统,每个查询都会看到具有事务一致性的数据的早期快照。 MVCC 确保正在读取数据的事务不会阻止正在写入数据的事务,反之亦然。

例如,连接 A 正在执行会扫描表的所有行的查询。 同时,连接 B 正在执行更新某些行的查询。 MVCC 允许这两个查询同时运行,方法是创建受影响的行的另一个版本。 这样,连接 B 就可以执行更新,而不会影响连接 A。此过程的实现方法如下:每个行版本将 xmin 值用于 visible since 事务,将 xmax 值用于 visible until 事务。 使用 MVCC,连接 A 将忽略连接 A 查询启动后发生的任何修改。

多版本并发控制图,其中显示了读取原始数据的读取查询和更新快照的写入查询。

交易

DBMS 中的事务是一个原子工作单元,因此事务要么全部提交,要么完全不提交。 事务也用于并发目的。 使用隔离级别时,可以定义一个事务在其他并发事务上可能具有的效果。

通过使用 BEGIN TRANSACTION 或 START TRANSACTION 来启动事务。 使用 COMMIT 完成事务,以保存事务中所做的所有更改或 ROLLBACK,以撤消事务所做的任何更改。 例如:

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