Oracle 數(shù)據(jù)表分區(qū)的策略
更新時(shí)間:2007年03月07日 00:00:00 作者:
正在看的ORACLE教程是:Oracle 數(shù)據(jù)表分區(qū)的策略。本文描述通過統(tǒng)計(jì)分析出醫(yī)院信息系統(tǒng)需分區(qū)的表,對(duì)需分區(qū)的表選擇分區(qū)鍵,即找出包括在你的分區(qū)鍵中的列(表的屬性),對(duì)大型數(shù)據(jù)的管理比較有意義, 本文的工作在Oracle8.1.6下實(shí)現(xiàn)。
Oracle雖然是一個(gè)大型的DBMS,但如果不對(duì)記錄比較多的表進(jìn)行處理,仍然發(fā)揮不了Oracle管理大型數(shù)據(jù)的強(qiáng)大功能,因此對(duì)某些表進(jìn)行分區(qū),具有如下優(yōu)點(diǎn):
分區(qū)表中每個(gè)分區(qū)可以在邏輯上認(rèn)為是一個(gè)獨(dú)立的對(duì)象;
可以在一個(gè)表中的一個(gè)或多個(gè)分區(qū)上進(jìn)行如刪除、移動(dòng)、析分等維護(hù)操作,而不會(huì)影響其它分區(qū),具有分區(qū)獨(dú)立性;
如果選擇合適的分區(qū)策略,會(huì)大大的加快數(shù)據(jù)的查詢速度。
一 找出需分區(qū)的表
本節(jié)描述通過統(tǒng)計(jì)分析出醫(yī)院His系統(tǒng)需分區(qū)的表,對(duì)需分區(qū)的表找出包括在你的分區(qū)鍵中的列(表的屬性),即選擇分區(qū)鍵。
1、基于訪問頻度找出需分區(qū)的表
Oracle8i允許訪問數(shù)據(jù)庫(kù)中的審核信息,借助于收集的審核信息,設(shè)計(jì)者能夠確定哪些表的數(shù)據(jù)是真正最頻繁訪問的,即找出那些表,需要進(jìn)行分區(qū)。
打開審核:在作為SYS或SYSSTEM登錄到數(shù)據(jù)庫(kù)后,動(dòng)行如下腳本,打開對(duì)象的審核功能。
這些代碼的運(yùn)行將產(chǎn)生“audon.sql”的輸出文件,它包含下面清單中所示格式的語(yǔ)句
使用命令@audon.sql激活上述代碼以打開審核功能收集收集審核信息,建立一個(gè)表以保存概要信息:
將審核信息從dba_audit_object表中取出并裝入概要表中:
關(guān)閉審核:
這些代碼的運(yùn)行將產(chǎn)生“audoff.sql”的輸出文件。
使用命令@ audoff.sql激活上述代碼以關(guān)閉上述對(duì)象的審核功能。
清除審核信息:
分析審核信息
以上是HIS系統(tǒng)臨床醫(yī)囑部分24小時(shí)內(nèi)對(duì)表的訪問情況,從上面的查詢得表1-1。
表1-1
group_order_master( 醫(yī)囑套攴主記錄) 、group_order_item(醫(yī)囑套攴明細(xì)), 表的行數(shù)比較少,不適合分區(qū);drug_stock(藥品庫(kù)存)雖然存取頻率比較高,但表的行數(shù)比較少,因此也不適合分區(qū)。我們選擇表的行數(shù)比較多、存取頻率比較高的表作分區(qū)處理,如 doctor_orders、orders、orders_costs,考慮到doctor_orders是醫(yī)生工作站上醫(yī)生開的醫(yī)囑,orders是由doctor_orders生成、護(hù)士工作站上執(zhí)行的醫(yī)囑,兩個(gè)表結(jié)構(gòu)類似,而醫(yī)囑與藥品、衛(wèi)生材料、計(jì)費(fèi)聯(lián)系比較密切的是Orders,因此重點(diǎn)介紹對(duì)表orders的處理。
2、基于列值選擇分區(qū)鍵
使用Sql*plus下用命令A(yù)nalyze收集末分區(qū)表的統(tǒng)計(jì)信息,按照Oracle推薦的取樣20%進(jìn)行分析,并將統(tǒng)計(jì)結(jié)果保存在數(shù)據(jù)字典中。
對(duì)DBA_TAB_COLUMNS數(shù)據(jù)字典視圖進(jìn)行查詢
產(chǎn)生表1-2
表1-2
從表1-2中,我們可以看到欲分區(qū)表的各個(gè)候選分區(qū)鍵的分布頻譜,ORDER_CODE(醫(yī)囑代碼)鍵值沒有出現(xiàn)一種均勻分布,用它作分區(qū)鍵,明顯不合適;
ORDER_CLASS(醫(yī)囑類別代碼)、ORDERING_DEPT(開醫(yī)囑科室代碼),鍵值出現(xiàn)均勻分布,如用它的各個(gè)鍵值作基于范圍的分區(qū),每個(gè)分區(qū)具有的記錄數(shù)比較均勻,但這種方法對(duì)于每天增加上萬(wàn)條記錄的表來(lái)看,顯然不是最優(yōu)的。如果選用START_DATE_TIME(醫(yī)囑開始時(shí)間)建立范圍分區(qū),每月的數(shù)據(jù)建立一個(gè)分區(qū),在每個(gè)分區(qū)內(nèi)基于ORDERING_DEPT建立散列子分區(qū),每月的數(shù)據(jù)形成一個(gè)組合分區(qū),會(huì)使每個(gè)分區(qū)的記錄數(shù)分布均勻、查詢速度提高、易于備份和刪除。因?yàn)榇蠖鄶?shù)的統(tǒng)計(jì)和查詢是在一個(gè)月的范圍內(nèi),而且從實(shí)際的查詢效果看,跨月和跨年數(shù)據(jù)的統(tǒng)計(jì)和查詢速度,也比未分區(qū)的時(shí)候大大縮短,效果非常明顯。
Oracle雖然是一個(gè)大型的DBMS,但如果不對(duì)記錄比較多的表進(jìn)行處理,仍然發(fā)揮不了Oracle管理大型數(shù)據(jù)的強(qiáng)大功能,因此對(duì)某些表進(jìn)行分區(qū),具有如下優(yōu)點(diǎn):
分區(qū)表中每個(gè)分區(qū)可以在邏輯上認(rèn)為是一個(gè)獨(dú)立的對(duì)象;
可以在一個(gè)表中的一個(gè)或多個(gè)分區(qū)上進(jìn)行如刪除、移動(dòng)、析分等維護(hù)操作,而不會(huì)影響其它分區(qū),具有分區(qū)獨(dú)立性;
如果選擇合適的分區(qū)策略,會(huì)大大的加快數(shù)據(jù)的查詢速度。
一 找出需分區(qū)的表
本節(jié)描述通過統(tǒng)計(jì)分析出醫(yī)院His系統(tǒng)需分區(qū)的表,對(duì)需分區(qū)的表找出包括在你的分區(qū)鍵中的列(表的屬性),即選擇分區(qū)鍵。
1、基于訪問頻度找出需分區(qū)的表
Oracle8i允許訪問數(shù)據(jù)庫(kù)中的審核信息,借助于收集的審核信息,設(shè)計(jì)者能夠確定哪些表的數(shù)據(jù)是真正最頻繁訪問的,即找出那些表,需要進(jìn)行分區(qū)。
打開審核:在作為SYS或SYSSTEM登錄到數(shù)據(jù)庫(kù)后,動(dòng)行如下腳本,打開對(duì)象的審核功能。
這些代碼的運(yùn)行將產(chǎn)生“audon.sql”的輸出文件,它包含下面清單中所示格式的語(yǔ)句
使用命令@audon.sql激活上述代碼以打開審核功能收集收集審核信息,建立一個(gè)表以保存概要信息:
將審核信息從dba_audit_object表中取出并裝入概要表中:
關(guān)閉審核:
這些代碼的運(yùn)行將產(chǎn)生“audoff.sql”的輸出文件。
使用命令@ audoff.sql激活上述代碼以關(guān)閉上述對(duì)象的審核功能。
清除審核信息:
分析審核信息
以上是HIS系統(tǒng)臨床醫(yī)囑部分24小時(shí)內(nèi)對(duì)表的訪問情況,從上面的查詢得表1-1。
表1-1
group_order_master( 醫(yī)囑套攴主記錄) 、group_order_item(醫(yī)囑套攴明細(xì)), 表的行數(shù)比較少,不適合分區(qū);drug_stock(藥品庫(kù)存)雖然存取頻率比較高,但表的行數(shù)比較少,因此也不適合分區(qū)。我們選擇表的行數(shù)比較多、存取頻率比較高的表作分區(qū)處理,如 doctor_orders、orders、orders_costs,考慮到doctor_orders是醫(yī)生工作站上醫(yī)生開的醫(yī)囑,orders是由doctor_orders生成、護(hù)士工作站上執(zhí)行的醫(yī)囑,兩個(gè)表結(jié)構(gòu)類似,而醫(yī)囑與藥品、衛(wèi)生材料、計(jì)費(fèi)聯(lián)系比較密切的是Orders,因此重點(diǎn)介紹對(duì)表orders的處理。
2、基于列值選擇分區(qū)鍵
使用Sql*plus下用命令A(yù)nalyze收集末分區(qū)表的統(tǒng)計(jì)信息,按照Oracle推薦的取樣20%進(jìn)行分析,并將統(tǒng)計(jì)結(jié)果保存在數(shù)據(jù)字典中。
對(duì)DBA_TAB_COLUMNS數(shù)據(jù)字典視圖進(jìn)行查詢
產(chǎn)生表1-2
表1-2
從表1-2中,我們可以看到欲分區(qū)表的各個(gè)候選分區(qū)鍵的分布頻譜,ORDER_CODE(醫(yī)囑代碼)鍵值沒有出現(xiàn)一種均勻分布,用它作分區(qū)鍵,明顯不合適;
ORDER_CLASS(醫(yī)囑類別代碼)、ORDERING_DEPT(開醫(yī)囑科室代碼),鍵值出現(xiàn)均勻分布,如用它的各個(gè)鍵值作基于范圍的分區(qū),每個(gè)分區(qū)具有的記錄數(shù)比較均勻,但這種方法對(duì)于每天增加上萬(wàn)條記錄的表來(lái)看,顯然不是最優(yōu)的。如果選用START_DATE_TIME(醫(yī)囑開始時(shí)間)建立范圍分區(qū),每月的數(shù)據(jù)建立一個(gè)分區(qū),在每個(gè)分區(qū)內(nèi)基于ORDERING_DEPT建立散列子分區(qū),每月的數(shù)據(jù)形成一個(gè)組合分區(qū),會(huì)使每個(gè)分區(qū)的記錄數(shù)分布均勻、查詢速度提高、易于備份和刪除。因?yàn)榇蠖鄶?shù)的統(tǒng)計(jì)和查詢是在一個(gè)月的范圍內(nèi),而且從實(shí)際的查詢效果看,跨月和跨年數(shù)據(jù)的統(tǒng)計(jì)和查詢速度,也比未分區(qū)的時(shí)候大大縮短,效果非常明顯。
相關(guān)文章
升級(jí)和卸載Oracle數(shù)據(jù)庫(kù)軟件的命令整理
這篇文章主要介紹了升級(jí)和卸載Oracle數(shù)據(jù)庫(kù)軟件的命令整理,包括升級(jí)時(shí)可能用到的查看版本號(hào)和備份操作的命令介紹,需要的朋友可以參考下2015-12-12SQL中Charindex和Oracle中對(duì)應(yīng)的函數(shù)Instr對(duì)比
在項(xiàng)目中用到了Oracle中 Instr 這個(gè)函數(shù),順便仔細(xì)的再次學(xué)習(xí)了一下這個(gè)知識(shí),使用 Instr 函數(shù)對(duì)某個(gè)字符串進(jìn)行判斷,判斷其是否含有指定的字符2013-10-10ORACLE數(shù)據(jù)庫(kù)日常維護(hù)知識(shí)點(diǎn)總結(jié)
這篇文章主要介紹了ORACLE數(shù)據(jù)庫(kù)日常維護(hù)知識(shí)點(diǎn)總結(jié),對(duì)于維護(hù)oracle數(shù)據(jù)庫(kù)的朋友可以參考下2016-06-06Linux下通過腳本自動(dòng)備份Oracle數(shù)據(jù)庫(kù)并刪除指定天數(shù)前的備份
這篇文章主要介紹了Linux下自動(dòng)備份Oracle數(shù)據(jù)庫(kù)并刪除指定天數(shù)前的備份,需要的朋友可以參考下2015-07-07oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵
本節(jié)文章主要介紹了oracle刪除主鍵查看主鍵約束及創(chuàng)建聯(lián)合主鍵,示例代碼如下,需要的朋友可以參考下2014-07-07