oracle结构设计
?盡管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 數據庫的特性,采用本文建議的技巧,你肯定能建立恰當的數據模型結構
總結
以上是生活随笔為你收集整理的oracle结构设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle的rownum原理和使用
- 下一篇: JSP页得当前日期