从 MVCC 机制看 POSTGRESQL 的应用场景
PostgreSQL 和 MYSQL 是目前应用最为广泛的两个开源数据库,PostgreSQL 因为其伯
克利授权方式而更受到一些想利用开源数据库系统开发自主可控的企业数据库平台的企业
和用户所青睐。关于 PostgreSQL 和 MYSQL 到底哪个数据库性能好,以及 PostgreSQL 能否
替代 Oracle 数据库,在企业级应用中使用,是大家所关心的问题。本文从 PostgreSQL 的多
版本并发访问(MVCC)机制角度,分析 PostgreSQL 较为适合的应用场景。
MVCC 是 Multi-Version Concurrency Control 的英文缩写,翻译成中文就是多版本并
发控制。多版本并发控制的主要目的是为了提高在线事务处理系统(OLTP 系统)中的读操
作的性能问题。
事务与事务隔离是现代关系型数据库的重要基础,通过所需要的事务隔离级别,来确保
应用系统读取到的数据是符合业务逻辑的。事务隔离级别包含 read uncommitted(level 0,
脏读)、read committed(level 1,提交读)、repeatable read(level 2,可重复读)、
serializable(level 3,串行化)。其中脏读可以读取任何脏数据,因此不需要任何锁或者
其他并发控制机制支持,并发性最好,串行化强制事务串行执行,并发能力最弱。提交读-Read
committed 也叫一致性读,是目前在线联机事务(OLTP)系统中最为常见的事务隔离级别。
传统的事务理论采用锁机制来实现并发控制,简单的说,写操作使用排它锁,排斥其他
操作;读操作使用共享锁,排斥写操作,但是可以支持其他读操作。随着信息化系统的发展,
并发访问量越来越大,这种读写互斥锁的机制对并发访问的性能造成了极大的影响。1981
年位于马萨诸塞州剑桥的美国计算机公司(Computer Corporation of America)的两位技
术 人 员 PHILIP A. BERNSTEIN AND NATHAN GOODMAN 发 表 了 一 篇具 有 历 史 意 义 的 论 文
“Concurrency Control in Distributed Database Systems”,这篇以分布式数据库中并
发控制为主要议题的论文中,提出了一种全新的并发控制算法,基于时间戳顺序的多版本并
发控制机制(SYNCHRONIZATION TECHNIQUES BASED ON TIMESTAMP ORDERING)。这个全新的
并发控制算法为数据库厂商提高并发能力提供了一条心的途径。DEC 公司的 VAX/RDB 是第一
个采用多版本并发控制机制的商用关系型数据库,随后 Oracle 4.0 也开始支持 MVCC,IBM DB2
一直采用其独有的并发控制机制 Generalized Search Tme (GiST),直到 DB2 9.7 才全面支
评论