和时间戳相关的分布式事务的基础问题

问题 1 : TiDB 是不是对 client 过来的每条 SQL 语句的请求都打一个时间戳?
问题 2 : 这个时间戳是在 tidb-server 上打的还是在 tikv-server 上打的?

问题 3 比较复杂,是一系列的操作 :
1.假设在开始时刻 t0 ,数据库中 x = “init_value”
2.在 t0+1 时刻,client A 连接数据库,启动一个事务 Ta, 将 x 的值设置成 “Ta_value”
3.在 t0+2 时刻,client B 连接数据库,启动一个事务 Tb, 将 x 的值设置成 “Tb_value”
4.在 t0+4 时刻,client B 的事务 Tb 执行完成
5.在 t0+6 时刻,client A 的事务 Ta 执行完成
现在有三个小问题:

  1. 在事务 Ta Tb 均未完成的 t0+3 时刻去数据库中查询 x 的值, 得到的结果是什么?
  2. 在事务 Tb 完成, Ta 未完成的 t0+5 时刻去数据库查询 x 的值, 得到的结果是什么?
  3. 在事务 Ta Tb 均完成的 t0+7 时刻去数据库中查询 x 的值, 得到的结果是什么?

谢谢

关于 问题3 我这边做了个实验,
因为事务 Ta 先于 Tb 开始,而且 Ta 与 Tb 是修改同一个位置的数据,那么在Tb 是不可能先与 Tb 执行完成的,所以 问题3 的一系列操作是是不成立的

我现在有另外一个问题,时间戳在 TiDB 中是不是因为 Percolator 而引入的?
谢谢

我觉得大概理解了,时间戳是在 tikv 的 client 的,就是 tidb-server上获得的

https://pingcap.com/blog-cn/tikv-source-code-reading-12/

另外还有一个事,不是一条 SQL 语句一个时间戳,而是一个事务一个时间戳,start_TS, commit_TS