事务处理
2023-06-14 11:24:07 0 举报
AI智能生成
登录查看完整内容
分布式事务
作者其他创作
大纲/内容
CP 系统
AP 系统
最终一致性
CAP
执行流程
最大努力一次提交
足够简单
不保证隔离性
特点
可靠事件队列
高性能
强隔离性
可定制
幂等性
侵入性强
TCC 事务(回滚)
事务定义
正向恢复(Forward Recovery)
反向恢复(Backward Recovery)
处理方法
补偿容易实现
需要考虑崩溃恢复机制
SAGA 事务(补偿)
基本原理
支持全局锁
可能产生脏读
高吞吐量
弱隔离性,不保证原子性
AT 事务(补偿)
分布式事务
AP:应用程序(Aplication Program)
RM:资源管理器(Resource Manager)
TM:事务管理器(Transaction Manager)
DTP 模型
MySQL XA
XA 规范
流程图解
准备阶段
提交阶段
提交阶段网络可靠
节点失联最终都能恢复
一致性前提
单体故障
性能差
一致性风险
存在问题
事务延迟
缓存瓶颈
First Commit Win
缓存写提交
管道处理
并行提交
优化措施
两阶段提交(2PC)
改进措施
三阶段提交(3PC)
处理流程
数据不一致
单点故障
Percolator - NewSQL
阶段一
阶段二
一阶段提交 - PGXC
应用实例
全局事务
压力方向相反
共享事务
脏写 -> 读-未提交
脏读
防止脏读
脏写
防止脏写
脏读 -> 读-提交
实现快照级别隔离
不可见
可见
一致性快照的可见性规则
索引与快照级别隔离
不可重复读 -> 可重复读
读写竞争
原子写操作
显式加锁
自动检测更新丢失
原子比较和设置
冲突解决与复制
更新丢失
写写竞争
写倾斜
幻读
实体化冲突
多对象冲突
弱隔离级别
优势与劣势
存储过程封装
分区
实际串行执行
实现方式
性能分析
谓词锁
索引区间锁
两阶段封锁(2PL)
悲观并发控制
基于过期的条件做决定
检测是否读取过期的 MVCC 对象
检测写是否影响了之前的读
跟踪事务读写的粒度
与实际串行执行相比
与两阶段加锁相比
可串行化快照隔离的性能
可串行化快照隔离(SSI)
乐观并发控制
强隔离级别
读阶段(Read Pharse)
有效性确认阶段(Validation Pharse)
写阶段(Write Pharse)
并发控制理论
选择 Primary Row
写入阶段
Percolator 模型:TiDB
狭义乐观并发控制(OCC)
事务冲突频繁
兼容性需求
BOCC
FOCC
分类
乐观锁
TO
串行化图检测(SGT)
非锁定
保守两阶段封锁(C2PL)
强两阶段封锁(SS2PL)
严格两阶段封锁(S2PL)
2PL
利他锁(AL)
有序共享(O2PL)
两阶段
只写封锁树(WTL)
读写封锁树(RWTL)
非两阶段
锁定
死锁验证
串行化图(SG)
串行化快照隔离(SSI)
悲观锁
并发控制策略
* 事务隔离
原子性(Atomic):同一项业务处理过程中多个数据修改必须同时成功或撤销
隔离性(Isolation):不同业务处理过程中各自读、写数据不会相互影响
持久性(Durability):被成功提交的数据修改都能够正确地被持久化
一致性(Consistency):数据正确不会产生矛盾
ACID
崩溃处理
FORCE 与 STEAL
提交日志(Commit Logging)
预写日志(Write-Ahead Logging)
影子分页
原子性和持久性
排他锁(X-Lock)
共享锁(S-Lock)
范围锁(Range Lock)
锁
无隔离(None):脏写(Dirty Writes)
读未提交(Read Uncommitted):脏读(Dirty Reads)
读已提交(Read Committed):不可重复读(Non-Repeatable Reads)
只读事务
读写事务
可重复读(Repeatable Read):幻读(Phantom Reads)
可串行化(Serializable)
隔离级别
Append-Only:PostgreSQL
Delta:MySQL、Oracle
Time-Travel:HANA
存储方式
插入
删除
修改
读已提交
可重复读
查询
具体操作
PGXC
TiDB
CockroachDB
NewSQL
分布式架构
快照
问题分析
时间误差
处理过程
写等待:Spanner
读等待:CockroachDB
解决方案
隔离性
本地事务
事务处理
0 条评论
回复 删除
下一页