Todd

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            65 隨筆 :: 0 文章 :: 24 評論 :: 0 Trackbacks
          移動一個業務高并發,接入一個客戶電話就發一個特殊邀請碼(碼為字符加數字混編,無規律),碼已存表,業務上要 碼和用戶手機號碼一一對應;
          所以,來個用戶就得對未標記的碼更新手機號碼;高并發時,行鎖及等待比較耗時,導致數據庫性能下降嚴重;
          解決辦法,
          碼表增加seqid,字段;導入數據時使用rownum,做該字段值,建索引;
          更新時,使用序列,
          CREATE SEQUENCE SQ_U_SEQ INCREMENT BY 1 START WITH 1 MAXVALUE 50000000 CYCLE CACHE 2000 NOORDER;
          更新則:update ... where ... and t.seqid = SQ_U_SEQ.nextval ...;
          以后有新的數據要導入,則序列需重置,則:
          create or replace procedure seq_reset(v_seqname varchar2as n number(10);
          tsql varchar2(100);
           begin
           execute immediate 'select '||v_seqname||'.nextval from dual' into n;
            n:=-(n-1);
            tsql:='alter sequence '||v_seqname||' increment by '|| n;
            execute immediate tsql;
           execute immediate 'select '||v_seqname||'.nextval from dual' into n;
            tsql:='alter sequence '||v_seqname||' increment by 1';
           execute immediate tsql;
           end seq_reset;
          另外,高并發時序列的cache要設置大點,一般業務設置100以上,但nocache的時候性能確實很差,最大相差20倍. 排序參數:oracle默認是NOORDER,如果設置為ORDER;在單實例環境沒有影響,在RAC環境此時,多實例實際緩存相同的序列,此時在多個實例并發取該序列的時候,會有短暫的資源競爭來在多實例之間進行同步。因次性能相比noorder要差,所以RAC環境非必須的情況下不要使用ORDER,尤其要避免NOCACHE ORDER組合;
          posted on 2012-07-25 02:29 Todd 閱讀(1815) 評論(0)  編輯  收藏 所屬分類: DB
          主站蜘蛛池模板: 福海县| 阿城市| 石首市| 湘潭县| 新干县| 含山县| 临邑县| 鄂尔多斯市| 鹤岗市| 田林县| 杭锦旗| 临沭县| 江川县| 肃北| 克什克腾旗| 竹溪县| 始兴县| 昆明市| 揭东县| 平乐县| 当雄县| 宁夏| 连平县| 河池市| 阿城市| 鄂伦春自治旗| 河东区| 文化| 布拖县| 大竹县| 和平县| 连南| 成武县| 仁布县| 于都县| 白水县| 友谊县| 莒南县| 武清区| 安庆市| 泰和县|