oracle資料庫設定

xfhuangfu發表於2015-07-04
資料庫設計方面:
1:資料庫塊大小選擇(db_block_size)
預設是8k,塊越大,裝的行記錄就越多,所需的塊就越少,讀取記錄產生的io就越少
OLAP(資料倉儲)特點是一般使用者不多,併發不大,查詢方式最多是使用全表掃描,返回大量的資料,
OLTP 特點是使用者很多,併發很大,查詢方式最多是使用索引,返回極少的資料
因此OLAP中block儘量大,塊設定越大效能越會有提升
oltp系統傾向於索引讀返回少量記錄,塊的大小對效能影響不大。如果塊設定太大,容易導致
大量併發查詢及更新操作都指向同一個資料塊,從而產生熱塊

2:建立資料檔案時extent的擴充套件
對oracle來說,表空間擴充套件是要格式化作業系統檔案成為oracle可以識別的資料庫檔案,需要很大開銷
因此在建立表空間時,一般會多預先分配大點的空間

3:表的pctfree設定
pctfree控制著block塊中的free空間,可以根據資料庫對錶更新的頻繁程度,對錶的pctfree做設定,免得產生行遷移,影響效能
pctfree設定大一些,可避免行遷移
alter table xx pctfree 20
其實消除行遷移的一個簡單方法,就是資料重建

 
 
分割槽表的一些基礎
 
 
分割槽表
三種型別:範圍分割槽、列表分割槽、hash分割槽、組合分割槽
範圍分割槽使用最廣,列表分割槽次之
不同分割槽,在不同segment中,可以將分割槽指定到不同的表空間裡
1:範圍分割槽
最常見的是按時間列進行分割槽
create table xxx(id number,deal_date date,area_code number)
partition by range(deal_date)
(
 partition p1 values less tha(to_date('2012-02-01','YYYY-MM-DD')),
 ...................
 partition p11 values less tha(to_date('2012-12-01','YYYY-MM-DD')),
 partition p12 values less tha(to_date('2013-01-01','YYYY-MM-DD')),
 partition p_max values less tha(maxvalue)
 );
 
 
2:列表分割槽
 
最常見的是按地區列進行分割槽
create table xxx(id number,deal_time date,area_code number)
partition by list(area_code)
(
 partition p51 values(51),
 partition p52 values(52),
 ..................
 partition p59 values(59),
 partition p_other values(default)
 );
 
 
 
 
 分割槽表的原理
 
 將一個大的物件分成了多個小物件
 
 
 分割槽表作用
 
 1:分割槽消除,將大物件劃分為更小的物件
 
 2:分割槽truncate更快捷
 
    很多歷史表、日誌表都被設計為分割槽表,正是由於這個特性使得清理資料極其方便
   
 3: 分割槽資料轉移備份
 
    可以將分割槽表的某個分割槽資料透過分割槽交換的方式交換出來備份
    普通表和分割槽表的欄位必須完全一樣
   
    將分割槽表t_range的p8分割槽的資料備份到普通表t_normal中
    alter table t_range exchange partition p8 with table t_normal
    然後可以看到p8分割槽的資料不見了,直接跑到t_normal表裡了
   
 4:分割槽切割(split)
 
 5: 分割槽合併
 
 
 
 分割槽索引
 
 1:全域性索引
   
   可以理解為普通索引,整個分割槽的一個大索引
   create index idx_range_date on t_range(deal_date);
 
 2:區域性索引
 
   其實就是針對各分割槽所建的索引
   create index idx_range_areacode on t_range(area_code) local
  
  
   select index_name,status from user_indexes where index_name in('IDX_RANGE_DATE','IDX_RANGE_AREACODE')
  
   查詢出status狀態為N/A的表示區域性索引,需要到user_ind_partitions中分析索引狀態
  
   select index_name,partition_name,status from user_ind_partitions where index_name='IDX_RANGE_AREACODE'
  
 
 分割槽索引失效 
  
  1: 一般在對分割槽表的分割槽操作時,對區域性索引一般都沒有影響,但是對全域性索引影響比較大,一般都會重建全域性索引
   alter index idx_range_date rebuild
  
   也可以在執行分割槽操作時直接加update global indexes引數,如:
  
   alter table t_range truncate partition p2 update global indexes
  
  2:有索引效率更低
 
     很有可能是遍歷了整個分割槽表
 
  3:無法應用分割槽條件
    
        
  
  
   
      
 

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

相關文章