YugabyteDB MYSQL中的序列有很大的差距
Sequence having big gaps in YugabyteDB YSQL
[用户在 YugabyteDB Community Slack 上发布的问题]
使用 YugabyteDB 2.11,并有一个简单的 table 如下所示:
create table my_table (id bigserial primary key, a text);
但是在插入数据时,序列有很大的差距。例如:在调用插入服务时,'id' 列获取的值为 1,2,3,101,201,202,301,......
.
发生这种情况是因为 --ysql_sequence_cache_minval
glfag https://docs.yugabyte.com/latest/reference/configuration/yb-tserver/#ysql-sequence-cache-minval。
所有序列在每个 yb-tserver 中缓存 100,这样它就可以扩展而无需每次查询 'single point of truth'。序列是 postgres 目录的一部分,因此存储在 yb-master 上。缓存为 1(无缓存)的序列必须为每个值联系主服务器,缓存为 100 允许后端从主服务器获取序列号并使用缓存指示的编号数字。这将使下一个会话选择其自己的范围 100,等等。
请注意,即使您删除了缓存,序列中也会存在间隙,因为它们本质上不是事务性的。
由于存在数据库序列,所以存在序列空缺的问题。这是一个计算机科学问题,而不是 YB(或实现)问题。如果你不想要差距,你需要一个连续的(不可扩展的)过程。这是不值得的权衡,特别是如果您实现 YB 以实现可伸缩性。
[用户在 YugabyteDB Community Slack 上发布的问题]
使用 YugabyteDB 2.11,并有一个简单的 table 如下所示:
create table my_table (id bigserial primary key, a text);
但是在插入数据时,序列有很大的差距。例如:在调用插入服务时,'id' 列获取的值为 1,2,3,101,201,202,301,......
.
发生这种情况是因为 --ysql_sequence_cache_minval
glfag https://docs.yugabyte.com/latest/reference/configuration/yb-tserver/#ysql-sequence-cache-minval。
所有序列在每个 yb-tserver 中缓存 100,这样它就可以扩展而无需每次查询 'single point of truth'。序列是 postgres 目录的一部分,因此存储在 yb-master 上。缓存为 1(无缓存)的序列必须为每个值联系主服务器,缓存为 100 允许后端从主服务器获取序列号并使用缓存指示的编号数字。这将使下一个会话选择其自己的范围 100,等等。
请注意,即使您删除了缓存,序列中也会存在间隙,因为它们本质上不是事务性的。
由于存在数据库序列,所以存在序列空缺的问题。这是一个计算机科学问题,而不是 YB(或实现)问题。如果你不想要差距,你需要一个连续的(不可扩展的)过程。这是不值得的权衡,特别是如果您实现 YB 以实现可伸缩性。