You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
CREATE TABLE t(a int AUTO_INCREMENT key) AUTO_ID_CACHE 1;
398
+
```
399
+
400
+
当 `AUTO_ID_CACHE` 设置为 `1` 时,所有 TiDB 实例生成的 ID 严格全局递增,每个 ID 保证全局唯一,相较于默认缓存模式(`AUTO_ID_CACHE 0` 具有 30000 个缓存值),ID 间隙显著缩小。
397
401
398
-
MySQL 兼容模式的使用方式是,建表时将 `AUTO_ID_CACHE` 设置为 `1`:
402
+
例如,启用 `AUTO_ID_CACHE 1` 后可以生成如下序列:
399
403
400
404
```sql
401
-
CREATE TABLE t(a int AUTO_INCREMENT key) AUTO_ID_CACHE 1;
405
+
INSERT INTO t VALUES (); -- Returns ID 1
406
+
INSERT INTO t VALUES (); -- Returns ID 2
407
+
INSERT INTO t VALUES (); -- Returns ID 3
408
+
-- After failover
409
+
INSERT INTO t VALUES (); -- Might return ID 5
410
+
```
411
+
412
+
相比之下,使用默认缓存(`AUTO_ID_CACHE 0`)时可能出现较大间隙:
413
+
414
+
```sql
415
+
INSERT INTO t VALUES (); -- Returns ID 1
416
+
INSERT INTO t VALUES (); -- Returns ID 2
417
+
-- New TiDB instance allocates next batch
418
+
INSERT INTO t VALUES (); -- Returns ID 30001
402
419
```
403
420
421
+
尽管 `AUTO_ID_CACHE 1` 能保证 ID 严格递增且不会出现类似 `AUTO_ID_CACHE 0` 的大幅间隙,但在以下场景中仍可能出现微小间隙。这些间隙是维持 ID 全局唯一性和严格递增特性的必要代价:
422
+
423
+
- 主实例退出或崩溃的故障恢复期间
424
+
425
+
使用 MySQL 兼容模式后,能保证 ID **唯一**、**单调递增**,行为几乎跟 MySQL 完全一致。即使跨 TiDB 实例访问,ID 也不会出现回退。只有在中心化分配自增 ID 服务的“主” TiDB 实例进程退出(如该 TiDB 节点重启)或者异常崩溃时,才有可能造成部分 ID 不连续。这是因为主备切换时,“备” 节点需要丢弃一部分之前的“主” 节点已经分配的 ID,以保证 ID 不出现重复。
使用 MySQL 兼容模式后,能保证 ID **唯一**、**单调递增**,行为几乎跟 MySQL 完全一致。即使跨 TiDB 实例访问,ID 也不会出现回退。只有在中心化分配自增 ID 服务的“主” TiDB 实例进程退出(如该 TiDB 节点重启)或者异常崩溃时,才有可能造成部分 ID 不连续。这是因为主备切换时,“备” 节点需要丢弃一部分之前的“主” 节点已经分配的 ID,以保证 ID 不出现重复。
0 commit comments