oracle序列设置缓存大小导致跳号?

666F 2021-02-03 07:50:27
是不是被缓存冲没了,把缓存换成设置成‘1’ 是否能彻底解决问题,会不会又什么不妥 ???
...全文
915 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
只能参考这样试试 https://www.cnblogs.com/xiaoL/p/4069481.html exec dbms_shared_pool.keep(name => 'SEQ_BEAR',flag => 'Q'); PL/SQL procedure successfully completed 使用DBMS_SHARED_POOL来KEEP SEQUENCE的CACHE
minsic78 2021-02-05
  • 打赏
  • 举报
回复
如果想不跳号,并且不出性能问题,不建议使用sequence,应使用程序自主实现。
惜分飞 2021-02-04
  • 打赏
  • 举报
回复
cache太小,如果使用频繁,性能影响比较大
  • 打赏
  • 举报
回复
SQL> create sequence s_aspen start with 1 increment by 1 nocache;


Sequence created.

SQL> SQL> create table t_aspen (t_int int);

Table created.

SQL> insert into t_aspen values(s_aspen.nextval);

1 row created.

SQL> select * from t_aspen;

     T_INT
----------
	 1

SQL> select s_aspen.nextval from dual;


   NEXTVAL
----------
	 2

SQL> SQL> insert into t_aspen values(s_aspen.nextval);


1 row created.

SQL> SQL> commit;

Commit complete.

SQL> select * from t_aspen;


     T_INT
----------
	 1
	 3

SQL> SQL> insert into t_aspen values(s_aspen.nextval);

1 row created.

SQL> rollback;

Rollback complete.

SQL> insert into t_aspen values(s_aspen.nextval);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t_aspen;

     T_INT
----------
	 1
	 3
	 5

SQL> 
lhdz_bj 2021-02-04
  • 打赏
  • 举报
回复
引用 3 楼 学艺不精的程序员 的回复:
[quote=引用 2 楼 lhdz_bj 的回复:]1、一般来说,这种跳号不会影响业务应用;
2、将缓冲设置为1,会降低性能,尤其是并发高时;
3、如果这种跳号对业务真的有影响,建议应用实现业务逻辑。
调为‘0’呢,不缓存了[/quote]

就算不缓存了,只要是共享的,也可能会发生跳号。
666F 2021-02-04
  • 打赏
  • 举报
回复
引用 1 楼 卖水果的net 的回复:
这个缓存大小调为 1,只是减少跳号的场景。 实际上常见的跳号有如下几种: 1、缓存后长时间未使用、或重启了实例,和楼主的描述基本吻合。 2、执行了 insert into t () values(seq.nextval) 以后,做了事务的回滚。 3、多个表(或多个语句)使用了同一个序列。 4、在表中删除了已经提交的数据。 PS:这个自增号,对实际业务有影响吗,还是说只是看着别扭(强迫症) 如果是业务要求必须是连续的,那就不能使用序列来生成这个序号。
调为‘0’呢,不缓存了
666F 2021-02-04
  • 打赏
  • 举报
回复
引用 2 楼 lhdz_bj 的回复:
1、一般来说,这种跳号不会影响业务应用; 2、将缓冲设置为1,会降低性能,尤其是并发高时; 3、如果这种跳号对业务真的有影响,建议应用实现业务逻辑。
调为‘0’呢,不缓存了
lhdz_bj 2021-02-04
  • 打赏
  • 举报
回复
1、一般来说,这种跳号不会影响业务应用;
2、将缓冲设置为1,会降低性能,尤其是并发高时;
3、如果这种跳号对业务真的有影响,建议应用实现业务逻辑。
卖水果的net 2021-02-03
  • 打赏
  • 举报
回复
这个缓存大小调为 1,只是减少跳号的场景。 实际上常见的跳号有如下几种: 1、缓存后长时间未使用、或重启了实例,和楼主的描述基本吻合。 2、执行了 insert into t () values(seq.nextval) 以后,做了事务的回滚。 3、多个表(或多个语句)使用了同一个序列。 4、在表中删除了已经提交的数据。 PS:这个自增号,对实际业务有影响吗,还是说只是看着别扭(强迫症) 如果是业务要求必须是连续的,那就不能使用序列来生成这个序号。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