事务si和ssi隔离级别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务si和ssi隔离级别相关的知识,希望对你有一定的参考价值。
参考技术A rr隔离级别:有幻读但无写偏虚si快照隔离级别:有写偏序但无幻读,写偏序问题的规避留给应用避免,应用使用select for update进行强制加写锁,避免被修改
ssi串行快照隔离级别:通过检测rw依赖环的存在,中断其中的一个事务,解决了si存在的写偏序问题
分布式事务的一种实现方式:
1. 事务涉及的任何一行数据需要3个列表示。 存储格式如下:
data列:start_ts -> value
lock列:start_ts -> primary key(由各个列组合而成)
write列:commit_ts -> start_ts 表示真正写入数据的版本
2. 正常操作步骤,全局统一分发时间戳
prepare 阶段:申请start_ts,写data列和lock列
commit 阶段:申请commit_ts,写write列且删lock列
3 冲突检测
写之前检查 lock列是否有锁,有则返回失败
读只需选择write列中小于当前时间的最大commit_ts,然后查找对应的start_ts,再去data列取值
对于读取操作过程中有新的写入提交成功的情况,要么应用select for update强制加写锁,要么读取时加读锁,并且读写互斥
任何事务提交时都先提交primary key行,后提交其他分片的行,提交时primary key行时要检查是否lock列被删除,防止其他新事务已经认为老事务超时发起回滚时与老事务的primary key提交冲突
4 recovery
新事务访问任意分片上的数据时,检测lock列有锁,需要根据primary key找到老事务的primary行,以该行的write列为依据判断老事务是否已经提交成功,如果老事务提交成功则提交冲突分片的老事务行,如果提交失败则回归老事务行;判断规则时在write列上查找commit_ts>=冲突分片lock列的start_ts数据中是否有值为该lock列start_ts,也即是否提交过老事务
参考文档:https://www.cnblogs.com/foxmailed/p/3887430.html
以上是关于事务si和ssi隔离级别的主要内容,如果未能解决你的问题,请参考以下文章