PostgreSQL的MVCC对比Oracle的MVCC有什么优劣势?

昨天被别人问到关于Oracle和PG的MVCC实现机制有什么不同,这块个人大体是了解一些的。Oracle在修改数据前会把数据的旧值先写到undo表空间中以实现MVCC,而PG中的更新操作会被转换为delete+insert操作,然而这个delete并不是真正的把数据立刻删除掉,而是通过修改记录中的隐藏列来标记此行被删除,并在之后的某个时间通过后台任务来进行无效数据的清理。

那么,问题来了,对比PG和Oracle这两种不同的MVCC实现方式,到底孰优孰劣?

首先,我们看一下PG这种MVCC的好处。

1. 允许更大的并发。
2. 支持更大的update操作。
3. 在不同的进程之间最小的锁定。

怎么理解呢,其实这些是相对Oracle的MVCC来说的,正如前面说的,Oracle的MVCC实现是把修改前数据存放在独立的undo表空间中,那么它就存在几个不足之处。

  1. 因为undo表空间一般是有大小限制的,为了保证一致性,一个事务操作里面的所有要更改的数据都需要先写到undo,那么如果事务里面修改的数据量太大,就是导致undo表空间爆满的情况,导致事务失败。这说明,Oracle这个MVCC机制对事务的大小是有限制的,事务中update的量也是有限制。而PG则不存在这个问题,只有存储空间足够大,PG里面就能支持更大的update操作。
  2. 同样是因为undo表空间的限制,Oracle中事务的并发度也是有限制的,如果同时有多个大事务同时进行,一旦undo表空间撑满,就会有事务会报错。这就限制了Oracle的并发度,而PG则能够允许更大的并发。

当然了,PG的MVCC机制有好处,但它也是有坏处的。既然PG里面的更新操作是转换为 旧数据打删除标记+插入新数据
,那么自然意味着,如果数据在进行频繁的更新之后,被保留的无效的旧数据就会越多,这就会膨胀问题,这个膨胀不仅会千万磁盘空间的占用大,同时也会导致查询会越来越慢。
因此,在PG数据库里面,引入了vacuum动作,就是需要定期的自动或手动触发垃圾回收机制,以确保过期的无效数据被迟早清理,释放磁盘空间,同时保证查询效率也尽可能稳定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试/测试开发丨Python闭包与装饰器 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27720 闭包与装饰器 1、函数引用 Python 中定义的函数,也可以像变量一样,将一个函数名,赋值给另一个变量名&#xff…

openlayers 实例教程分享

OpenLayers3示例 记录一个openlayers 实例教程网址 1、WebGIS简介 语雀 记录一个openlayers入门教程 地图坐标系转换 - Online Tools 记录一个国家2000坐标转换工具的方法 记录一次我使用openlayers 开发地图的实例,实现了打点,弹窗&#xff…

linux 系统时间、时区、date、timedatectl

一、名词 UTC 格林尼治标准时间,位于0时区,东八区需要8 RTC 硬件时间,也称作BIOS时间 CST 中央标准时间,也指各个时区自己的地方时间二、查看时间 #查看当前硬件时间 hwclock #查看当前系统时间 date date -u # 显示UTC时间 d…

Docker 的数据管理和Dockerfile镜像的创建

目录 Docker 的数据管理 管理 Docker 容器中数据的方式 端口映射 容器互联(使用centos镜像) Docker 镜像的创建 Dockerfile 操作常用的指令 编写 Dockerfile 时格式 Dockerfile 案例 Docker 的数据管理 管理 Docker 容器中数据的方式 管理 Doc…

【ES】--track_total_hits参数影响ES分页数据

