oracle解决rac序列,Oracle RAC和序列

摘要

CACHE可以显著提高使用ORDER,甚至在RAC序列的性能。

它还没有NOORDER那么快,但它可能会令人惊讶地接近。特别是如果序列一次只在其中一个节点上使用。

测试用例

SQL> create sequence cache_order cache 20 order;

Sequence created.

SQL> create sequence cache_noorder cache 20 noorder;

Sequence created.

SQL> create sequence nocache_order nocache order;

Sequence created.

SQL> create sequence nocache_noorder nocache noorder;

Sequence created.

SQL> set timing on

SQL> declare

2 v_temp number;

3 begin

4 for i in 1 .. 100000 loop

5 v_temp := cache_order.nextval;

6 end loop;

7 end;

8/

PL/SQL procedure successfully completed.

Elapsed: 00:00:08.44

SQL> declare

2 v_temp number;

3 begin

4 for i in 1 .. 100000 loop

5 v_temp := cache_noorder.nextval;

6 end loop;

7 end;

8/

PL/SQL procedure successfully completed.

Elapsed: 00:00:07.46

SQL> declare

2 v_temp number;

3 begin

4 for i in 1 .. 100000 loop

5 v_temp := nocache_order.nextval;

6 end loop;

7 end;

8/

PL/SQL procedure successfully completed.

Elapsed: 00:00:35.15

SQL> declare

2 v_temp number;

3 begin

4 for i in 1 .. 100000 loop

5 v_temp := nocache_noorder.nextval;

6 end loop;

7 end;

8/

PL/SQL procedure successfully completed.

Elapsed: 00:00:35.10

测试案例笔记上一个2节点RAC获得

我的结果。只显示一个结果集,但我在不同的数据库上多次运行测试用例,并获得几乎相同的结果。

我也在不同的节点上同时运行测试。 CACHE仍然显着改善ORDER,尽管CACHE NOORDER是CACHE ORDER的两倍多。

我在过去的其他环境中也注意到了类似的行为,虽然我没有任何结果。

为什么?

我不明白为什么CACHE在使用ORDER时会产生如此大的差异。与通过网络发送数据的时间相比,生成数字的时间量应该是不相关的。这让我认为Oracle要么使用的算法不好,要么我的测试用例是错误的。 (如果有人可以在我的测试用例中发现问题,请告诉我。)

此外,此答案仅讨论生成序列的时间。使用NOORDER可能还有其他好处。例如,减少索引争用,如描述here。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值