txn实现细节
- txnwait.Queue
- TimestampCache
- CommandQueue
- quiescer
- txn heartbeat
- txn restart
- txn epoch
天桥扛把子
如果当前session不在事务中,则reset session的txnState
pkg/sql/executor.go
|
|
|
|
当前文件不使用import的相关函数,但是需要先执行其中的init function。
HLC是Hybrid Logical Clock的缩写,混合逻辑时钟。时钟分为物理时钟和逻辑时钟。
物理时钟
: 电子设备,计算有固定频率晶体的震荡次数,存在时钟偏移和时钟漂移,会导致时钟不连续的变化,比如时间回退等, 以及长时间使用导致时钟存在偏差,普通石英晶体时钟漂移率在(10)-6s/s, 即每1 000 000s会导致1s的偏差。 原子钟的偏倚率在(10)-13.
逻辑时钟
: 时间发生的逻辑顺序,可以是顺序的序号,和物理时间相对。
HLC同时使用了物理时钟和逻辑时钟,能够保证单点的时间发生器是单调递增的,同时能够尽量控制不同节点之间的时钟偏差在规定的误差范围内。主要用于分布式系统中。
Raft library是etcd中的raft实现,只实现了Raft算法,使用者需要自己提供transportation层用于节点间通信,storage层用于持久化Raft log和state.
Raft library实现如下特性:
使用Raft library的项目:
操作冲突
: 两个不同事务对同一个数据项进行操作,且至少一个为write操作,则这两个操作是冲突操作。
等价调度
: 不存在冲突的操作可以进行执行顺序的交换,交换后的结果与交换前效果是一致的,称为等价调度。
可串行化
: 并发执行的事务操作顺序,通过等价调度,可以得到与顺序执行相同的调度,则称为事务是可串行化的。
隔离级别对应的3个现象:
Transaction T1 modifies a data item. Another transaction T2 then reads that data item before T1 performs a COMMIT or ROLLBACK. If T1 then performs a ROLLBACK, T2 has read a data item that was never committed and so never really existed.
Transaction T1 reads a data item. Another transaction T2 then modifies or deletes that data item and commits. If T1 then attempts to reread the data item, it receives a modified value or discovers that the data item has been deleted.
Transaction T1 reads a set of data items satisfying some
. Transaction T2 then creates data items that satisfy T1’s and commits. If T1 then repeats its read with the same , it gets a set of data items different from the first read.
对应的宽泛解释和实际解释:
|
|
隔离级别和现象的对应关系:
串行化的定义前面已经讲过了,排出P1,P2,P3三种现象并不是串行化的实际定义。
|
|
|
|
pkg/storage/engine/enginepb/mvcc3.pb.go
|
|