目录 一、前言二、解决方法2.1、修改max_result_window参数2.2、修改track_total_hits 参数2.3、结论 一、前言 工作遇到一个ES深度分页查询时出现报错,报错内容如下 ElasticsearchException[Elasticsearch exception [typeillegal_argument_exception, reasonResu…

C# AnimeGAN 漫画风格迁移 动漫风格迁移 图像卡通化 图像动漫化

效果 项目 模型 animeganv3_H40_model.onnx animeganv3_H50_model.onnx animeganv3_H64_model.onnx AnimeGANv3_JP_face_v1.0.onnx AnimeGANv3_PortraitSketch_25.onnx Hayao-60.onnx Hayao_64.onnx Paprika_54.onnx Shinkai_53.onnx 下载 可执行文件exe下载 源码下载

JAVA IO 流分类整理

一、JAVA IO 流分为三种: 1、按照流向:输入流和输出流 2、按照操作单元:字节流和字符流 3、按照流的角色:节点流和处理流 二、JAVA IO 流的40多个类都派生自4个抽象类 1、字节输入流(InputStream) 、 2、字…

Pycharm 2023 设置远程调试

pycharm 版本 : 2023.2.1 整体流程参考:https://blog.csdn.net/xuanhaolaile/article/details/128293254 首先确定远程服务器上已经安装好 requirements.txt 中所需的依赖包。 1、SSH Configurations 添加远程服务器 2、Python Interpreter 注意&…

如何让CI/CD同一个阶段的任务先后执行而不是同时执行

可以通过指定同一阶段内的作业之间的依赖关系来定义它们的执行顺序。这确保了一个作业必须在另一个作业开始之前成功完成。具体的方法可能因使用的CI/CD系统而有所不同: GitLab CI/CD: 在GitLab CI/CD中,可以使用needs关键字来指定同一阶段内…

spring boot自定义配置时在yml文件输入有提示

自定义一个配置类&#xff0c;然后在yml文件具体配置值时&#xff0c;一般不会有提示&#xff0c;这个解决这个问题 依赖 <!--自定义配置类&#xff0c;在yml文件写的时候会有提示--><dependency><groupId>org.springframework.boot</groupId><arti…

Godot2D角色导航-自动寻路教程(Godot实现角色随鼠标移动)

文章目录 运行结果2D导航概述开始前的准备2D导航创建导航网格创建角色 其他文章 运行结果 2D导航概述 Godot为2D和3D游戏提供了多个对象、类和服务器&#xff0c;以便于基于网格或基于网格的导航和路径查找。 说到导航&#xff0c;就得说一下导航网格&#xff0c;导航网格定义…

视频缩放的概念整理-步长数组

最近在读ffmpeg的代码时候&#xff0c;这个接口不是很能看懂int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int srcStride[], int srcSliceY, int srcSliceH, uint8_t *const dst[], const int dstStride[]); 多方请教后&#xff0c;记录结果如…

json转对象

要将 JSON 转换为对象&#xff0c;你可以使用不同编程语言中的相应方法或库。以下是一些示例&#xff1a; JavaScript: 在 JavaScript 中&#xff0c;你可以使用 JSON.parse() 方法将 JSON 字符串转换为对象。例如&#xff1a; var jsonString {"name": "John&…

多标签分类论文笔记 | ML-Decoder: Scalable and Versatile Classification Head

个人论文精读笔记&#xff0c;主要是翻译心得&#xff0c;欢迎旁观&#xff0c;如果有兴趣可以在评论区留言&#xff0c;我们一起探讨。 Paper: https://arxiv.org/pdf/2111.12933.pdf Code: https://github.com/Alibaba-MIIL/ML_Decoder 文章目录 0. 摘要1. 介绍2. 方法2.1 Ba…

免疫球蛋白介绍

免疫球蛋白&#xff08;Immunoglobulin&#xff0c;Ig&#xff09;是广泛存在于哺乳动物血清、淋巴液、组织液和外分泌液中的一种具有抗体活性或化学结构与抗体相似的球蛋白&#xff0c;在机体防御疾病的重要成分在疾病研究、药物研发、疫苗评价中具有重要作用。抗体&#xff0…

【实训项目】“优品果园”-线上水果商城小程序

1.项目背景 随着现代人对消费水平的追求以及对食物安全的需要&#xff0c;无污染、产地直销的有机水果受到越来越多市民的喜欢。交易过程的简洁化是现代消费者的追求&#xff0c;产地直销也是近期流行的一种新型的交易模式。产地直销的交易模式使得交易过程更加简便快捷&#…

【MySQL】关于MySQL升级到8.0版本的实践方案

关于MySQL升级到8.0版本的实践方案 关于数据库版本升级,一直都是热议话题,对于升级的缘由各家也有所不同,有业务驱动的,有DBA自发驱动的,有规划导向也有方向指引的……抛开各种原因,当升级这个决定落下来的时候,对于DBA手头的几百几千套数据库来说,就好比是一场动物大…

[电源选项]没有系统散热方式,没有被动散热选项

背景 笔记本的风扇声音太大&#xff0c;想改成被动散热方式&#xff0c;又不想影响性能。 于是我打开了控制面板\所有控制面板项\电源选项&#xff0c;点更改计划设置-> 更改高级电源设置。 想把散热方式改成被动散热。发现win11中好像没有这个选项了&#xff01; 如何…

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则;了解什么是JMS。

目录 JMS 讲解★ RabbitMQ的核心概念★ RabbitMQ工作机制★ Connection&#xff08;连接&#xff09; 与 Channel&#xff08;通信信道&#xff09;★ Exchange★ Exchange与Queue★ Exchange的类型&#xff08;4种&#xff09;及 该类型对应的路由规则 看RabbitMQ 之前&#x…

技术分享| 二进制部署MySQL

一、介绍 ​MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database Management System&#x…