我们有一个带有自动增量列的表,其定义如下:
Col1 BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY
(START WITH 1
INCREMENT BY 1
MINVALUE -999999999999999999
MAXVALUE 999999999999999999
NO CYCLE),
现在,当我们第一次插入49条记录时,它将1001到100049作为此Col1的值,而不是从1开始。对于在下一小时插入,它取值200001到200049.依此类推。在第9个小时后,它花了1000001到1000049个值。
Teradta的自动增量究竟如何运作?是否在内存中与其他表中的其他自动增量列共享?
为什么它不以1开头并且在下次插入时继续增加1?如何解决这个问题?
答案 0 :(得分:1)
IDENTITY不是单个序列,这将是并行数据库系统中的瓶颈。事实上,对于每个表,并行存在多个序列,每个序列对应一个解析引擎和每个AMP,每个序列都保留一批值(默认值为100,000)。
当您通过单个会话提交单行INSERT时,所有行都由同一个PE处理,因此将按顺序分配值。当您再次注销和登录(或使用多个会话)时,您可能会连接到另一个具有不同值范围的PE。
当您插入SELECT行时,源AMP分配序列值,每个值都有不同的值范围。
当TD崩溃或关闭时,所有未使用的值都将丢失(类似于其他DBMS)。
在您的情况下,您可能会在中间注销并登录到其他PE。