實例結構
oracle實例=內存結構+進程結構
oracle實例啟動的過程其實就是oracle內存參數設置的值加載到內存中並啟動相應的後台進程進行相關的服務過程
進程結構
oracle進程=服務器進程+用戶進程
幾個重要的後台進程
DBWR數據寫入進程
LGWR:日志寫入進程
ARCH:歸檔進程
CKPT:檢查點進程(日志切換上一個檢查點之後又超過了指定的時間預定義的日志塊寫入磁盤例程關閉DBA強制產生表空間offline)
LCKn()封鎖進程
Dnnn:調度進程
內存結構(我們重點講解的)
內存結構=SGA(系統全局區)+PGA(程序全局區)
SGA是用於存儲數據庫信息的內存區該信息為數據庫進程所共享它包含Oracle 服務器的數據和控制信息它是在Oracle服務器所駐留的計算機的實際內存中得以分配如果實際內存不夠再往虛擬內存中寫
我們重點就是設置SGA理論上SGA可占OS系統物理內存的/——/
原則SGA+PGA+OS使用內存<總物理RAM
SGA=((db_block_buffers*blocksize)+(shared_pool_size+large_pool_size+java_pool_size+log_buffers)+MB
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程序全局區
PGA包含單個服務器進程或單個後台進程的數據和控制信息與幾個進程共享的SGA 正相反PGA 是只被一個進程使用的區域PGA 在創建進程時分配在終止進程時回收
ASort_area_size 用於排序所占內存
BHash_area_size 用於散列聯接位圖索引
這兩個參數在非MTS下都是屬於PGA 不屬於SGA是為每個session單獨分配的在我們的服務器上除了OS + SGA一定要考慮這兩部分
原則OS 使用內存+SGA+並發執行進程數*(sort_area_size+hash_ara_size+M) < *總內存
實例配置
一物理內存多大
二操作系統估計需要使用多少內存
三數據庫是使用文件系統還是裸設備
四有多少並發連接
五應用是OLTP 類型還是OLAP 類型
基本掌握的原則是 db_block_buffer 通常可以盡可能的大shared_pool_size 要適度log_buffer 通常大到幾百K到M就差不多了
A如果M RAM 單個CPU db_block_size 是 bytes
SGA=*M=M左右
建議 shared_pool_size = M db_block_buffer* db_block_size = M
具體: shared_pool_size = #M
db_block_buffer= #M
log_buffer = # k (K*CPU個數)
large_pool_size= #M
java_pool_size = # M
sort_area_size = # k (kM)
sort_area_retained_size = # MTS 時 sort_area_retained_size = sort_area_size
B如果G RAM 單個CPU db_block_size 是 bytes
SGA=*M=M左右
建議 shared_pool_size = M db_block_buffer* db_block_size = M
具體: shared_pool_size= #M
db_block_buffer= #M
log_buffer = # k (K*CPU個數)
large_pool_size= #M
java_pool_size = # M
sort_area_size = # k (kM)
sort_area_retained_size = # MTS 時 sort_area_retained_size = sort_area_size
C如果G 單個CPU db_block_size 是 bytes
SGA=*M=M左右
建議 shared_pool_size = M db_block_buffer *db_block_size = M
具體: shared_pool_size= #M
db_block_buffer= #M
log_buffer = # k (K*CPU個數)
large_pool_size= #M
java_pool_size = # M
sort_area_size = # k (kM)
sort_area_retained_size = # MTS 時 sort_area_retained_size = sort_area_size
假定 bit ORACLE
內存G
shared_pool_size = M data buffer = G
內存G
shared_pool_size = M data buffer = G
內存 G
shared_pool_size = MM data buffer = G
參數更改方式
oraclei
主要都是通過修改oracle啟動參數文件進行相關的配置
參數文件位置
d:oracleadminDB_Namepfileinitora
按以上修改以上參數值即可
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/18620.html