近來公司技術研發都在問我關於內存參數如何設置可以優化Oracle的性能所以抽時間整理了這篇文檔以做參考
目的:
希望通過整理此文檔使公司同事對oracle內存結構有一個全面的了解並在實際的工作中靈活應用使oracle的內存性能達到最優配置提升應用程序反應速度並進行合理的內存使用
實例結構
oracle實例=內存結構+進程結構
oracle實例啟動的過程其實就是oracle內存參數設置的值加載到內存中並啟動相應的後台進程進行相關的服務過程
進程結構
oracle進程=服務器進程+用戶進程
幾個重要的後台進程
DBWR數據寫入進程
LGWR:日志寫入進程
ARCH:歸檔進程
CKPT:檢查點進程(日志切換上一個檢查點之後又超過了指定的時間預定義的日志塊寫入磁盤例程關閉DBA強制產生表空間offline)
LCKn()封鎖進程
Dnnn:調度進程
內存結構(我們重點講解的)
內存結構=SGA(系統全局區)+PGA(程序全局區)
SGA就是我們所說的內存調優的主要對象我們重點就是設置SGA
原則SGA+PGA+OS使用內存<總物理RAM
SGA系統全局區(包括以下五個區)
A數據緩沖區:(db_block_buffers)存儲由磁盤數據文件讀入的數據
大小: db_block_buffers*db_block_size
Oraclei設置數據緩沖區為Db_cache_size
原則SGA中主要設置對象一般為可用內存%
B共享池:(shared_pool_size):數據字典sql緩沖pl/sql語法分析加大可提速度
原則SGA中主要設置對象一般為可用內存%
C日志緩沖區:(log_buffer)存儲數據庫的修改信息
原則K M 之間不應該太大
D JAVA池(Java_pool_size)主要用於JAVA語言的開發
原則若不使用java原則上不能小於M給M通常就夠了
E 大池(Large_pool_size) 如果不設置MTS主要用於數據庫備份恢復管理器RMAN
原則若不使用MTS M 之間不應該太大
SGA= db_block_buffers*db_block_size+ shared_pool_size+ log_buffer+Java_pool+size+large_pool_size
原則 達到可用內存的%就可以了
PGA程序全局區
ASort_area_size 用於排序所占內存
BHash_area_size 用於散列聯接位圖索引
這兩個參數在非MTS下都是屬於PGA 不屬於SGA是為每個session單獨分配的在我們的服務器上除了OS + SGA一定要考慮這兩部分
原則OS 使用內存+ SGA + session*(sort_area_size + hash_area_size + M) < 總物理RAM 為好
實例配置
基本掌握的原則是 db_block_buffer 通常可以盡可能的大shared_pool_size 要適度log_buffer 通常大到幾百K到M就差不多了
A如果M RAM
建議 shared_pool_size = M db_block_buffer* db_block_size = M
B如果G RAM
建議 shared_pool_size = M db_block_buffer* db_block_size = M
C如果G
建議 shared_pool_size = M db_block_buffer *db_block_size = M
參數更改方式
oraclei
主要都是通過修改Oracle啟動參數文件進行相關的配置
參數文件位置
d:\oracle\admin\DB_Name\pfile\initora
按以上修改以上參數值即可
Oraclei:
兩種方式第一種是修改Oracle啟動參數文件後通過此參數文件再創建服務器參數文件
第二種是直接運行oracle修改命令進行修改
SQL>alter system set db_cache_size=M scope=spfile;
SQL>alter system set shared_pool_size=M scope=spfile;
From:http://tw.wingwit.com/Article/program/Oracle/201311/16514.html