OA科學(xué)運(yùn)用表分區(qū)

發(fā)布于:2019-12-26 15:25:30

科學(xué)運(yùn)用表分區(qū)
? 數(shù)據(jù)庫(kù)大表優(yōu)化
數(shù)據(jù)庫(kù)大表的優(yōu)化:采用蔟表(clustered tables)及蔟索引(Clustered Index)。
蔟表和蔟索引是oracle所提供的一種技術(shù),其基本思想是將幾張具有相同數(shù)據(jù)項(xiàng)、并且經(jīng)常性一起使用的表通過(guò)共享數(shù)據(jù)塊(data block)的模式存放在一起。各表間的共同字段作為蔟鍵值(cluster key),數(shù)據(jù)庫(kù)在訪問(wèn)數(shù)據(jù)時(shí),首先找到蔟鍵值,以此同時(shí)獲得若干張表的相關(guān)數(shù)據(jù)。蔟表所能帶來(lái)的好處是可以減少I/O和減少存儲(chǔ)空間,其中我更看重前者。采用表分區(qū)(partition) 
表分區(qū)技術(shù)是在超大型數(shù)據(jù)庫(kù)(VLDB)中將大表及其索引通過(guò)分區(qū)(patition)的形式分割為若干較小、可管理的小塊,并且每一分區(qū)可進(jìn)一步劃分為更小的子分區(qū)(sub partition)。而這種分區(qū)對(duì)于應(yīng)用來(lái)說(shuō)是透明的。通過(guò)對(duì)表進(jìn)行分區(qū),可以獲得以下的好處: 
? 減少數(shù)據(jù)損壞的可能性。 
? 各分區(qū)可以獨(dú)立備份和恢復(fù),增強(qiáng)了數(shù)據(jù)庫(kù)的可管理性。 
? 可以控制分區(qū)在硬盤(pán)上的分布,以均衡IO,改善了數(shù)據(jù)庫(kù)的性能。 
蔟表與表分區(qū)技術(shù)的側(cè)重點(diǎn)各有不同,前者側(cè)重于改進(jìn)關(guān)聯(lián)表間查詢的效率,而表分區(qū)側(cè)重于大表的可管理性及局部查詢的性能。而這兩項(xiàng)對(duì)于我的系統(tǒng)來(lái)說(shuō)都是極為重要。由于本人技術(shù)限制,目前尚不確定兩者是否可以同時(shí)實(shí)現(xiàn),有那位在這方面有經(jīng)驗(yàn)的給點(diǎn)指導(dǎo)將不勝感激。
在兩者無(wú)法同時(shí)實(shí)現(xiàn)的情況下,應(yīng)依照需實(shí)現(xiàn)的功能有所取舍。綜合兩種模式的優(yōu)缺點(diǎn),我認(rèn)為采用表分區(qū)技術(shù)較為適用于我們的應(yīng)用。
? 表分區(qū)類型
? 范圍分區(qū):將表按某一字段或若干個(gè)字段的取值范圍分區(qū)。
? hash分區(qū):將表按某一字段的值均勻地分布到若干個(gè)指定的分區(qū)。
? 復(fù)合分區(qū):結(jié)合了前面兩種分區(qū)類型的優(yōu)點(diǎn),首先通過(guò)值范圍將表進(jìn)行分區(qū),然后以hash模式將數(shù)據(jù)進(jìn)一步均勻分配至物理存儲(chǔ)位置。
? 分區(qū)鍵的選擇
分區(qū)鍵的選擇:讓查詢很快定位,但盡量避免數(shù)據(jù)庫(kù)操作集中;使海量數(shù)據(jù)表拆分成“小表”,并使數(shù)據(jù)庫(kù)操作平均分散到表分區(qū)中。
分區(qū)在單節(jié)點(diǎn)數(shù)據(jù)庫(kù)上,提高查詢定位的速度,不提供查詢并行性。
? 表分區(qū)功能優(yōu)化
分區(qū)技術(shù)可以改進(jìn)大型數(shù)據(jù)庫(kù)的管理。很多關(guān)系新數(shù)據(jù)庫(kù)新增了表分區(qū)功能,因此對(duì)一些大表,我們?cè)陉P(guān)系型數(shù)據(jù)庫(kù)中不再需要分拆成小表,再用UNION ALL視圖的方式進(jìn)行設(shè)計(jì),而是直接用分區(qū)表實(shí)現(xiàn)一些這些功能。表分區(qū)功能是一種數(shù)據(jù)組織方案,即,表數(shù)據(jù)根據(jù)一個(gè)或多個(gè)表列中的值分布到多個(gè)存儲(chǔ)對(duì)象(稱為數(shù)據(jù)分區(qū)或范圍)中。每個(gè)數(shù)據(jù)分區(qū)都是單獨(dú)存儲(chǔ)的。這些存儲(chǔ)對(duì)象可以在不同的表空間中,也可以在相同表空間中。
很多業(yè)務(wù)數(shù)據(jù)的查詢包含時(shí)間條件,所以時(shí)間經(jīng)常作為分區(qū)條件。業(yè)務(wù)數(shù)據(jù)在時(shí)間上的分布通常是平均的,所以用時(shí)間分區(qū)的另一個(gè)好處是使包含大型數(shù)據(jù)的表分成大小相當(dāng)?shù)膸讉€(gè)分區(qū),用戶還可以針對(duì)數(shù)據(jù)量來(lái)制定分區(qū),以控制每個(gè)分區(qū)的數(shù)據(jù)量在一個(gè)可以接受的范圍內(nèi)。
但是按照時(shí)間分區(qū)也有弊端。一個(gè)業(yè)務(wù)系統(tǒng),按時(shí)間按分區(qū),當(dāng)前時(shí)間下的分區(qū)插入、刪除、更新或查詢的操作必定比別的分區(qū)多。這種集中的操作必定給數(shù)據(jù)庫(kù)帶來(lái)巨大的壓力。我們盡量在個(gè)個(gè)環(huán)節(jié)中找到最佳平衡點(diǎn)。
分區(qū)鍵的選擇:讓查詢很快定位,但盡量避免數(shù)據(jù)庫(kù)操作集中;使海量數(shù)據(jù)表拆分成小表,并使數(shù)據(jù)庫(kù)操作平均分散到表分區(qū)中。
對(duì)于分區(qū),我們進(jìn)行了一些列測(cè)試,下面就是我們測(cè)試的結(jié)論。分區(qū)在單節(jié)點(diǎn)數(shù)據(jù)庫(kù)上,提高查詢定位的速度,不提供查詢并行性。以一年的數(shù)據(jù)量,月分區(qū)為例。首先,考慮查詢條件中有分區(qū)字段時(shí)的情況。當(dāng)查詢條件在一個(gè)月內(nèi)時(shí),DBMS可以直接定位到某個(gè)分區(qū),在不考慮其他條件時(shí),查詢速度是不分區(qū)表的12倍。依此類推,當(dāng)查詢條件跨N(N<=12)個(gè)月時(shí),查詢速度是不分區(qū)表的12/N倍。如果,查詢條件中沒(méi)有分區(qū)字段時(shí),分區(qū)和不分區(qū)查詢效率相當(dāng)。
優(yōu)化器需要知道索引的相關(guān)信息,來(lái)判斷查詢執(zhí)行的“路徑”,運(yùn)行統(tǒng)計(jì)可以告訴優(yōu)化器。經(jīng)驗(yàn):當(dāng)表中數(shù)據(jù)量變化達(dá)到10%時(shí),需要重新運(yùn)行統(tǒng)計(jì)。
在許多次的更新之后,表會(huì)成為碎片狀,這導(dǎo)致性能嚴(yán)重下降。若收集了統(tǒng)計(jì)信息,但看不出有明顯的性能改進(jìn),則重組表數(shù)據(jù)可能會(huì)有幫助。重組表數(shù)據(jù)時(shí),根據(jù)指定的索引重新安排數(shù)據(jù)的物理順序,并除去碎片數(shù)據(jù)中的空閑空間。這使該數(shù)據(jù)可以更快速的被存取,從而改進(jìn)性能。

上一篇:oa影響系統(tǒng)性能的關(guān)鍵點(diǎn)
下一篇:OA流程審批