TiDB server获取的TSO一定是连续的吗?是否会有跳增的情况,类似于MySQL的自增auto_increment?

【 TiDB 使用环境】生产\测试环境\ POC
【 TiDB 版本】
【遇到的问题】
【复现路径】做过哪些操作出现的问题
【问题现象及影响】
【附件】

  • 相关日志、配置文件、Grafana 监控(https://metricstool.pingcap.com/)
  • TiUP Cluster Display 信息
  • TiUP CLuster Edit config 信息
  • TiDB-Overview 监控
  • 对应模块的 Grafana 监控(如有 BR、TiDB-binlog、TiCDC 等)
  • 对应模块日志(包含问题前后 1 小时日志)

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

TiDB 能保证自增值的单调性,但并不能保证其连续性。参考以下示例:

CREATE TABLE t (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, a VARCHAR(10), cnt INT NOT NULL DEFAULT 1, UNIQUE KEY (a));
INSERT INTO t (a) VALUES ('A'), ('B');
SELECT * FROM t;
INSERT INTO t (a) VALUES ('A'), ('C') ON DUPLICATE KEY UPDATE cnt = cnt + 1;
SELECT * FROM t;

+----+------+-----+
| id | a    | cnt |
+----+------+-----+
|  1 | A    |   1 |
|  2 | B    |   1 |
+----+------+-----+
2 rows in set (0.00 sec)

Query OK, 3 rows affected (0.00 sec)
Records: 2  Duplicates: 1  Warnings: 0

+----+------+-----+
| id | a    | cnt |
+----+------+-----+
|  1 | A    |   2 |
|  2 | B    |   1 |
|  4 | C    |   1 |
+----+------+-----+
3 rows in set (0.00 sec)

https://docs.pingcap.com/zh/tidb/stable/auto-increment#单调性保证

TSO是一个单调递增的时间戳,可以看一下这一篇文章

不保障严格的连续性,比如pd leader切换了,tso是每次预分配一个3秒时间的窗口,然后从这个窗口里分配

不一定是连续的,文档上说 TiDB 能保证自增值的单调性,但并不能保证其连续性。可以参考一下官方文档关于自增 AUTO_INCREMENT这部分的内容:https://docs.pingcap.com/zh/tidb/stable/auto-increment#基本特性

正常情况下获取的3秒内的TSO是连续的吧?

有其他条件推进,可以看下这篇

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。