本文将介绍使用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类型。