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