志當(dāng)存高遠(yuǎn),功到自然成!

          少年強(qiáng)則中國強(qiáng),少年進(jìn)步則中國進(jìn)步!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            53 Posts :: 2 Stories :: 2 Comments :: 0 Trackbacks
          最近想對一個表進(jìn)行分區(qū),在sybase版轉(zhuǎn)了半天,沒找著詳細(xì)介紹表分區(qū)有關(guān)的帖子. 終於找著一篇比較詳細(xì)的,故貼之:

          Sybase ASE表分區(qū)的使用

          表分區(qū)是目前各主流數(shù)據(jù)庫都提供的常用技術(shù),各大數(shù)據(jù)庫基於不同的體系結(jié)構(gòu)提供了各具特色的實(shí)現(xiàn),如果能合理使用這種技術(shù),將為系統(tǒng)性能的提升帶來意想不到的效果,本文以Sybase ASE數(shù)據(jù)庫為例來說明這種技術(shù)的使用方法。


          在Sybase ASE中,未分區(qū)的不帶聚簇索引的表有一個雙向的數(shù)據(jù)庫頁鏈鏈接。在插入數(shù)據(jù)行時(shí),將查找並鎖定頁鏈的最後一頁,如果最後一頁空間用盡,Sybase ASE將分配新的一頁,如果對表進(jìn)行大量頻繁的數(shù)據(jù)插入,將引起對最後一頁鎖資源的競爭,如果一個事務(wù)(Transaction)正在使用最後一頁的排它鎖,那麼其他向同一張表插入數(shù)據(jù)的事務(wù)必須等待,直到該事務(wù)結(jié)束釋放資源,解除排它鎖。


          Sybase ASE從11.5開始提供新的特性表分區(qū)。表分區(qū)將產(chǎn)生附加的頁鏈,每個頁鏈有自己的最後一頁,這樣插入操作可以獲得多個最後一頁,實(shí)現(xiàn)並發(fā)操作,從而提高數(shù)據(jù)庫插入性能。若包含表的段分佈在多個物理設(shè)備上,表分區(qū)通過降低服務(wù)器從高速緩存向磁盤進(jìn)行數(shù)據(jù)刷新的I/O衝突而提高數(shù)據(jù)插入性能。對頻繁地追加數(shù)據(jù)到表中或進(jìn)行大塊數(shù)據(jù)的拷入、拷出操作,採用表分區(qū)技術(shù),將能極大地提升系統(tǒng)性能。


          劃分表分區(qū)的操作步驟如下:


          1. 在同一數(shù)據(jù)庫設(shè)備上劃分表分區(qū)時(shí),先創(chuàng)建表,再用alter table 的 partition 語句劃分表分區(qū)。


          create table opt_plnexrcd ( per_date datetime, per_sndstn char(4), ... )


          alter table opt_plnexrcd partition 5


          2. 在多個數(shù)據(jù)庫設(shè)備上劃分表分區(qū)時(shí),先建一個數(shù)據(jù)庫段在多個數(shù)據(jù)庫上,然後再將表建在該段上,最後對表分區(qū)。


          sp_addsegment seg1, oil, oil_data1


          sp_extendsement seg1, oil, oil_data2


          ...


          sp_extendsement seg1, oil, oil_data5


          create table opt_plnexrcd ( per_date datetime, per_sndstn char(4), ... ) on seg1


          或建完表後執(zhí)行sp_placeobject:


          sp_placeobject seg1, opt_plnexrcd


          最後對表分區(qū):


          alter table opt_plnexrcd partition 5


          如果表分為5個分區(qū),表所在的段又分跨5個數(shù)據(jù)庫設(shè)備,那麼每個分區(qū)將分別映射到該段所在的5個數(shù)據(jù)庫設(shè)備上。一般劃分表分區(qū)的原則是:表分區(qū)數(shù)等於或大於表所在段分跨的數(shù)據(jù)庫設(shè)備數(shù)。但要注意有些表不能分區(qū),它們是系統(tǒng)表、正在使用的表、臨時(shí)表和有聚簇索引的表。


          Sybase ASE使用保存在分區(qū)控制頁上的統(tǒng)計(jì)數(shù)據(jù),來評測基於分區(qū)的並行掃瞄方式,以挑選最優(yōu)執(zhí)行計(jì)劃。如果表中數(shù)據(jù)在多個分區(qū)上是分佈均衡的,表分區(qū)統(tǒng)計(jì)數(shù)據(jù)是精確的,那麼掃瞄效率就比較高,並行處理就有很好的性能,所以表分區(qū)的維護(hù)對於並行查詢處理十分重要。Sybase ASE的異常停止和某些情況下的事務(wù)回退都可能造成分區(qū)統(tǒng)計(jì)數(shù)據(jù)不精確,Sybase ASE提供了兩個系統(tǒng)函數(shù)data_pgs和ptn_data_pgs,用它們可分別計(jì)算數(shù)據(jù)頁面數(shù)量。如果兩者不相同,說明分區(qū)統(tǒng)計(jì)不精確,需要維護(hù),Sybase ASE 提供如下命令來更新分區(qū)和頁面統(tǒng)計(jì)數(shù)據(jù):


          1.更新每個分區(qū)的頁面統(tǒng)計(jì)數(shù)據(jù):


          update partition statistics


          2.更新表上索引的分佈頁面,同時(shí)更新各個表分區(qū)的控制頁面的統(tǒng)計(jì)數(shù)據(jù):


          update all statistics table_name


          3.顯示表分區(qū)的當(dāng)前信息:


          sp_helpartition


          如果對分區(qū)的表進(jìn)行了大量的插入、更新和刪除後,數(shù)據(jù)有可能分佈不均勻,使用BCP加載大量數(shù)據(jù)後,也可能會出現(xiàn)數(shù)據(jù)分佈不均勻,此外一些其他原因也可能導(dǎo)致數(shù)據(jù)分佈不均勻。平衡分區(qū)數(shù)據(jù)有兩種方法:一是對有數(shù)據(jù)的表建聚簇索引,二是使用並行塊拷貝,指定數(shù)據(jù)加載到某個分區(qū)的方法,Sybase ASE 新的BCP允許用戶指定分區(qū),把數(shù)據(jù)加載到指定的分區(qū)中。
          主站蜘蛛池模板: 望都县| 扎赉特旗| 承德市| 于都县| 涟水县| 贵阳市| 衡阳县| 民乐县| 天津市| 永安市| 招远市| 江西省| 盐津县| 博客| 望奎县| 青冈县| 外汇| 昭觉县| 醴陵市| 乌拉特中旗| 长武县| 元阳县| 当涂县| 鄂托克前旗| 南投市| 会东县| 高淳县| 九寨沟县| 乐陵市| 女性| 景德镇市| 沧源| 万载县| 定安县| 彭水| 农安县| 偃师市| 民县| 塔河县| 望奎县| 孝义市|