gdufo

           

          oracle大表分區(qū)的一點點心得

          http://www.knowsky.com/388420.html

          最近在做一個客戶關系治理系統,項目做的到不是非常成功,可還是學到了不少的知識,由于數據量很大,沒有專門的Oracle數據庫人員支持,對數據庫優(yōu)化治理等也只有我這個約懂一點的人上了。在對數據庫優(yōu)化上有一點點心得寫出來希望能同大家一起學習和交流。

          數據庫大表的優(yōu)化:采用蔟表(clustered tables)及蔟索引(Clustered Index)
          蔟表和蔟索引是oracle所提供的一種技術,其基本思想是將幾張具有相同數據項、 并且經常性一起使用的表通過共享數據塊(data block)的模式存放在一起。各表間的共同字段作為蔟鍵值(cluster key),數據庫在訪問數據時,首先找到蔟鍵值,以此同時獲得若干張表的相關數據。蔟表所能帶來的好處是可以減少I/O和減少存儲空間,其中我更看重前 者。采用表分區(qū)(partition)
          表分區(qū)技術是在超大型數據庫(VLDB)中將大表及其索引通過分區(qū)(patition)的形式分割為若干較小、可治理的小塊,并且每一分區(qū)可 進一步劃分為更小的子分區(qū)(sub partition)。而這種分區(qū)對于應用來說是透明的。通過對表進行分區(qū),可以獲得以下的好處:
          1)減少數據損壞的可能性。
          2)各分區(qū)可以獨立備份和恢復,增強了數據庫的可治理性。
          3)可以控制分區(qū)在硬盤上的分布,以均衡IO,改善了數據庫的性能。
          蔟表與表分區(qū)技術的側重點各有不同,前者側重于改進關聯表間查詢的效率,而表分區(qū)側重于大表的可治理性及局部查詢的性能。而這兩項對于我的系統來說都是極為重要。由于本人技術限制,目前尚不確定兩者是否可以同時實現,有那位在這方面有經驗的給點指導將不勝感激。 
          在兩者無法同時實現的情況下,應依照需實現的功能有所取舍。綜合兩種模式的優(yōu)缺點,我認為采用表分區(qū)技術較為適用于我們的應用。
          Oracle的表分區(qū)有以下幾種類型:
          1)范圍分區(qū):將表按某一字段或若干個字段的取值范圍分區(qū)。
          2)hash分區(qū):將表按某一字段的值均勻地分布到若干個指定的分區(qū)。
          3)復合分區(qū):結合了前面兩種分區(qū)類型的優(yōu)點,首先通過值范圍將表進行分區(qū),然后以hash模式將數據進一步均勻分配至物理存儲位置。
          綜合考慮各項因素,以第三種類型最為優(yōu)越。(本人實在技術有限僅采用了第1種范圍分區(qū),因為比較簡單,便于治理)
          優(yōu)化的具體步驟:
          1.確定需要優(yōu)化分區(qū)的表:
          經過對系統數據庫表結構和字段,應用程序的分析,現在確定那些大表需要進行分區(qū):
          如帳戶交易明細表acct_detail.
          2.確定表分區(qū)的方法和分區(qū)鍵:
          分區(qū)類型:采用范圍分區(qū)。
          分 區(qū) 鍵:
          按trans_date(交易時間)字段進行范圍分區(qū).
          3.確定分區(qū)鍵的分區(qū)范圍,及打算分多少分區(qū):
          如:帳戶交易明細表acct_detail.
          根據字段(trans_date)分成一下分區(qū):
          1).分區(qū)1:09/01/2003   
          2).分區(qū)2:10/01/2003   
          3).分區(qū)3:11/01/2003   
          4).分區(qū)4:12/01/2003   
          5).分區(qū)5:01/01/2004 
          6).分區(qū)6:02/01/2004 
             該表明顯需要在以后增加分區(qū)。
          4.建立分區(qū)表空間和分區(qū)索引空間
            1).建立表的各個分區(qū)的表空間: 
             1.分區(qū)1:crm_detail_200309
             CREATE TABLESPACE crm_detail_200309  DATAFILE  
             ‘/u1/oradata/orcl/crm_detail_20030901.dbf’ 
             SIZE 2000M EXTENT MANAGEMENT LOCAL UNIFORM size 16M;
             其它月份以后同以上(我在此采用oracle的表空間本地治理的方法)。

            2). 建立分區(qū)索引表空間
             1.分區(qū)1:index_detail_200309
             CREATE TABLESPACE index_detail_200309  DATAFILE  
             ‘/u3/oradata/orcl/index_detail_20030901.dbf’ 
             SIZE 2000M  EXTENT MANAGEMENT LOCAL UNIFORM size 16M;
          5.建立基于分區(qū)的表:
             create  table  table name
             (

              ........
              )
              enable row movment               --此語句是能修改行分區(qū)鍵值,也就是如不添加該                                     句不能修改記錄的分區(qū)鍵值,不能使記錄分區(qū)遷移
              PARTITION   BY   RANGE  (TRANS_DATE)
              (
                 PARTITION     crm_detail_200309  VALUES  LESS THAN 
          (TO_DATE (‘09/01/2003’,’mm/dd/yyyy’ ) )
          TABLESPACE   crm_detail_200309,
                 其他分區(qū).....
               );
          6.建立基于分區(qū)的索引:
            create  index   index_name  on table_name (分區(qū)鍵+…)
             global                                  --這里是全局分區(qū)索引,也可以建本地索引
             PARTITION   BY   RANGE  (TRANS_DATE)
             (
               PARTITION     index_detail_200309  VALUES  LESS THAN 
               (TO_DATE ('09/01/2003','mm/dd/yyyy' )) 
               TABLESPACE   index_detail_200309,
               其他索引分區(qū)...
              );
             
          對表的分區(qū)就這樣完成了,第一次主要確定表分區(qū)的分區(qū)策約是最重要的,可我覺得對表分區(qū)難在以后對表分區(qū)的治理上面,因為隨著數據量的增加,表分 區(qū)必然存在刪除,擴容,增加等。在這些過程中還牽涉到全局等索引,因為對分區(qū)表進行ddl操作為破壞全局索引,故全局索引必須在ddl后要重 rebuild.

          以上寫的很亂也很差,希望大家多多諒解和指點。

          posted on 2009-11-15 10:25 gdufo 閱讀(1670) 評論(1)  編輯  收藏 所屬分類: Database (oracle, sqlser,MYSQL)

          評論

          # re: oracle大表分區(qū)的一點點心得 2013-02-19 15:46 小葉

          Oracle看來很復雜啊,有很多地方不明白!  回復  更多評論   

          導航

          統計

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Hibernate

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 晴隆县| 襄城县| 湘潭县| 宜川县| 池州市| 新津县| 楚雄市| 昌都县| 中牟县| 阿拉善右旗| 红河县| 中方县| 宿州市| 龙江县| 都兰县| 清新县| 宁晋县| 醴陵市| 阿勒泰市| 会同县| 墨脱县| 武川县| 平和县| 中方县| 海丰县| 家居| 二连浩特市| 佛坪县| 横山县| 尉犁县| 隆德县| 天全县| 沾益县| 广东省| 东安县| 牙克石市| 连山| 大田县| 中西区| 内黄县| 石柱|