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