一個效能優化的案例

paulyibinyi發表於2008-04-08

1.以前 業務處理時要求 插入某 表的處理方式(該表已經是分割槽):
    每個客戶對應的每種遊戲,在做影像時對中都會生成一條記錄
    如果客戶沒玩遊戲該條記錄補0(目前客戶數50000,8個遊戲 t做影像每天需要增加400000多行記錄,

   一個月也就400000*30=12000000萬),增加量很快
   而且本身這個表建立了四五個全域性索引,通過程式插入時每天需要半個鐘頭左右,

  隨著資料量增加 插入越來越慢, 按分割槽查詢時一個月資料量也很大,影響報表查詢

2.通過與業務相結合討論建議
   如果該客戶沒玩遊戲,在該表中不產生記錄,這樣就少了很多記錄,其中每天線上玩家數也就幾百左右

那這樣產生的資料量也就(500*8=4000左右) 大大減少了資料量的產生
   提高後臺相關報表查詢效能和減少做影像時間

3.資料對比
  select count(*) from test (全部)
    80000000
  select count(*) from test (去除為0的記錄)
  where amount>0  

    800000
  資料量相差100倍

4.實施 因為是線上系統 晚上12點做影像 所以在這之前或之後做好就行

  因為是分割槽表為了不影響生產效能按分割槽插入提高插入資料速度:

  改為非分割槽表

 create table  temp
(

column1 number(20);

column2 varchar2(2);

......
 );

--插入資料到臨時表中
insert into temp
select * from test  partition(P200608)
  where  amount>0;

insert into temp
select * from test  partition(P200609)
  where  amount>0;

 

......

alter table test rename to test_bak;

alter table temp rename to test;

drop table test_bak;

重建相關索引和分析資料

 

5.效果

目前插入由以前的半個小時變到幾十秒鐘,相關查詢報表速度提高很多

效能得到明顯提高

6.總結

效能優化是個長期的過程,要不斷的跟蹤與觀察,還要非常瞭解業務,

這樣才會對系統提出更好的建議

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-231116/,如需轉載,請註明出處,否則將追究法律責任。

相關文章