Oracle數據庫應用系統的調優主要包括十個方面:
(1)、優化數據庫內存;
(2)、在Oracle共享池中固定應用程序代碼;
(3)、優化數據存儲;
(4)、優化數據排序的技術;
(5)、優化SQL語句;
(6)、優化回退段;
(7)、優化索引;
(8)、優化磁盤I/O;
(9)、按期生成數據庫對象的狀態統計信息;
(10)、優化操做系統環境。
其實質就是下降CPU負載、改善I/O性能。 java
一、化磁盤I/O
數據庫的做用就是實現對數據的
管理和查詢,因此必然存在對數據的大量讀寫操做,其I/O問題也每每是致使Oracle數據庫性能問題的重要緣由。
1.一、Oracle中I/O的產生
1.二、優化OS存儲
1、在UNIT環境下,採用裸設備(Raw Device)做爲Oracle數據文件的存儲設備比採文件系統(File System)存儲Oracle數據文件具備較高的讀寫效率。
2、採用異步IO(Asynchronous IO)方式。在異步IO模式下,進程發出IO請求後無需等待IO完成,能夠去處理其它事情;IO請求被放入一個隊列中,一旦IO完成,系統會發出信號通知進程。異步IO可使須要大量寫的Oracle進程(如DBWn進程)將IO請求隊列化,以充分利用硬件的IO帶寬,從而使它們能最大程度實現並行處理。確認操做系統已經設置支持AIO後,還須要設置Oracle初始化參數「DISK_ASYNCH_IO」爲「true」以支持異步IO。
3、磁盤負載均衡及條帶化(Striping)。條帶化技術就是將數據分紅不少小部分並把他們分別存儲到不一樣磁盤上的不一樣區域中去。這就能使多個進程同時訪問數據的多個不一樣部分而不會形成磁盤衝突。不少操做系統、磁盤設備供應商、各類第三方
軟件都能作到條帶化。經過條帶化,DBA能夠很輕鬆的作到IO負載均衡而無需去手工配置。
1.三、優化IO配置
1、利用LVM(Logical Volume Manager邏輯卷管理器)軟件合理的配置條帶的寬度和深度。
2、採用分離文件策略,避免磁盤熱點。儘管咱們在硬件和操做系統層面經過磁盤條帶化實現了磁盤負載均衡,但咱們依然不能避免某些數據文件成爲「熱點文件」。
分離表、索引和臨時表空間的存儲,即爲應用系統創建單獨的數據表空間、索引表空間、臨時表空間。
分離重作日誌(Redo Log)文件。若是Redo Log文件的IO吞吐率高,則應將Redo Log存儲在單獨磁盤上,在有充裕磁盤的的狀況下,應將Redo Log文件條帶化分佈到多個磁盤上去;
分離歸檔日誌文件(Archive Log)。當ORACLE數據庫運行在歸檔模式下時,歸檔進程(ARCn )必然會產生大量的磁盤讀寫。因此應將歸檔日誌文件條帶化分佈到多個磁盤上單獨存儲。
1.四、優化ORACLE I/O相關的參數設置
db_file_multiblock_read_count:用於控制一個徹底連續掃描中一次 I/O 操做所讀取的數據塊的最大值。默認值8
db_writer_processes:數據庫「寫進程」的初始數量。
disk_asynch_io:用於控制數據文件、 控制文件和日誌文件的 I/O 是否異步 。只有在平臺支持磁盤異步 I/O的狀況下才能更改該參數。
log_archive_max_processes:指定歸檔模式下ARCH 進程的數量。
2.優化數據存儲
2.一、表空間優化
SYSTEM表空間用於存放ORACLE系統的有關信息,通常的用戶創建的對象(object)不該放在SYSTEM表空間中,另外還須要注意增長SYSTEM表空間合適的大小,保證有100M左右的空閒空間。
對於ORACLE的數據庫應用系統,都應該爲應用系統創建獨立的ORACLE用戶(scheme)、數據表空間、索引表空間、臨時表空間。應將表空間及數據文件一次性設置成合適的大小,避免數據文件自動增加,形成數據段塊/段的不連續,影響系統性能。
按期檢查數據庫表空間的使用狀況,防止表空間碎塊過多,影響系統性能。經過查詢視圖dba_extents可獲取表空間詳細的使用狀況。
整理表空間碎片,回收數據表段的可用空間。
合併表空間碎片
alter tablespace tablespacename coalesce;
回收數據表段的空閒空間
alter table tablename deallocate unused;
2.二、合理配置回滾段大小
在Oracle 9i之後,系統採用了透明的本地化的管理方式。默認狀況下,回滾段表空間是比較小的,每每不能知足實際應用中處理大型的事務的須要,就須要爲專門的大型應用或事務創建大的回滾段。
2.三、臨時表空間設計規劃
臨時表空間主要用於查詢操做中的distinct 、union 、order by以及create
index操做及存儲臨時表數據等。Oracle缺省表空間爲Temp,其大小爲1MB,對於一個真正的中、大型應用系統是遠遠不夠的,所以需作以下工做:
增長Temp表空間到合適的大小,通常爲300M-500M左右。
建立用戶時應爲其選擇專用的臨時表空間。
應該爲大的應用系統創建專門的大的臨時表空間,用於進行系統的月報、季報、年報統計存儲臨時表數據等。
2.四、將數據文件和日誌文件存儲於不一樣磁盤上
數據文件的寫入是經過DBWR後臺進程實現,日誌文件的寫入是經過LGWR後臺進程實現,因爲日誌文件是連續的寫入,所以無併發處理現象。而數據文件的寫入相對是隨機的,爲避免在同一時間內DBWR和LGWR的衝突,應將日誌文件和數據文件放在不一樣的硬盤上。
另外,在ARCHIVELOG模式時,也可能產生日誌文件寫磁盤與日誌歸檔間的衝突,這種衝突的避免只能經過將日誌文件分配到多個磁盤才能解決。
三、優化操做系統環境
3.一、配置操做系統合適的信號量
Oracle在某些Unix操做系統環境下運行須要合適的操做系統信號量。應該根據Oracle版本發行的要求進行設置,譬如在SOLARIS環境下,須要以root 登陸並根據Oracle安裝手冊的參數要求修改/etc目錄的system文件。
3.二、配置合適大小的交換區
在UNIX操做系統環境下,交換區是Oracle的一項基本的要求。能夠根據Oracle的發行要求來肯定。建議交換區的大小是該
服務器內存的2倍以上。
3.三、配置操做系統啓用異步I/O
目前大多數操做系統都支持異步I/O,但若是讓Oracle運行在異步I/O模式下,就必須作相應的配置。譬如在HP-UNIX下,須要把「/dev /async」受權給操做系統的oracle用戶,而且要修改Oracle參數disk_asynch_io=true。
3.四、將Oracle的SGA鎖定在物理內存中。
幾乎全部的操做系統都支持虛擬內存,因此即便咱們使用的內存小於物理內存,也不能避免操做系統將SGA交換到虛擬內存(SWAP),經過相應配置將Oracle SGA鎖定在物理內存避免被交換到虛擬內存中,能夠減小頁面的換入和換出,從而提升性能。
HP-UNIX下的配置方法:
#/etc/setprivgrp dba MLOCK
調整ORACLE參數:lock_sga=TRUE
重啓數據庫
AIX 5L(AIX 4.3.3)下的配置方法:
$/usr/sbin/vmo -r -o v_pinshm=1(或vmtune -s 1)
調整ORACLE參數:lock_sga=TRUE
重啓數據庫
3.五、控制內存交換操做(Paging)
大量的內存交換操做會極大地影響系統的性能,尤爲是在當數據庫文件建立在文件系統上時影響更大。在這種狀況下常常訪問的數據,即在SGA中存在也一樣在文件的緩存中存在。這種相同的數據在內存中緩存兩次的狀況,會下降內存的使用效率,從而使內存頻繁進行交換操做,形成系統的I/O瓶頸,下降整個系統的性能。 經過將ORACLE數據文件建在裸設備上和調整系統文件緩存,能夠有效下降內存交換操做。
在AIX上,能夠經過vmtune命令中的MINPERM(缺省值20)和MAXPERM(缺省值80)參數來調整系統文件緩存,用以控制內存交換操做。通常將MINPERM和MAXPERM分別設爲5%和20%甚至更小,可以使內存更多地被用於Oracle的SGA而不是系統的文件緩存。
#vmtune -p 5 -P 20
在HP-UINX 10.X之前的版本中,分配過大的文件系統緩存,也會致使Oracle的SGA被交換到虛擬內存中去。在10.X之後的版本中文件系統緩存動態分配。不合理的設置dbc_min_pct和dbc_max_pct也會致使沒法解釋的偶然或間歇性停頓出現。
4.優化數據庫內存
4.一、Oracle內存結構
4.二、優化SGA(System Global Area )
對於Oracle內存的調整設置,要根據實際狀況酌情考慮,基本的原則是:
數據緩衝區(
databuffer):用於存放從數據文件讀入的數據塊,能夠儘量的大;
共享池(shared_pool_size):用於保存數據字典及當前執行的SQL語句和存儲過程,要適度;
日誌緩衝區(log_buffer):用於緩存用戶更新的數據,不需太大。
shared_pool_size:要大小要適度,一般設爲500M左右,不該超過700M。
log_buffer :一般設爲512K到1M。
large_pool_size :若是不設置MTS(Multi-Threaded
Server),該部份內存只會在 RMAN(
恢復管理) 、OPQ(並行查詢) 中使用到,一般設置爲是16M-64M 。
java_pool_size : 若是在數據庫裏不使用
java,一般設置爲16M。
data buffer :在作了上面的設置後,凡能夠提供給Oracle的內存,都應該給data buffer = (db_block_size * db_block_buffers) 。
SGA=data buffer+shared_pool_size+log_buffer+java_pool_size+large_pool_size
4.三、優化PGA (Program Global Area )
sort_area_size:默認64K,一般設置爲128K到512K
hash_area_size:不作配置,是根據2*sort_area_size計算獲得
這兩個參數在非MTS下都是屬於PGA(Program Global Area),不屬於SGA。它是爲每一個session單獨分配的,因此服務器上內存開銷狀況一般要求:OS內存+SGA+session* (sort_area_size+hash_area_size+2M)<總物理RAM。
source:http://space.itpub.net/777981/viewspace-660805