最近想對(duì)一個(gè)表進(jìn)行分區(qū),在sybase版轉(zhuǎn)了半天,沒(méi)找著詳細(xì)介紹表分區(qū)有關(guān)的帖子. 終於找著一篇比較詳細(xì)的,故貼之:
Sybase ASE表分區(qū)的使用
表分區(qū)是目前各主流數(shù)據(jù)庫(kù)都提供的常用技術(shù),各大數(shù)據(jù)庫(kù)基於不同的體系結(jié)構(gòu)提供了各具特色的實(shí)現(xiàn),如果能合理使用這種技術(shù),將為系統(tǒng)性能的提升帶來(lái)意想不到的效果,本文以Sybase ASE數(shù)據(jù)庫(kù)為例來(lái)說(shuō)明這種技術(shù)的使用方法。
在Sybase ASE中,未分區(qū)的不帶聚簇索引的表有一個(gè)雙向的數(shù)據(jù)庫(kù)頁(yè)鏈鏈接。在插入數(shù)據(jù)行時(shí),將查找並鎖定頁(yè)鏈的最後一頁(yè),如果最後一頁(yè)空間用盡,Sybase ASE將分配新的一頁(yè),如果對(duì)表進(jìn)行大量頻繁的數(shù)據(jù)插入,將引起對(duì)最後一頁(yè)鎖資源的競(jìng)爭(zhēng),如果一個(gè)事務(wù)(Transaction)正在使用最後一頁(yè)的排它鎖,那麼其他向同一張表插入數(shù)據(jù)的事務(wù)必須等待,直到該事務(wù)結(jié)束釋放資源,解除排它鎖。
Sybase ASE從11.5開始提供新的特性表分區(qū)。表分區(qū)將產(chǎn)生附加的頁(yè)鏈,每個(gè)頁(yè)鏈有自己的最後一頁(yè),這樣插入操作可以獲得多個(gè)最後一頁(yè),實(shí)現(xiàn)並發(fā)操作,從而提高數(shù)據(jù)庫(kù)插入性能。若包含表的段分佈在多個(gè)物理設(shè)備上,表分區(qū)通過(guò)降低服務(wù)器從高速緩存向磁盤進(jìn)行數(shù)據(jù)刷新的I/O衝突而提高數(shù)據(jù)插入性能。對(duì)頻繁地追加數(shù)據(jù)到表中或進(jìn)行大塊數(shù)據(jù)的拷入、拷出操作,採(cǎi)用表分區(qū)技術(shù),將能極大地提升系統(tǒng)性能。
劃分表分區(qū)的操作步驟如下:
1. 在同一數(shù)據(jù)庫(kù)設(shè)備上劃分表分區(qū)時(shí),先創(chuàng)建表,再用alter table 的 partition 語(yǔ)句劃分表分區(qū)。
create table opt_plnexrcd ( per_date datetime, per_sndstn char(4), ... )
alter table opt_plnexrcd partition 5
2. 在多個(gè)數(shù)據(jù)庫(kù)設(shè)備上劃分表分區(qū)時(shí),先建一個(gè)數(shù)據(jù)庫(kù)段在多個(gè)數(shù)據(jù)庫(kù)上,然後再將表建在該段上,最後對(duì)表分區(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
最後對(duì)表分區(qū):
alter table opt_plnexrcd partition 5
如果表分為5個(gè)分區(qū),表所在的段又分跨5個(gè)數(shù)據(jù)庫(kù)設(shè)備,那麼每個(gè)分區(qū)將分別映射到該段所在的5個(gè)數(shù)據(jù)庫(kù)設(shè)備上。一般劃分表分區(qū)的原則是:表分區(qū)數(shù)等於或大於表所在段分跨的數(shù)據(jù)庫(kù)設(shè)備數(shù)。但要注意有些表不能分區(qū),它們是系統(tǒng)表、正在使用的表、臨時(shí)表和有聚簇索引的表。
Sybase ASE使用保存在分區(qū)控制頁(yè)上的統(tǒng)計(jì)數(shù)據(jù),來(lái)評(píng)測(cè)基於分區(qū)的並行掃瞄方式,以挑選最優(yōu)執(zhí)行計(jì)劃。如果表中數(shù)據(jù)在多個(gè)分區(qū)上是分佈均衡的,表分區(qū)統(tǒng)計(jì)數(shù)據(jù)是精確的,那麼掃瞄效率就比較高,並行處理就有很好的性能,所以表分區(qū)的維護(hù)對(duì)於並行查詢處理十分重要。Sybase ASE的異常停止和某些情況下的事務(wù)回退都可能造成分區(qū)統(tǒng)計(jì)數(shù)據(jù)不精確,Sybase ASE提供了兩個(gè)系統(tǒng)函數(shù)data_pgs和ptn_data_pgs,用它們可分別計(jì)算數(shù)據(jù)頁(yè)面數(shù)量。如果兩者不相同,說(shuō)明分區(qū)統(tǒng)計(jì)不精確,需要維護(hù),Sybase ASE 提供如下命令來(lái)更新分區(qū)和頁(yè)面統(tǒng)計(jì)數(shù)據(jù):
1.更新每個(gè)分區(qū)的頁(yè)面統(tǒng)計(jì)數(shù)據(jù):
update partition statistics
2.更新表上索引的分佈頁(yè)面,同時(shí)更新各個(gè)表分區(qū)的控制頁(yè)面的統(tǒng)計(jì)數(shù)據(jù):
update all statistics table_name
3.顯示表分區(qū)的當(dāng)前信息:
sp_helpartition
如果對(duì)分區(qū)的表進(jìn)行了大量的插入、更新和刪除後,數(shù)據(jù)有可能分佈不均勻,使用BCP加載大量數(shù)據(jù)後,也可能會(huì)出現(xiàn)數(shù)據(jù)分佈不均勻,此外一些其他原因也可能導(dǎo)致數(shù)據(jù)分佈不均勻。平衡分區(qū)數(shù)據(jù)有兩種方法:一是對(duì)有數(shù)據(jù)的表建聚簇索引,二是使用並行塊拷貝,指定數(shù)據(jù)加載到某個(gè)分區(qū)的方法,Sybase ASE 新的BCP允許用戶指定分區(qū),把數(shù)據(jù)加載到指定的分區(qū)中。
Sybase ASE表分區(qū)的使用
表分區(qū)是目前各主流數(shù)據(jù)庫(kù)都提供的常用技術(shù),各大數(shù)據(jù)庫(kù)基於不同的體系結(jié)構(gòu)提供了各具特色的實(shí)現(xiàn),如果能合理使用這種技術(shù),將為系統(tǒng)性能的提升帶來(lái)意想不到的效果,本文以Sybase ASE數(shù)據(jù)庫(kù)為例來(lái)說(shuō)明這種技術(shù)的使用方法。
在Sybase ASE中,未分區(qū)的不帶聚簇索引的表有一個(gè)雙向的數(shù)據(jù)庫(kù)頁(yè)鏈鏈接。在插入數(shù)據(jù)行時(shí),將查找並鎖定頁(yè)鏈的最後一頁(yè),如果最後一頁(yè)空間用盡,Sybase ASE將分配新的一頁(yè),如果對(duì)表進(jìn)行大量頻繁的數(shù)據(jù)插入,將引起對(duì)最後一頁(yè)鎖資源的競(jìng)爭(zhēng),如果一個(gè)事務(wù)(Transaction)正在使用最後一頁(yè)的排它鎖,那麼其他向同一張表插入數(shù)據(jù)的事務(wù)必須等待,直到該事務(wù)結(jié)束釋放資源,解除排它鎖。
Sybase ASE從11.5開始提供新的特性表分區(qū)。表分區(qū)將產(chǎn)生附加的頁(yè)鏈,每個(gè)頁(yè)鏈有自己的最後一頁(yè),這樣插入操作可以獲得多個(gè)最後一頁(yè),實(shí)現(xiàn)並發(fā)操作,從而提高數(shù)據(jù)庫(kù)插入性能。若包含表的段分佈在多個(gè)物理設(shè)備上,表分區(qū)通過(guò)降低服務(wù)器從高速緩存向磁盤進(jìn)行數(shù)據(jù)刷新的I/O衝突而提高數(shù)據(jù)插入性能。對(duì)頻繁地追加數(shù)據(jù)到表中或進(jìn)行大塊數(shù)據(jù)的拷入、拷出操作,採(cǎi)用表分區(qū)技術(shù),將能極大地提升系統(tǒng)性能。
劃分表分區(qū)的操作步驟如下:
1. 在同一數(shù)據(jù)庫(kù)設(shè)備上劃分表分區(qū)時(shí),先創(chuàng)建表,再用alter table 的 partition 語(yǔ)句劃分表分區(qū)。
create table opt_plnexrcd ( per_date datetime, per_sndstn char(4), ... )
alter table opt_plnexrcd partition 5
2. 在多個(gè)數(shù)據(jù)庫(kù)設(shè)備上劃分表分區(qū)時(shí),先建一個(gè)數(shù)據(jù)庫(kù)段在多個(gè)數(shù)據(jù)庫(kù)上,然後再將表建在該段上,最後對(duì)表分區(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
最後對(duì)表分區(qū):
alter table opt_plnexrcd partition 5
如果表分為5個(gè)分區(qū),表所在的段又分跨5個(gè)數(shù)據(jù)庫(kù)設(shè)備,那麼每個(gè)分區(qū)將分別映射到該段所在的5個(gè)數(shù)據(jù)庫(kù)設(shè)備上。一般劃分表分區(qū)的原則是:表分區(qū)數(shù)等於或大於表所在段分跨的數(shù)據(jù)庫(kù)設(shè)備數(shù)。但要注意有些表不能分區(qū),它們是系統(tǒng)表、正在使用的表、臨時(shí)表和有聚簇索引的表。
Sybase ASE使用保存在分區(qū)控制頁(yè)上的統(tǒng)計(jì)數(shù)據(jù),來(lái)評(píng)測(cè)基於分區(qū)的並行掃瞄方式,以挑選最優(yōu)執(zhí)行計(jì)劃。如果表中數(shù)據(jù)在多個(gè)分區(qū)上是分佈均衡的,表分區(qū)統(tǒng)計(jì)數(shù)據(jù)是精確的,那麼掃瞄效率就比較高,並行處理就有很好的性能,所以表分區(qū)的維護(hù)對(duì)於並行查詢處理十分重要。Sybase ASE的異常停止和某些情況下的事務(wù)回退都可能造成分區(qū)統(tǒng)計(jì)數(shù)據(jù)不精確,Sybase ASE提供了兩個(gè)系統(tǒng)函數(shù)data_pgs和ptn_data_pgs,用它們可分別計(jì)算數(shù)據(jù)頁(yè)面數(shù)量。如果兩者不相同,說(shuō)明分區(qū)統(tǒng)計(jì)不精確,需要維護(hù),Sybase ASE 提供如下命令來(lái)更新分區(qū)和頁(yè)面統(tǒng)計(jì)數(shù)據(jù):
1.更新每個(gè)分區(qū)的頁(yè)面統(tǒng)計(jì)數(shù)據(jù):
update partition statistics
2.更新表上索引的分佈頁(yè)面,同時(shí)更新各個(gè)表分區(qū)的控制頁(yè)面的統(tǒng)計(jì)數(shù)據(jù):
update all statistics table_name
3.顯示表分區(qū)的當(dāng)前信息:
sp_helpartition
如果對(duì)分區(qū)的表進(jìn)行了大量的插入、更新和刪除後,數(shù)據(jù)有可能分佈不均勻,使用BCP加載大量數(shù)據(jù)後,也可能會(huì)出現(xiàn)數(shù)據(jù)分佈不均勻,此外一些其他原因也可能導(dǎo)致數(shù)據(jù)分佈不均勻。平衡分區(qū)數(shù)據(jù)有兩種方法:一是對(duì)有數(shù)據(jù)的表建聚簇索引,二是使用並行塊拷貝,指定數(shù)據(jù)加載到某個(gè)分區(qū)的方法,Sybase ASE 新的BCP允許用戶指定分區(qū),把數(shù)據(jù)加載到指定的分區(qū)中。
posted on 2008-09-04 10:52 存鷹之心于高遠(yuǎn),取鷹之志而凌云,習(xí)鷹之性以涉險(xiǎn),融鷹之神在山巔. 閱讀(920) 評(píng)論(0) 編輯 收藏 所屬分類: Sybase