Oracle資料庫開發結構設計技巧

2021-05-26 08:38:41 字數 2817 閱讀 4446

author:skate

time:2010-08-26

儘管oracle系統本身已經提供了若干種對系統效能進行調節的技術,但是,假如資料庫設計本身就有問題特別是在結構上設計得尤其糟糕,那你縱有天 大的本事又能奈何?因此,oracle資料庫的設計者完全有必要弄清楚(從專案著手設計開始)該如何建立穩固的oracle資料結構,在保證可維護性和可 擴充套件性的同時以最快的速度從資料庫中獲取資訊。

讓我們把籠罩在資料庫技術外圍的複雜理論和存心不讓人明白的技術行話扔一邊去,其實,說 白了你就只需要記住一點,這也是牽扯到資料庫效能的最重要最簡單因素:磁碟i/o。磁碟i/o正是系統消耗最大的的oracle資料庫操作。oracle 設計專家在設計資料體系結構的時候務必記得:在獲取所需要的資訊時一定要想盡辦法把磁碟訪問量降到最低!

這篇文章提出了一些oracle資料庫資料體系結構設計方面的技巧,有了它們,在創造出易於維護和擴充套件的設計方案同時還能讓資料庫保持在最優化的效能水準之上。

結構設計技巧

oracle產品中有好些可以降低sql查詢磁碟i/o量的工具。下面就是一些能極大改進oracle 系統效能的結構設計問題。

採用多種大小尺度的資料塊

你 完全可以故意地把不同的表和索引結構對映到具有不同大小的表空間。這種分配方案的設計依據是表內資料行的平均長度以及整個資料庫內的資料訪問模式。 oracle9i給你提供了以下幾種選擇:2k、4k、16k甚至32k的表空間大小。這一招的實質是讓表和索引僅需一次磁碟i/o就可以獲取所有關聯數 據行的資訊。

預先計算複雜的sql查詢

oracle提供了具體化的檢視和varray表,通過它們就可以預建複雜的查詢並匯集到單行表內,這樣即時獲取資訊可就快多了。即時匯集是一種優異的oracle設計。

採用記憶體資料緩衝

你 應該知道oracle9i允許開闢很大的記憶體區域以便緩衝常用索引行的資訊。常用索引資訊的緩衝應該是乙個主要的專業設計目標,因為記憶體訪問的速度可是磁 盤訪問速度的至少1萬倍。oracle資料塊緩衝區越大,sql查詢的執行速度就越快。記憶體資料緩衝區的大小對oracle的效能具有直接的影響,如果數 據緩衝區緩衝了全部資料系統就可以達到最快的執行速度。

購買更快的處理器

oracle資料庫伺服器的cpu速度對資料庫效能有直接影響。高效能64位cpu的執行速度通常比32位處理器快10次。目前幾乎所有的主要平台都可以採用64位處理器了,其中包括:

windows—intel安騰處理器

hp—pa-8000處理器

solaris—500-mhz ultrasparc-iie處理器

ibm aix—rs/6000 powerpc處理器

採用64位版本的oracle

強 烈建議你在裝備64位cpu體系結構的專門伺服器平台上安裝和執行64位的oracle資料庫系統。oracle的64位版本可以建立大規模的sga區域 以及通常需要超過20gb記憶體資料緩衝區的大規模專案。32位oracle資料庫的乙個嚴重缺陷就是sga最大只能開闢1.7gb。

對索引使用大資料塊使磁碟i/o減到最小

oracle索引訪問在oracle資料庫大小為16k和32k的情況下效能表現最好。你應該查詢相應的應用程式和作業系統文件,為你的計算環境建立最大的索引表空間。

使用oracle並行查詢

所有的資料訪問都應該經過調整避免大規模表掃瞄或者全表掃瞄,但在很多情況下都會有這樣的查詢要求,怎麼辦呢?你不妨保證所有的全表掃瞄都充分利用了oracle並行查詢機制以提高查詢效能。

