Greenplum MVCC并发控制:严格的一致性与极致的性能

本文深入介绍了Greenplum的MVCC(多版本并发控制)机制,包括MVCC的原理、实现方式以及并发更新处理。讲解了事务的隔离级别、Heap表页面布局和快照的概念,探讨了MVCC如何解决读写冲突并提高并发性能。此外,还阐述了MVCC的清理需求,如单页面清理和VACUUM操作在处理被标记删除的元组和索引项时的角色。
摘要由CSDN通过智能技术生成

了解更多Greenplum技术干货,欢迎访问Greenplum中文社区网站

2020的夏天已经接近尾声,《深入浅出Greenplum内核》系列直播也已经成功举办了五场活动,内容覆盖了Greenplum架构、执行引擎、查询优化、B树索引(均插入之前的总结文章链接),相关视频可前往B站的Greenplum中文社区频道进行回顾观看

8月28日,Greenplum原厂内核研发陈金豹从优缺点、实现细节、和空间重用三个角度深度揭秘了Greenplum的MVCC并发控制。本文将带领我们回顾精华内容。

MVCC,全称是Multi-version Concurrency Control,即多版本并发控制。

大家可能会有个疑问,为什么我们需要了解MVCC呢?其实不管是对于数据库开发者,或者是对于DBA,MVCC都是非常重要的。如果你是一个Postgres/Greenplum生态的开发者,MVCC作为整个存储体系中最重要的一环,是需要牢固掌握的知识点之一。如果你是一个DBA, 了解MVCC有助于理解数据库并发查询的行为,同时能够管理MVCC对性能的影响。最重要的是,MVCC会有一些清理垃圾的需求,即存储空间的重用,如果能够了解MVCC的原理,对于这些操作,你将更加得心应手。

首先给大家介绍一下常用的并发控制技术,一共三种:

  • 第一种就是我们今天要着重介绍的——Multi-version Concurrency Control(MVCC),多版本并发控制

  • 第二种是Strict Two-Phase Locking(S2PL),严格的两阶段锁

  • 第三种是Optimistic Concurrency Control(OCC),乐观锁

目前市面上的数据库用的基本就是这三种并发控制技术,如果大家对于后两种技术比较感兴趣,可以去百度搜索相关资料,本文将不做赘述。

在将MVCC的实现前,我们先来了解几个概念:

事务和隔离

要了解多版本并发控制,我们需要先了解两个概念:事务和隔离。

事务

第一个概念就是事务,事务的本质就是将多个步骤捆绑成一个原子操作。比如先INSERT,然后UPDATE,再SELECT三个执行语句,在事务中,我们会把这三个执行步骤捆绑成一个原子的步骤,并希望这一个原子的步骤或者全部成功,即所有的语句均能执行成功,或者全部不成功。如果中间出现了故障导致事务无法完成,则所有步骤都不会影响数据库,此时会回滚到初始状态。

由于事务的这种特性,事务执行的中间状态是不会被别的事务看到的。大家想一想,如果这个事务的中间状态会被另外一个事务看到,因为已经对其他事务产生了影响,回滚将没有办法完成。这里就涉及到了另一个概念:隔离。

隔离

由于事务是具有原子性的,因此事务和事务之间,我们是不希望看到中间状态的,因此事务和事务之间要有隔离。SQL标准里把事务隔离级别分成了四级,

  • Read Uncommunitted(读未提交)

  • Read Committed(不可重复读)

  • Repeatable Read(可重复读)

  • Serializable (串行化)

我们来简单介绍一下这四个隔离级别是什么含义。

1. Read Uncommited

第一个级别Read Uncommitted是可以脏读的。即不管事务进行到哪一步,该事务所做的改动对别的事务均可见。按理说,在一个严肃的数据库里,这似乎是不应该发生的事情,因为我们希望事务是一个原则性的操作,如果他失败了需要回滚,所以说他的中间状态一定是不能被别的事务看到的,可见这是一个非常低的级别,是一个通常情况下,很难被人们接受的一个级别。

2. Read Committed

第二个级别叫Read Committed。在这个级别下,是不支持脏读的,但一旦事务提交了,它所造成的影响就对别的事务可见了。基本满足了原子性的要求。

但是Read Committed存在一个问题。如果一个事务中有很多条语句,那么可能会出现,在不同的语句中看到的数据集不一样的情况。

例如,事务一和事务二并发进行

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Greenplum 之前是一家总部位于美国加利福尼亚州,为全球大型企业用户提供新型企业级数据仓库(EDW)、企业级数据云(EDC)和商务智能(BI)提供解决方案和咨询服务的公司。目前 Greenplum 已经归属 Pivotal。 Greenplum DB 号称是世界上第一个开源的大规模并行数据仓库,最初是基于 PostgreSQL,现在已经添加了大量数据库方面的创新。Greenplum 提供 PD 级别数据量的大和快速分析能力,特别是面向大数据方面的分析能力,支持大数据的超高性能分析查询。 GreenPlum 主要特性: 大规模并行处理架构 高性能加载,使用 MPP 技术,提供 Petabyte 级别数据量的加载性能 大数据工作流查询优化 多态数据存储和执行 基于 Apache MADLib 的高级机器学习功能 Greenplum 采用 Apache 协议开源之后,加上之前的 HAWQ,PostgreSQL 以及 PostGIS,完全可以构建一体化的 PostgreSQL 企业数据架构。 Greenplum的架构采用了MPP(大规模并行处理)。在 MPP 系统中,每个 SMP 节点也可以运行自己的操作系统、数据库等。换言之,每个节点内的 CPU 不能访问另一个节点的内存。节点之间的信息交互是通过节点互联网络实现的,这个过程一般称为数据重分配(Data Redistribution) 。与传统的SMP架构明显不同,通常情况下,MPP系统因为要在不同处理单元之间传送信息,所以它的效率要比SMP要差一点,但是这也不是绝对的,因为 MPP系统不共享资源,因此对它而言,资源比SMP要多,当需要处理的事务达到一定规模时,MPP的效率要比SMP好。这就是看通信时间占用计算时间的比例而定,如果通信时间比较多,那MPP系统就不占优势了,相反,如果通信时间比较少,那MPP系统可以充分发挥资源的优势,达到高效率。当前使用的 OTLP程序中,用户访问一个中心数据库,如果采用SMP系统结构,它的效率要比采用MPP结构要快得多。而MPP系统在决策支持和数据挖掘方面显示了优势,可以这样说,如果操作相互之间没有什么关系,处理单元之间需要进行的通信比较少,那采用MPP系统就要好,相反就不合适了。 标签:Greenplum
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值