關於oracle 最佳化的內容很多,概念龐雜,不過可以總結出一個大綱性的東西作為需要考慮的方向,然後再逐步細化。oracle最佳化按重要性需要考慮設計、開發、調整幾個方面。
首先是設計,這是最重要的部分,借用TOM的話:“效能是設計出來的,不是調整出來的”。設計分為邏輯設計和實體設計,邏輯設計一般要遵循3NF,同時也要根據應用的需要引入逆正常化的設計,應為NF設計雖然消除了資料冗餘,但隨著正常化越高需要串連的表可能越多,同樣對效能有影響,所以需要平衡考慮,至於何時要3NF,何時要逆正常化,要是具體情況而定。
實體設計一個是儲存,比如物理檔案、聯機記錄檔、歸檔記錄檔的磁碟布局,各種RAID的使用等(在這方面piner的分析比較全面細緻),第二是要根據應用的特性,選擇檔案組織方式,靈活運用oracle的各種表和索引類型,例如交叉表可以考慮使用IOT、讀密集型並且經常關聯的欄位使用cluster,還有全域暫存資料表、外部表格等等。除了普通的B樹索引外,在低基數情況下考慮使用位元影像索引,使用函數時引入基於函數的索引等。
其次是開發階段,比如老生常談的使用綁定變數、外鍵加索引、使用bulk collect、分析函數、直接路徑載入,在OLAP應用中使用partition、MV、位元影像索引、並行化操作等等。沒種技術要深入研究都有很多內容。
最後才是調整,這是在出現效能問題時採用的手段。這已經形成了一個完整的方法論。
1)設立合理的效能最佳化目標。
2)測量並記錄當前效能(STATSPACK、AWR等)。
3)確定當前Oracle效能瓶頸(從Oracle 等待介面v$system_event、v$session_event和v$session_wait中獲得等待事件,進而找出影響效能的對象和sql語句
)。
4)把等待事件記入追蹤檔案(autotrace、10046事件等)。
5)確定當前的OS瓶頸(sar、iostat、cpustat、mpstat、netstat、top、osview等)。
6)最佳化所需的成分(應用程式、資料庫、I/O、爭用、OS等)。
7)跟蹤並實施更改控制過程。
8)測量並記錄當前效能
9)重複步驟3到7,直到滿足最佳化目標
以上是本人對Oracle最佳化的一些粗線條的體會,可以指出最佳化需要考慮的大的方向,而相關的技術細節非常多,每項都要仔細研究,正如piner總結的:多思考、多實踐、多總結。
再記點題外話,公司節後要對技術部作人員調整,說白了就是裁人,這次除了要個網管保證能上網就不留技術的人了,假期準備簡曆,節後找工作。