Oracle數(shù)據(jù)庫(kù)段管理有技巧(一)
導(dǎo)讀:在Oracle數(shù)據(jù)庫(kù)中,段往往被用來(lái)存儲(chǔ)特定邏輯對(duì)象的所有數(shù)據(jù)。如當(dāng)建立數(shù)據(jù)庫(kù)表或者索引時(shí),Oracle就會(huì)為這些對(duì)象分配存儲(chǔ)空間,以存放他們所需要的信息。段是由一個(gè)或者多個(gè)區(qū)組成的。不要看段是Oracle數(shù)據(jù)庫(kù)中一個(gè)不起眼的角色,其實(shí),在其中,仍然隱藏著許多不為人知的管理技巧。若數(shù)據(jù)庫(kù)管理員能夠掌握這些內(nèi)容,或許,其工作會(huì)變得輕松許多。
技巧一:對(duì)大表執(zhí)行分區(qū)段
表分區(qū)段用于存儲(chǔ)分區(qū)表中某個(gè)分區(qū)的數(shù)據(jù)。如把某一個(gè)表分為幾個(gè)區(qū),每個(gè)區(qū)就對(duì)應(yīng)一個(gè)表分區(qū)段。這么設(shè)置是可行的。因?yàn)楦鶕?jù)段管理規(guī)則,在一個(gè)表空間上可以包含一個(gè)或者多個(gè)段,但是,一個(gè)段只能夠存放在一個(gè)表空間上。
在實(shí)際工作中,我們經(jīng)常會(huì)碰到這種情況。如在一個(gè)大型零售企業(yè)的信息化管理系統(tǒng)中,一張銷售表的年數(shù)據(jù)總量可能會(huì)達(dá)到幾億條,其數(shù)據(jù)總?cè)萘靠赡軙?huì)有近十個(gè)G。如果平均分配到每個(gè)季度的話,則就有2.5G。此時(shí),如果不對(duì)這張銷售表進(jìn)行分區(qū)分段管理的話,則這一年的銷售記錄都會(huì)存儲(chǔ)在一張表中。此時(shí),如果需要做年度分析的話,那么數(shù)據(jù)庫(kù)的性能將會(huì)受到很大的影響。如現(xiàn)在用戶想知道六、七月份空調(diào)的銷量變化情況,此時(shí)數(shù)據(jù)庫(kù)就需要掃描整個(gè)數(shù)據(jù)表中近10G的紀(jì)錄。這需要用戶等待比較長(zhǎng)的時(shí)間。
但是,此時(shí)若數(shù)據(jù)庫(kù)管理員在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,就能夠預(yù)計(jì)到這種情況,對(duì)銷售表進(jìn)行分區(qū)分段管理。即把這張銷售表分區(qū)段管理,也就是說(shuō),把銷售表分為四個(gè)分區(qū)段,每個(gè)季度一個(gè)區(qū)段。如此的話,若要統(tǒng)計(jì)六、七月份的空調(diào)銷售情況,則只需要查詢5G的數(shù)據(jù)即可,其數(shù)據(jù)查詢量將近減少了一半。顯然,在實(shí)際工作中,如果對(duì)大表進(jìn)行分區(qū)段管理,則可以大大降低I/O次數(shù),并有效提高數(shù)據(jù)庫(kù)查詢性能。若銷售量大的話,甚至可以把銷售表分為十二個(gè)區(qū)段,一個(gè)月對(duì)應(yīng)一個(gè)區(qū)段。
所以,通過(guò)使用分區(qū)選項(xiàng),采用表區(qū)段管理大表,可以將一張大表的數(shù)據(jù)部署到多個(gè)不同的分區(qū)段中。通過(guò)這種管理方式,可以降低I/O(輸入輸出)讀取次數(shù),最終提高I/O性能。這是數(shù)據(jù)庫(kù)優(yōu)化專家在提高數(shù)據(jù)庫(kù)性能時(shí),經(jīng)常用到的一種手段。特別是在零售行業(yè)的信息化管理系統(tǒng)中,經(jīng)常被用到。
技巧二:合理利用索引組織表段
在Oracle數(shù)據(jù)庫(kù)中,跟索引相關(guān)的表段主要有三個(gè),分別為索引段、索引分區(qū)段與索引組織表段。
索引段主要用來(lái)存儲(chǔ)索引數(shù)據(jù)。當(dāng)數(shù)據(jù)庫(kù)管理員建立索引時(shí),數(shù)據(jù)庫(kù)系統(tǒng)就會(huì)自動(dòng)為索引建立相應(yīng)的索引段,其名字跟索引的名稱相同。在對(duì)索引段進(jìn)行管理時(shí),有一個(gè)基本的原則,即一個(gè)索引段只能夠存放在一個(gè)表空間中。
索引分區(qū)段主要用來(lái)存儲(chǔ)分區(qū)索引某個(gè)分區(qū)的數(shù)據(jù)。他跟筆者上面所說(shuō)的表分區(qū)段類似。每個(gè)分區(qū)對(duì)應(yīng)一個(gè)索引分區(qū)段。通過(guò)使用分區(qū)選項(xiàng)可以將大索引的數(shù)據(jù)部署到幾個(gè)不同的分區(qū)段中,從而達(dá)到降低輸入輸出次數(shù)、提高數(shù)據(jù)庫(kù)性能的目的。不過(guò)其在管理中,比表分區(qū)段多了一個(gè)限制條件,即索引分區(qū)只能夠建立在分區(qū)表上,而不能夠建立在普通表上。其他的管理跟分區(qū)表段類似,就不再重復(fù)闡述了。
索引組織表是以B數(shù)結(jié)構(gòu)來(lái)組織表數(shù)據(jù)的,其對(duì)應(yīng)的段就是索引組織表段。其管理方式跟索引段類似。當(dāng)數(shù)據(jù)庫(kù)管理員建立索引時(shí),就會(huì)自動(dòng)創(chuàng)建這個(gè)段,用來(lái)保存相關(guān)的數(shù)據(jù)。
現(xiàn)在擺在數(shù)據(jù)庫(kù)管理員面前,就有一個(gè)難題。在什么時(shí)候用索引段,什么時(shí)候用索引組織表段,又在什么時(shí)候采用索引分區(qū)段呢?為此,筆者給出一個(gè)建議,供大家參考。
通常情況下,如果表中的數(shù)據(jù)經(jīng)常需要引用主鍵列萊檢索的話,則可以考慮建立索引組織表,即通過(guò)索引組織段來(lái)管理。因?yàn)槿绻⑺饕M織表段,則表和表主鍵索引的數(shù)據(jù)會(huì)存放在索引段中。從而提高查詢的速度。而在普通表中,表與索引數(shù)據(jù)分別存放在表段與索引段中。這就是兩者最本質(zhì)的區(qū)別。另外需要提醒的是,如果數(shù)據(jù)庫(kù)管理員建立索引組織表時(shí),數(shù)據(jù)庫(kù)開發(fā)人員必須要定義主鍵列。否則的話,就會(huì)以失敗告終。
而如果索引比較大的話,則可以將大索引的數(shù)據(jù)部署道幾個(gè)不同的分去段中,這可以有效提高數(shù)據(jù)庫(kù)的性能。
這就是我要為大家介紹的Oracle數(shù)據(jù)庫(kù)段管理有技巧,這只是一部分,先為大家介紹到這,以后還會(huì)繼續(xù)為大家介紹。
【編輯推薦】