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

已完成

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

例如,连接 A 正在执行一项扫描整个表中所有行的查询。 同时,连接 B 正在执行更新某些行的查询。 MVCC 允许这两个查询同时运行,方法是创建受影响的行的另一个版本。 这样,连接 B 就可以执行更新,而不会影响连接 A。此过程由每个行版本具有可见 xmin 值,因为 事务和可见 xmax 值,直到 事务为止。 使用 MVCC,连接 A 将忽略连接 A 查询启动后发生的任何修改。

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

交易

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

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

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