程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> 說說Oracle性能優化

說說Oracle性能優化

編輯:Oracle數據庫基礎

前言   

    最近hyddd一直看Oracle的資料,今天特地總結一下這段時間了解到的關於Oracle性能優化的下手點

 

.數據庫優化的方向

1.程序設計(這點最重要,如果程序本身設計有問題,再怎麼進行下面的優化都是徒勞的。)

2.操作系統優化

3.硬件優化

4.數據庫優化

5.SQL語句優化

 

.硬件優化

這裡涉及到的硬件主要有:硬盤,內存。

1.硬盤的讀寫速度:建議增加硬盤的數量,從而增加每秒的並發操作。

2.內存大小。

 

.數據庫優化


以上是Oracle 9i的體系結構,關於Oracle數據庫的優化,很大程度上圖有關。

1.根據數據庫的使用方式得出合理的優化策略

(1)OLTP:連機事務處理。

需要實時處理大量請求,而每次處請求的數據量都是很小的。OLTP是傳統的關系型數據庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易。

性能好壞的重要指標:響應時間與請求處理並發數。

(2)OLAP:聯機分析處理。

可以簡單地理解為在海量數據中得出統計/綜合信息,是數據倉庫的主要應用。做OLAP應用的數據庫,數據量通常量非常大。和OLTP不同,OLAP應用的並發處理量是很低的,所以基本不用考慮並發問題。而在處理數據量方面,OLAP每次操作所需要處理的數據量通常都是非常大的,這點也和OLTP相反。

性能好壞的重要指標:查詢大量數據的速度。

由於OLTP和OLAP是兩個不同應用方向,所以在優化數據庫時應采取不同的優化策略。

2.內存分配比例:2:1:1

內存分配的較佳方案:SGA占50%的物理內存,PGA和操作系統各占25%的物理內存,當然這也不是絕對的,但是SGA占的物理內存不能超過75%,最多只能占70%,否則Oracle可能會出現各種的異常。

3.SGA中各個POOL的內存分配

(1)Shared Pool:要分配多少內存不定,只要滿足以下兩個條件即可:

-Lib Cache的命中率>98%

-Data Dictionary Cache的命中率>85%

(2)Large Pool

-專用服務器:100-200M

-共享服務器:Session * (Sort_area_size + 2)

(3)Java Pool:無需使用,一般不分配空間。

(4)Redo Log Buffer Cache:小於5M,因為它的信息非常重要,應盡快把緩存數據寫到文件中。

(5)DB_Buffer_Cache:盡量大。

4.在Oracle 10g中,如果我們定義了SGA_MAX_SIZE後,其實我們通過SGA_TARGET讓Oracle自動調整SGA的內存分配。

5.Redo log files,Data files,Achived log files盡量放在不同的磁盤上,以均衡I/O特別是Redo Log files和Achived log files。

6.Undo Segment容量大小要符合實際應用,不能太小。

7.熱點文件特殊處理

(1)分開存放Index Segment和Data Segment。

(2)使用分區表。

8.索引(Index)問題

(1)適當使用BTREE,BITMAP以及反向索引:不同索引適用於不同的表,設置索引之前要考慮這個問題。

(2)一個表的索引數最多不要超過5個,否則可能影響性能。

(3)索引樹的高度<4,否則考慮重構索引。(單邊樹索引重構時可考慮使用反向索引降低索引樹高度)

(4)注意索引是否失效,這一般是比較爛的SQL語句引起的問題。

9.盡量減少“全表掃描操作” & “排序操作”

10.看執行計劃有助於各位DBA找出性能問題。

 

.SQL語句優化

1.通過v$librarycache了解命中率,這和3.1中提到的Shared Pool有關系,避免重復解析SQL語句,有助於提高數據庫性能。

 

2.使用“物化視圖”提高查詢性能。

 

後記

    本文列了一些Oracle性能優化要點,如果大家要進行Oracle基礎優化時,可參考以上要點。

    如有錯漏,請各位指出。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved