咨询DDIA中事务场景下skew(时序异常)的含义及命名缘由
关于《DDIA》中"Skew"术语的两种含义解析
1. 负载倾斜(不均衡热点负载)
这是skew的第一种用法,指数据库中存在热点数据——部分数据被高频读写,导致系统负载在不同数据分片或节点间分布不均。比如电商平台中热门商品的库存记录,会被大量请求集中访问,这种负载分布的“偏移”就是该语境下的skew。
2. 时序异常(Timing Anomaly)
这是事务一致性语境下的skew,核心是事务执行的实际时序与预期的串行化时序出现偏差,导致最终结果不符合一致性约束。这里用skew是因为事务的执行顺序、数据读取/写入的时间点偏离了“串行执行”的预期,产生了不符合逻辑的结果。
具体场景中的Skew含义
Read Skew(读倾斜)
当事务在执行过程中,先后读取不同数据项时,这些数据项来自不同的快照版本,导致读取到的数据集是“混合时态”的。比如:
- 事务1先读取数据A的旧版本
- 事务2修改并提交了A和B的新版本
- 事务1再读取B的新版本
此时事务1拿到的A是旧值、B是新值,违背了“读取同一时间点快照”的预期,这种时序上的偏差就是read skew。
Write Skew(写倾斜)
多个事务基于相同的前置条件执行写操作,但由于事务执行时序交叉,导致每个事务的条件检查都基于未更新的数据,最终产生违反约束的结果。比如会议室预订场景:
- 事务1检查到会议室还剩1个名额,准备预订
- 事务2同时检查到会议室还剩1个名额,准备预订
- 两个事务先后提交,最终会议室被超额预订
这里的skew指的是事务的条件检查与写操作的时序,偏离了串行执行时“先检查后写入、后检查能看到前序修改”的逻辑,导致约束被破坏。
书中原文翻译
术语skew存在一词多义的问题:此前我们用它指代存在热点的不均衡负载(参见第205页“倾斜工作负载与缓解热点”),而此处它表示时序异常。
内容的提问来源于stack exchange,提问作者jaeger
相关产品推荐
相关产品推荐

