本文将介绍使用Sequence过程中的注意事项及问题处理的方法。
New Sequence
- New Sequence仅支持在5.4.14及以上版本的AUTO模式数据库中使用;
- New Sequence的自定义步长、限定最大值和循环分配特性,仅在5.4.17及以上版本支持;
- 如果已经创建过New Sequence,但要降级到不支持New Sequence的版本上,则必须在降级前将所有New Sequence转换成Group Sequence,转换方法如下:
- 通过INFORMATION_SCHEMA.SEQUENCES视图查询实例范围内是否存在New Sequence;
- 若New Sequence存在,使用转换语句
CONVERT ALL SEQUENCES FROM NEW TO GROUP
将实例下的所有New Sequence转换为Group Sequence,详情请参见CONVERT SEQUENCES。
- New Sequence中使用GMS对AUTO_INCREMENT的值进行分配,为保证性能,需要在GMS内缓存一段值。如果GMS发生版本升级、主备切换、变配、迁移等操作,那么操作前内存中缓存的值会被丢弃,造成值的跳跃。
Group Sequence
- 5.4.13及以下版本,5.4.14及以上版本的DRDS模式数据库中,默认使用Group Sequence;
- Group Sequence的值从100001开始分配,即起始值(可分配的最小值)为100001;
- 单元化Group Sequence不支持作为源或目标的类型转换,也不支持修改起始值以外的参数;
- 属于同一个全局唯一数字序列分配空间的每个单元化Group Sequence ,必须指定相同的单元数量和不同的单元索引,以保证跨实例或跨库的全局唯一性。
- 不建议使用建表时自动关联的、以
AUTO_SEQ_
为前缀的Group Sequence单独获取NEXTVAL,并使用获取的值通过INSERT
显式插入该表中,这样做可能使该Group Sequence频繁刷新缓存区间,导致值增长过快。
Time-based Sequence
将Time-based Sequence用于表中自增列时,该列必须使用BIGINT类型。