mysql和postgresql可见性规则的介绍,只针对于读。

本文介绍了MySQL基于InnoDB引擎的可重复读隔离级别下事务的readview机制,以及其trx_id、roll_pointer等概念。同时对比了PostgreSQL的snapshot机制,通过xmin、xmax和xip来确保数据一致性。两种方法都用于解决不可重复读和幻读问题。
摘要由CSDN通过智能技术生成

mysql 基于innodb引擎下的可重复读隔离级别介绍事务的可见性规则

read view的介绍以及创建时机

* 事务在开始时创建一个read view,后续需要复用read view
* read view 成员变量的介绍
* m_ids : 正在活跃的trx_id 列表
* min_ids : 最小的trx_id
* max_ids: 最大的trx_id,将要创建的trx_id
* creator_ids : 当前创建的trx_id   -- 当前执行的事务所占用的trx_id

结合对应的数据行的三个隐藏字段

 * rowid,trx_id,roll_pointer 
 * rowid:数据行存储的信息保存的地方   构成: pageid + pageoffset
 * trx_id: 数据行被最新事务操作的事务id, 其他访问事务能否看到此数据的重要保证,同时也监控trx_id对应事务的状态信息
 * roll_pointer: 多版本的指针,指向undo数据的版本信息,可以理解为一个多版本链。

postgresql 可重复读隔离级别的可见性规则

postgresql是基于创建对应的snanshot,也是在事务执行开始创建一个snapshot(version),后续不在创键

 * 通过对应的sql语句查询 select pg_current_snapshot();
 * 上述查询语句获取的结果的介绍
 * xmin:快照中最早的事务ID,表示在这个事务ID之后(包括这个ID)开始的事务所做的更改对当前事务可见。
 * xmax:快照中最晚的事务ID,表示在这个事务ID之前开始的事务所做的更改对当前事务可见。任何在这个ID之后开始的事务所做的更改对当前事务是不可见的。
 * xip:活跃的事务ID列表,这些事务在快照被取得时是活跃的,它们所做的更改在当前事务中不可见。
 * 例如,执行SELECT pg_current_snapshot();可能会返回如下结果:
xmin    | xmax    | xip
--------+---------+-----------
123456  | 123459  | {123457,123458}

这意味着:
事务ID为123456及之后开始的事务所做的更改对当前事务可见。
事务ID在123459及之前开始的事务所做的更改对当前事务可见。
事务ID为123457和123458的事务在当前快照被取得时是活跃的,它们所做的更改对当前事务是不可见的。

  • pg_current_snapshot()提供的信息对于开发者和数据库管理员在处理并发控制和理解事务隔离级别的行为时非常有帮助。通过这些信息,可以更好地理解不同事务之间的数据可见性和潜在的数据冲突。

mysql 可重复读,通过gap锁的方式解决不可重复读和幻读的问题

postgresql 可重复读,通过version的方式结果不可重复读和幻读的问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值