当前TSO对应的系统时间

【 TiDB 使用环境】生产环境 or 测试环境 or POC
【 TiDB 版本】
从grafana界面中,可以看到current TSO

1、我通过PD工具查看这个TSO对应的系统时间怎么是1970-01-01 08:00:06呢?

2、这个和gc的safepoint对应的TSO是不是不是一回事呢?我看gc的safepoint的数字比这个值要大很多。

【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

1 个赞

监控的 * Current TSO:当前分配 TSO 的物理时间戳部分,即我们正常理解的时间戳

gc的safepoint对应的TSO解释如下

问题1:
控的 * Current TSO:当前分配 TSO 的物理时间戳部分,即我们正常理解的时间戳。
那我能通过这个TSO,查看他表示的物理时间吗?

问题2:

这个logic代表什么含义呀?

时间转 tso(取第一个逻辑值)
select conv(concat(bin(unix_timestamp(‘2022-01-13 17:19:32’)*1000),‘000000000000000001’),2,10);

tso 转时间(多对一)
select from_unixtime(conv(left(bin(‘430457637306368001’),41),2,10)/1000);
select from_unixtime(conv(left(bin(‘430457637459197954’),41),2,10)/1000);

2 个赞

logic就是逻辑时间,就是上面图的逻辑时钟部分,上面的物理时间戳转化可以用这种方式
image

1 个赞

tso 由 46 位物理 bit 和 18 位逻辑 bit 构成,也就是说一个物理时间对应着 2^18 个 tso,pd-ctl 中 logic 是这 18 个 bit 转换为十进制后的值。

1 个赞

v5.4.0版本中标题已经改成Current TSO Physical了,避免产生误解。这个时间是TSO中的高46位,不能直接用pd-ctl tso来转换的。通俗的理解就是,你把Current TSO Physical这个值先转成二进制格式,然后给后面填充18个0,再转回十进制格式,这时的数值你再用pd-ctl tso来看
Dingtalk_20220714143425

tso 转时间(多对一)
select from_unixtime(conv(left(bin(‘430457637306368001’),41),2,10)/1000);
select from_unixtime(conv(left(bin(‘430457637459197954’),41),2,10)/1000);

这个出来的时间要再+8,对吧

1 个赞

不需要的,tso 生成的时候是什么时区,转出来的就是就是什么时区

嗯,应该是集群的时区有关系。

mysql> select @@global.time_zone, @@global.system_time_zone;
±-------------------±--------------------------+
| @@global.time_zone | @@global.system_time_zone |
±-------------------±--------------------------+
| UTC | Asia/Shanghai |
±-------------------±--------------------------+
1 row in set (0.00 sec)

mysql>

1 个赞

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。