<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    (轉(zhuǎn))Oracle Sequence Cache 參數(shù)說明

    Oracle Sequence Cache 參數(shù)說明 收藏
     

           公司上線一套RAC 系統(tǒng)。 Aston對Sequence 的 Cache 參數(shù)表示關(guān)注,建議并發(fā)大的系統(tǒng)對Cache設(shè)置大一點。 這樣可以提高性能。 和Aston 討論了一下。 又從網(wǎng)上查了一下。

     

    RACLE SEQUENCE 介紹
    http://blog.csdn.net/tianlesoftware/archive/2009/10/30/4745039.aspx

     

    之前整理的一篇文章。 剛才看了一下,也是從網(wǎng)上轉(zhuǎn)的。 那是還是寫blog初期的作品。 2009年10月份的。 轉(zhuǎn)眼一年,寫B(tài)log 也比以前成熟了很多。
     

    一. 理論知識先看一個創(chuàng)建Sequence的語句:
    SQL> create sequence seq_tmp

      2  increment by 1

      3  start with 1

      4  nomaxvalue

      5  nocycle

      6  ;

    序列已創(chuàng)建。
     

    相關(guān)參數(shù)說明:
          INCREMENT BY 1 -- 每次加幾個

          START WITH 1 -- 從1開始計數(shù)

          NOMAXvalue -- 不設(shè)置最大值

          NOCYCLE -- 一直累加,不循環(huán)

          CACHE 10;  --設(shè)置緩存cache個序列

          CURRVAL=返回 sequence的當(dāng)前值

          NEXTVAL=增加sequence的值,然后返回 sequence 值

     

    更多信息,參考Oracle 聯(lián)機文檔:
    CREATE SEQUENCE

    http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/statements_6015.htm#SQLRF01314

     

     

    這里對Cache 參數(shù)做一個說明:
          如果指定CACHE值,ORACLE就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,oracle自動再取一組到cache。 使用cache或許會跳號, 比如我們在創(chuàng)建序列時指定Cache 為100. 在某一個時刻,序列使用到了80. 而在這個時刻,數(shù)據(jù)庫突然不正常down掉(shutdown abort),cache中的sequence就會丟失.  在下次啟動分配cache時,數(shù)據(jù)庫會從101 開始,在分配100個緩存。即101--200. 而之前分配100個中的80-100這20個因為意外宕機而丟失。 這種情況下就會出現(xiàn)跳號的現(xiàn)象。我們可以在create sequence的時候用nocache防止這種情況。 但是nocache 的性能較差。 如果指定cache而沒有設(shè)定cache值,默認cache是20個。 這個默認值對于大多數(shù)情況下都是夠用的。 除非那種每秒上萬次的select。 所以具體情況要具體對待。 對于哪些大并發(fā)的系統(tǒng),最好設(shè)置在100以上。像移動的BOSS系統(tǒng),以1000為單位。

     

    CACHE Specify how many values of the sequence the database preallocates and keeps in memory for faster access. This integer value can have 28 or fewer digits. The minimum value for this parameter is 2. For sequences that cycle, this value must be less than the number of values in the cycle. You cannot cache more values than will fit in a given cycle of sequence numbers. Therefore, the maximum value allowed for CACHE must be less than the value determined by the following formula:

    (CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)

    If a system failure occurs, then all cached sequence values that have not been used in committed DML statements are lost. The potential number of lost values is equal to the value of the CACHE parameter.

    Note:

    Oracle recommends using the CACHE setting to enhance performance if you are using sequences in an Oracle Real Application Clusters environment.

    NOCACHE  Specify NOCACHE to indicate that values of the sequence are not preallocated. If you omit both CACHE and NOCACHE, then the database caches 20 sequence numbers by default.

     

     

    關(guān)于Order 參數(shù)的說明:
     

           序參數(shù):oracle默認是NOORDER,如果設(shè)置為ORDER;在單實例環(huán)境沒有影響,在RAC環(huán)境此時,多實例實際緩存相同的序列,此時在多個實例并發(fā)取該序列的時候,會有短暫的資源競爭來在多實例之間進行同步。因次性能相比noorder要差,所以RAC環(huán)境非必須的情況下不要使用ORDER,尤其要避免NOCACHE   ORDER組合。

     

    ORDER Specify ORDER to guarantee that sequence numbers are generated in order of request. This clause is useful if you are using the sequence numbers as timestamps. Guaranteeing order is usually not important for sequences used to generate primary keys.

    ORDER is necessary only to guarantee ordered generation if you are using Oracle Real Application Clusters. If you are using exclusive mode, then sequence numbers are always generated in order.

    NOORDER  Specify NOORDER if you do not want to guarantee sequence numbers are generated in order of request. This is the default.

     

     

    查看user_sequences 表的結(jié)構(gòu):
    SQL> desc user_sequences;

     名稱                                      是否為空? 類型
     ----------------------------------------- -------- ---------------

     SEQUENCE_NAME                             NOT NULL VARCHAR2(30)

     MIN_VALUE                                          NUMBER

     MAX_VALUE                                          NUMBER

     INCREMENT_BY                              NOT NULL NUMBER

     CYCLE_FLAG                                         VARCHAR2(1)

     ORDER_FLAG                                         VARCHAR2(1)

     CACHE_SIZE                                NOT NULL NUMBER

     LAST_NUMBER                               NOT NULL NUMBER

     

     

    查看剛才創(chuàng)建的序列seq_tmp 的值:
    SQL> select * from user_sequences where sequence_name='SEQ_TMP';

    SEQUENCE_N  MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER

    ---------- ---------- ---------- ------------ - - ---------- -----------

    SEQ_TMP             1 1.0000E+28            1 N N         20          21

     

    這里有個CACHE_SIZE的值。 我們在創(chuàng)建sequence的時候,啟用了cache,但是沒有給它值。 所以這里的cache_size 就是系統(tǒng)的模式值。 即20個。

     

     

    取下一個sequence的值:
    SQL> select seq_tmp.nextval from dual;

       NEXTVAL

    ----------

             1

    SQL> select seq_tmp.nextval from dual;

       NEXTVAL

    ----------

             2

     

     

    查看當(dāng)前sequence的值:
    SQL> select seq_tmp.currval from dual;

     

       CURRVAL

    ----------

     

    二. 實驗一個網(wǎng)友RAC 系統(tǒng)上的測試時結(jié)果:
    nocache:               2100s

    cache =1000:          55s

    差別很明顯。

     

     

    測試一:
    SQL> create sequence seq_1 nocache;

    序列已創(chuàng)建。

    SQL> set timing on;

    SQL> declare

      2  x number;

      3  begin

      4  for i in 1 .. 10000 loop

      5  select seq_1.nextval into x from dual;

      6  end loop;

      7  end;

      8  /

    PL/SQL 過程已成功完成。

     

    已用時間:  00: 00: 02.26

     

    測試二:
    SQL> create sequence seq_2 cache 20;

    序列已創(chuàng)建。

    已用時間:  00: 00: 00.01

    SQL> declare

      2  x number;

      3  begin

      4  for i in 1 .. 10000 loop

      5  select seq_2.nextval into x from dual;

      6  end loop;

      7  end;

      8  /

    PL/SQL 過程已成功完成。

     

    已用時間:  00: 00: 00.46

     

    測試三:
    SQL> create sequence seq_3 cache 100;

     

    序列已創(chuàng)建。

     

    已用時間:  00: 00: 00.05

    SQL> declare

      2  x number;

      3  begin

      4  for i in 1 .. 10000 loop

      5  select seq_3.nextval into x from dual;

      6  end loop;

      7  end;

      8  /

     

    PL/SQL 過程已成功完成。

     

    已用時間:  00: 00: 00.37

     

     

    測試四:
    SQL> create sequence seq_4 cache 1000;

    序列已創(chuàng)建。

    已用時間:  00: 00: 00.04

    SQL> declare

      2  x number;

      3  begin

      4  for i in 1 .. 40000 loop

      5  select seq_4.nextval into x from dual;

      6  end loop;

      7  end;

      8  /

     

    PL/SQL 過程已成功完成。

     

    已用時間:  00: 00: 01.31

    SQL> declare

      2  x number;

      3  begin

      4  for i in 1 .. 40000 loop

      5  select seq_1.nextval into x from dual;

      6  end loop;

      7  end;

      8  /

     

    PL/SQL 過程已成功完成。

     

    已用時間:  00: 00: 09.33

    SQL>

     

     

     

    小結(jié):

     

    在自己的本本上測試的,Oracle 11gR2.  單Instance數(shù)據(jù)庫單會話循環(huán)不間斷取1-4萬個值。

    nocache:             2.26s          10000   

    cache:20              0.46s          10000

    cache:100             0.37s          10000

    cache:1000            1.31s          40000

    nocache:             9.33s         40000

     

    基本上cache 大于20的時候性能基本可以接受,nocache的時候性能確實很差.

     

    本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/tianlesoftware/archive/2010/11/08/5995051.aspx

    posted on 2011-01-31 11:49 liujg 閱讀(1816) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(1)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    boddiy

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 精品亚洲永久免费精品| 亚洲国产综合人成综合网站| 免费网站看av片| 日韩精品内射视频免费观看 | 国产亚洲色视频在线| 精品亚洲综合在线第一区| 91视频精品全国免费观看| 四虎在线最新永久免费| 国产一区二区三区在线免费| 国产午夜亚洲精品国产成人小说| 一级成人a免费视频| 毛片免费在线播放| 亚洲人成77777在线播放网站| 2017亚洲男人天堂一| a级毛片免费观看在线| 成视频年人黄网站免费视频| 中文字幕亚洲无线码a| 337P日本欧洲亚洲大胆艺术图| 女人隐私秘视频黄www免费| 亚洲av无码成h人动漫无遮挡| 美女被羞羞网站免费下载| 91嫩草免费国产永久入口| 亚洲深深色噜噜狠狠网站| 一级毛片aaaaaa免费看| 亚洲一区AV无码少妇电影☆| 好久久免费视频高清| 亚洲粉嫩美白在线| 内射无码专区久久亚洲| 亚洲AV无码精品蜜桃| 色猫咪免费人成网站在线观看| 亚洲国产成人精品无码一区二区 | 美女黄色免费网站| 国产v亚洲v天堂无码网站| 日韩免费精品视频| 亚洲成人午夜电影| 91香蕉国产线在线观看免费| 亚洲深深色噜噜狠狠爱网站| 天天影视色香欲综合免费| 高潮毛片无遮挡高清免费| 久久亚洲日韩看片无码| 久久免费区一区二区三波多野|