Segments by ITL Waits 問題及解決

xz43發表於2011-04-26
上次在現場做效能測試,併發3000人同時做INSERT操作,每人操作500條記錄,也就是一次插入150W,發現有點慢,檢視awr報告,主要的等待事件就是“enq: TX - allocate ITL entry”,檢視segments by logical reads、segments by Row lock waits 和 segments by ITL waits,都是指向這個表的主鍵PK_ST。
 
上網查資料,再結合現場相關技術員的指導,決定將原來的主鍵刪除重建,目的就是為了在主鍵上建全域性分割槽索引,並把索引的initrans初始值調大。
 
類似如下指令碼:
 
--刪除原有表上的主鍵關係
alter table t_testtab
  drop constraint pk_testtab cascade;

--刪除原有表主鍵預設的索引 
drop index pk_testtab; 
 
--在該欄位上重新建立全域性、唯一、分割槽索引,為加快建立速度,這裡增加了並行度,若沒多少資料的話,可以考慮去掉並行度 
create unique index index_t_testtab on t_testtab(id) global
 partition by hash(id)
(
partition part_index_1 tablespace ST_DB1,
partition part_index_2 tablespace ST_DB2,
partition part_index_3 tablespace ST_DB3,
partition part_index_4 tablespace ST_DB4,
partition part_index_5 tablespace ST_DB5
) parallel 10;
 
--在該欄位上建立主鍵約束
alter table t_testtab add constraint pk_testtab primary key (id);
 
--修改該主鍵的initrans預設值為20
alter index pk_testtab  initrans 20;
 
--由於前面刪除主鍵,其他表與該表的主外來鍵約束都會自動刪除,需要重新建立主外來鍵並在外來鍵欄位增加索引
alter table t_testone
  add constraint fk_testone foreign key (TID)
  references t_testtab (ID);
create index INDEX_TESTONE on t_testone (tid);
 
 

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

相關文章