詳解 SGA 與實例優化(部分)
阿新 • • 發佈:2018-02-25
優化 重做日誌緩沖區 SGA的組成圖
-----------------------------------------------------------------------------------------------------------------------
| SGA |
| |
| |--------------------------| |--------------------------| |------------------------| |
| | | | | | | |
| | 數據庫緩沖區 | | 重做日誌緩沖區 | | 共享池 | |
| | database bufferr cache | | redo log buffer | | shared pool | |
| | | | | | | |
| | | | | | | |
| |--------------------------| |--------------------------| |------------------------| |
| |
| |
| |--------------------------| |--------------------------| |------------------------| |
| | | | | | | |
| | Java池 | | 大池 | | 流池 | |
| | Java pool | | large pool | | stream pool | |
| | | | | | | |
| |--------------------------| |--------------------------| |------------------------| |
| |
-----------------------------------------------------------------------------------------------------------------------
數據庫緩沖區 :該區域存放用戶從數據庫中讀取的數據
當用戶查找數據庫時會首先在數據庫緩存中搜索,如果沒有才會讀取數據庫文件。
所以該區域不能設置的過小,不然頻繁的讀取數據文件會增大查詢時間,因為I/O是耗時的行為
重做日誌緩沖區 :該緩沖區放置用戶改變的數據,所有變化了的數據和回滾需要的數據都暫時保存
共享池 :包括數據字典高速緩存和庫高速緩存,庫高速緩存存放Oracle解析的SQL語句、PL/SQL過程、包以及各種控制結構,如鎖、庫緩沖句柄
數據字典高速緩存保存執行SQL語句所需的各種數據字典定義如表和列的定義,用戶訪問表的權限等。
Java池 :執行Java代碼的區域
大池 :該內存區提供大型的內存分配,在共享服務器連接模式下提供會話區,在使用RMAN備份時也使用該內存區作為磁盤I/O的數據緩沖區
流池 :該區域稱為流內存,是為Oracle流專用的內存池,流是Oracle數據庫中的一個數據共享,其大小可以通過參數streams_pool_size
SGA中的內存參數可以動態修改,但是總的內存大小受到參數SGA_MAX_SIZE的限制。
優化重做日誌緩沖區
重做日誌緩沖區是使一段臨時存儲重做數據的內存區,所有變化的數據前項和修改後的數據都保存在重做日誌緩沖區中,由LGWR進程負責寫入重做日誌文件。
在優化時,需要考慮該內存區的大小,以及LGWR的寫速度和重做日誌文件所在磁盤的爭用
LGWR把重做日誌緩沖區寫入重做日誌文件的條件
1.每隔3秒鐘
2.事務被提交時
3.當重做日誌緩沖區的記錄的變化的數據量超過1MB字節
4.當重做數據的大小為中做日誌緩沖區大小的1/3時,
當重做數據量達到其容量的1/3這個閥值時,LGWR進程會寫出重做日誌緩沖區的數據,而剩下的2/3的數據可以提供其它服務器進程使用。
5.檢查點發生時
6.當DBWR進程將數據庫高速緩沖區的數據寫到數據文件前
查看重做日誌緩沖區的尺寸
show parameter log_buffer;
重做日誌緩沖區相關的等待事件
如果需呀優化重做日誌緩沖區,必須首先確認發生了與重做日誌緩沖區相關的等待時間,否則不應該隨便調整重做日誌緩沖區的尺寸
通過WAIT視圖和EXENT視圖,確認等待時間以及該事件涉及的文件和會話
通過數據字典視圖查看會話等待事件
col event for a35
col username for a10
select sw.sid,s.username,sw.event,sw.wait_time
from v$session s,v$session_wait sw
where sw.event not like 'rdbms%'
and sw.sid=s.sid
order by sw.wait_time,sw.event
1.Log buffer space :該事件說明缺少重做日誌的緩沖區空間,
造成該等待事件的原因一般是服務器進程寫入重做日誌緩沖區的速度高於LGWR重做日誌緩沖區寫出的速度,
也有可能是重做日誌文件所在磁盤設備速度慢或者存在設備爭用,造成LGWR進程無法即使將重做日誌緩沖區的重做數據寫入到重做日誌文件
優化方法:調整重做日誌緩沖區,
或者將重做日誌數據文件遷移到高速磁盤
或者為了解決爭用,將重做日誌文件和數據庫文件以及歸檔文件放在不同的磁盤上
2.log file parallel write :該事件的含義是日誌文件並行寫等待,是在將重做日誌緩沖區的重做數據寫入磁盤引起的等待事件。
造成該事件的原因一般是連接重做日誌文件所在的設備速度慢或者存在磁盤爭用
優化方法:將重做日誌文件和數據庫數據文件以及歸檔文件放在不同的磁盤上。以及將重做日誌文件放置在告訴盤上。
3.log file single write :該等待事件僅與寫日誌文件頭塊有關,表示檢測點中的等待
log file switch(archiving needed)該等待事件的含義是日誌文件切換等待。
對於處於歸檔模式的數據庫而言,當日誌組寫滿後,在日誌切換時需要覆蓋先前的日誌,
而該日誌需要歸檔進程寫入歸檔文件,由於寫入歸檔文件需要時間,而LGWR進程需要將重做日誌緩沖區的數據寫入重做日誌文件,而歸檔未完成需要等待,在此期間
就產生了log file switch事件,該等待事件的原因一般是I/O問題、ARCH歸檔進程跟不上LGWR日誌寫進程的速度或這日誌組太少引起的
優化方法:啟用多個歸檔ARCH進程或I/O從進程(slave processe ),
將歸檔的文件和數據文件或重做日誌文件防止在不同的位置,減少磁盤爭用以減少ARCH歸檔進程的歸檔事件,
或者增加重做日誌組
4.log file switch(checkpoint incomplete):該事件是由日誌切換太頻繁引起的,由於頻繁地切換重做日誌文件,造成檢查點的排隊。
發生該等待事件的原因一般是重做日誌緩沖區空間太小或者重做日誌組太少。
優化方法:增加重做日誌組或者增加重做日誌緩沖區尺寸。
5.log file sync:當用戶提交時,重做日誌緩沖區中的數據會一次全部寫到重做日誌文件中,此時發生的LGWR的寫出等待就是log file sync等待。
造成該等待的原因一般是放置聯機重做日誌文件的磁盤組存在爭用或者磁盤速度慢。
優化方法:將重做日誌文件和數據文件或歸檔重做日誌文件放置在不同磁盤上,以減少數據庫中的各種文件之間的I/O爭用,
同時可以把重做日誌文件放在高速磁盤上,以減少重做數據寫入重做日誌文件的時間。
6.Latch free:該等待事件的含義是當前的服務器進程需要某個閂鎖,比如等待共享池的庫高速緩存閂鎖。
如果發生該等待事件也可以通過數據字典V$Latch查看相關的閂鎖命中率。
查詢與閂鎖LATCH相關的信息
select latch#,name,gets,misses,1-(misses/(gets+misses)) "get rate"
from v$latch
where misses>1;
詳解 SGA 與實例優化(部分)