前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊PG中事务隔离级别

聊聊PG中事务隔离级别

作者头像
用户4700054
发布2023-02-26 14:45:52
5070
发布2023-02-26 14:45:52
举报
文章被收录于专栏:存储内核技术交流
数据库中的现象
  • Lost Updates现象:两个事务同时并发更新一个行数据,第一个事务更新完毕后,第二个事务没有考虑第一个事务的任何变更而进行数据变更的问题。比如A、B事都做转账10元给X账户操作,A事务在账户X(已有1元)完成转账这时候X账户有11元,而B事务这是开始转账读取X账户的11元,在转账1元,这时候X账户有12元,整个过程客户丢失了1元
  • Dirty Reads and Read Uncommitted现象:一个事务读取另外一个事务未提交的事务的数据这个就是脏读
  • Non-Repeatable Reads and Read Committed现象:不可重复读发生在一个事务A内读取同一行数据多次,每次读取的结果都不同。这个现象是这个事务A内读取数据时候其他事务更新或者删除这一行,并且已经提交,从而导致A事务内多次读取同一行得到不同的结果
  • Phantom Reads and Repeatable Read现象:幻读一个事务A内多次执行查询表X返回一个特定的结果集合,这时候事务B在表X中新增多行数据然后提交这些变更,事务A在执行查询会发现第一次和第二次查询的结果结果结合不同
  • No Anomalies and Serializable现象:序列化是阻止脏读、不可重复度、幻读的隔离级别,也是性能最差的。
隔离级别介绍
隔离级别的简单认知
  • 如果数据库中的多行数据在更新时候会被锁定,针对read不会被锁定那么这就认为是Read Uncommited Level
  • 如果数据库中多行数据在被更新的时候读和写都被会锁定,那么我们可以认为这是Read Commited Level,在这个隔离级别中多次查询一行数据返回不同结果的现象
  • 如果锁定据库中被读取行数据和更新的行数据,这个时候可以认为是Repeatable Read Level,在这个隔离级别内一个事务内多次查询一行数据得到的结果是一样的
PG中的隔离级别
  • 数据库的隔离级别实现中离不开transaction,数据库一般实现是基于锁实现来管理事务,而在PG中采用基于snapshot isolation protocol来管理事务,PG中的snapshot包含了当前所有已经提交的变更。snapshot isolation是最小化的lock的事务管理方案,在实际实现中并发的更新同一行数据会被加锁,在其他的情况下并发执行写不阻塞读,读不需要任何锁。
  • PG中的MVCC基于snapshot isolation protocolMVCC可以做到并发操作一行数据情况下可以保存这行数据在不同时刻的多个版本。
  • PG中Read Commit是默认的隔离级别,它能够适配和满足多种应用需求。但是不会终止任何任何维护数据一致性的行为;Repeatable Read隔离隔离级别消除了数据不一致的问题,针对只读事务的选择。Serializable隔离级别是最严格的隔离级别,性能是相对较差的,但是数据一致性能得到完美的保障。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据库中的现象
  • 隔离级别介绍
    • 隔离级别的简单认知
      • PG中的隔离级别
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档