ORACLE RAC环境下sequence 的cache参数的重要性

andzen 发表于 2008-04-05 09:16:22

    对sequence的一直以来都不是很重视,因为很少在这个上面出过什么问题,当然是在默认参数的时候,此时在sequence上消耗的消耗的资源时间等待与在table上相比,几乎可以忽略不计,创建sequence不指定cache参数的时候oracle默认设置为20,大部分的时候得普通应用不会有性能问题,除了一秒种上万次的SELECT,默认值基本够用,但是最近有个运行了几年的系统在修改程序为并行INSERT的时候响应很慢,几乎于HANG住,基本的环境是AIX 5.3 + ORACLE 10.1 RAC,由于该数据库的特殊性不能直接登录查看等待事件,只能从对方要了一相关资料和SQL,仔细察看发现该系统使用的sequence的设置是nocache,于是手动进行一些测试:

RAC两个会话分别处于不同node同时并发循环间断去取4万个值  :            
nocache:               2100s
cache =1000:         55s
差别却是好大。

单Instance数据库单会话循环不间断去1-4万个值  测试(在家里笔记本上测试结果)过程如下:
nocache:             37.7s          10000   
cache :20            4.31s          10000
cache :100         2.92s           10000
cache :1000       5.56s          40000
nocache:             97.7s         40000
基本上cache 大于20的时候性能基本可以接受,最好设置100以上,
nocache的时候性能确实很差,最大相差20倍.

排序参数:oracle默认是NOORDER,如果设置为ORDER;在单实例环境没有影响,在RAC环境此时,多实例实际缓存相同的序列,此时在多个实例并发取该序列的时候,会有短暂的资源竞争来在多实例之间进行同步。因次性能相比noorder要差,所以RAC环境非必须的情况下不要使用ORDER,尤其要避免NOCACHE   ORDER组合;

是以为戒,不要随便更改oracle的默认属性,要改也往乐观的方向改,特别是在RAC上,啥事都得小心谨慎些。

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>
SQL> create user ikl identified by ikl
  2  ;

User created.

SQL> grant dba to ikl;

Grant succeeded.

SQL> conn ikl/ikl
Connected.
SQL> create sequence seq_1 nocache;

Sequence created.

SQL> set timing on
SQL> declare
x number ;
begin
  for i in 1 .. 10000 loop
  select seq_1.nextval into x from dual;
  end loop;
end ;
  8  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:37.88
SQL>  create sequence seq_2 cache 20;

Sequence created.

Elapsed: 00:00:00.04
SQL>
SQL> declare
x number ;
begin
  for i in 1 .. 10000 loop
  select seq_2.nextval into x from dual;
  end loop;
end ;
  8  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:04.31
SQL> create sequence seq_3 cache 100;

Sequence created.

Elapsed: 00:00:00.08
SQL> declare
x number ;
begin
  for i in 1 .. 10000 loop
  select seq_3.nextval into x from dual;
  end loop;
end ; 
  8  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:02.92
SQL>  create sequence seq_4 cache 1000;

declare
x number ;
begin
  for i in 1 .. 40000 loop
  select seq_4.nextval into x from dual;
  end loop;
end ;

Sequence created.

Elapsed: 00:00:00.03
SQL>
  9  /

PL/SQL procedure successfully completed.

Elapsed: 00:00:05.56

 SQL>
SQL> declare
x number ;
begin
  for i in 1 .. 40000 loop
  select seq_1.nextval into x from dual;
  end loop;
end ;   2    3    4    5    6    7
  8  /

PL/SQL procedure successfully completed.

Elapsed: 00:01:37.66
SQL>                

shekou   2008.04.05   清明后一天


曾经的这一天...


收藏: QQ书签 del.icio.us 订阅: Google 抓虾

最新评论

发表评论

* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 
 

分类小组论坛
杂谈, 娱乐、八卦, 文学、艺术, 体育, 旅游、同城, 象牙塔, 情感, 时尚、生活, 星座, 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定