PG MVCC 与 Oracle MVCC实现机制的背后思想差异

PG MVCC 与 Oracle MVCC实现机制的背后思想差异

在PG中执行DELETE时, 行不会立即从数据文件中删除, 而是仅通过在页头中设置为xmax字段将其标记为已删除. 同样对于UPDATE, 它可能在PG中被视为DELETE + INSERT.
这就因为PG MVCC背后的基本思想之一, 因为它有如下好处:

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

Oracle 也实现了MVCC, 不过Oracle中, 所谓的"死元组"不是存放的数据文件, 而是独立存放的"UNDO 回滚段表空间"中的, 相比PG, 存在如下缺点:

  1. 一个事务如果存在大量的更新操作, 可能会导致"UNDO表空间爆满", 而PG显然不存在这样的问题, 数据存储空间有多大, 它所谓的"UNDO表空间"就有多大
  2. 因为上述"1"的原因, 所以Oracle当"UNDO表空间爆满"时, 可能会限制了"更大的并发"

不过, PG MVCC实现的缺点是留下了已删除的元组, 即使在所有可能看到这些版本的事务完成后也是如此.
如果没有清理, 哪些"死元组"(对于任何事务实际上是不可见的)将永远留在数据文件中. 对于DELETE和UPDATE比较多的表, 死元组可能占据很多磁盘空间. 同时, 死元组也将从索引中引用, 进一步增加了浪费的磁盘空间量.这就是我们在PG中称之为"膨胀"的东西, 同时因为查询也会变慢.

参考

PostgreSQL Autovacuum基础知识

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值