当TIDB执行一条只读语句时,也需要申请一个tso嘛?申请tso的目的是为了mvcc嘛?

请问各位大佬,当TIDB执行一条只读语句时,也需要申请一个tso嘛?申请tso的目的是为了mvcc嘛?

3 个赞

TSO 可以确认当前请求数据的版本

比如 数据有N个版本, 通过 TSO 就可以判断,这个请求需要哪个版本的数据~

5 个赞

因为数据库不可能采取串行化的隔离级别,这样就不会支持并发了,如果数据库是串行化的,每个事务操作完下一个事物才操作,根本不需要tso这个东西。而在并发的情形下,多个事务同时去操作一个对象,这样就需要引入tso相当于给了数据在时间维度一个标识位,结合数据库dml操作在磁盘上都是追加新版本,这样的设计并发的操作数据才不会混乱

4 个赞

需要申请一个tso

1 个赞

申请tso的目的是为了mvcc,可以这么理解

即使只读一条语句,也需要申请TSO,假如你10点读一条语句id=10,假设10点10分这条语句才出现,有其他事务在10点05,把id=10改为id=20,并提交
这里需要申请一个时间版本TSO,保证你读的是10点的版本

读申请1次tso.
写申请2次tso.

推荐https://learn.pingcap.com/learner/course/120005 学习一波

需要申请,确定事务的开始时间。