選擇適當的sql優化

優化器模式的選擇對oracle sql效能具有關鍵的影響。對oracle9i而言,所有查詢中大約有一半左右在基於規則的優化條件下會執行得更快一些;另外一半則在基於開銷的優化條件執行得最快。

包固定所有經常被引用的pl/sql包都應該使用dbms_shared_pool.keep過程固定到共享池。這樣做將極大地加快oracle pl/sql的執行速度。

在儲存過程內設計所有的資料訪問

最重要的設計問題之一把所有的資料庫訪問**都放到pl/sql儲存過程中。

儲存過程設計技巧

oracle設計目標之一是盡可能地把所有oracle處理**都封裝進儲存過程。這樣做可以獲得相當大的益處,主要同效能和可維護性有關。你應該把自己的工作焦點置於這一目標之上。

資料同行為耦合

許 多資料庫管理員採用oracle8的成員方法實現儲存過程與資料庫物件的緊密耦合。其它人則習慣於採用命名規範。例如,假設所有同customer表有關 的行為都冠以該錶的名字作為字首(customer.hire、customer.give_raise等),那麼你就可以查詢資料字典列出某錶關聯的所 有行為(select * from dba_objects where owner = 'customer')而你能很容易地辨別和重用**。

**隔離

因為所有的sql都從外部程式移入了儲存過程,所以應用程式也就不外乎只涉及到對儲存過程的呼叫。正因如此,內外交換某乙個資料庫就很簡單了。

更快的sga訪問

存 儲過程和觸發器函式的執行速度為什麼快於傳統資料庫操作**呢?主要原因要涉及到oracle sga。在乙個過程被裝入sga的共享池以後,它會一直「呆」到被調出記憶體給其他儲存過程騰出空間為止。把過程調出記憶體的原則就是所謂的lru演算法。一旦 裝入了分享池的記憶體區,過程的執行速度可就快多了,這裡的花招就是想辦法阻止共享池承受太大的負載,因為許多儲存過程會競爭有限的共享池內存量。再次重 申:只要儲存過程裝入了共享池就要等到被調出記憶體為止。連續的儲存過程執行就比外部**更快。

小結oracle設計師的標誌之一 就是有能力創造出穩固、可維護和高效率的全面體系結構。今天的 oracle設計專家需要設計出能支援每秒數千宗交易的系統同時還能實現快速的響應時間、簡易的維護以及可擴充套件性。只要全面地了解oracle9i 資料庫的特性,採用本文建議的技巧,你肯定能建立恰當的資料模型結構來支援終端使用者的需求。

資料庫結構設計

1.3概念設計的任務 1.2概念設計的依據 需求分析的文件,需求說明書,功能模型 資料流圖或idef0圖 資訊模型 er圖 和資料庫概念說明書是資料庫邏輯設計的依據 1.2 資料庫概念設計過程 1.3 資料建模方法 er建模方法 idef1x建模方法標識er模型中的聯絡,依次轉換與每個聯絡相關聯的實...

redis資料庫結構設計

之前遊戲開發服務端都是用純c 來寫,現在很多寫遊戲伺服器越來越傾向指令碼語言,因為用c 來寫一些邏輯的確是痛苦之極,當然如果追求效率的還是用c c 實現更好。最近時間自己通過研究了解雲風寫的skynet框架學習了lua,研究skynet其實是想把這框架用到公司現在遊戲專案裡替換掉現在用的乙個純c 框...

資料庫 概念結構設計

概念結構設計是將需求分析得到的使用者需求抽象為資訊結構即概念模型的過程,它是整個資料庫設計的關鍵。只有將需求分析階段得到的系統應用需求抽象為資訊世界的結構,才能更好 更準確地轉化為機器世界中的資料模型,並用適當的dbms實現這些需求。概念結構設計的方法和步驟 概念結構設計的方法通常有以下4種 其中最...