Oracle 內存參數調優設置


Oracle 數據庫系統中起到調節作用的參數叫初始化參數,數據庫管理員根據實際情況需要適當調整這些 初始化參數以優化Oracle系統。

 

  1 主要系統參數調優介紹

  

 

  2 系統內存參數的分配

 

  2.1 Oracle 實例= 內存結構 + 進程結構

  內存結構 = SGA + PGA

  SGA(系統全局區): 用戶存儲數據庫信息的內存區,該區域為數據庫進程所共享。它包含服務器的數據和控制信息,主要包含高速數據緩沖區、共享池、重做日志緩存區、Java池,大型池等內存結構。

  SGA的設置,理論上SGA的大小應該占OS的內存的 1/3-1/2左右。

  SGA + PGA + OS使用的內存 < 總的物理內存

 

  查看當前系統SGA的信息

select name,bytes/1024/1024 as "Size(M)"
from v$sgainfo;

  根據查詢信息顯示當前還有148M可用的SGA內存,系統當前的內存配置並不是最優的,我們在實際使用過程中根據情況可以重新分配內存。

 

  2.2 SGA的設置原則

  SGA = (db_block_buffers * db_block_size) + (shared_pool_size + large_pool_size + java_pool_size + log_buffers)

 

  (1)緩沖區高速緩存(database_buffer_cache):主要存儲由磁盤數據文件寫入的數據

  大小:db_block_buffers * db_block_size

分配原則:緩沖區高速緩存的調整,用戶進程所存取的所有數據都是經過緩沖區高速緩存來存取,所以該部分的命中率,對性能至關重要。緩沖區高速緩存的使用情況記錄在動態性能表v$sysstat中,可通過查詢該表來了解其活動情況,以決定如何調整。

  select name,value from v$sysstat where name in ('dbblock gets','consistent gets','physical reads'); 
     dbblock gets和consistent gets的值是請求數據緩沖區中讀的總次數。physical reads的值是請求數據時引起從盤中讀文件的次數。從緩沖區高速緩存中讀的可能性的高低稱為緩沖區的命中率,計算公式:

  Hit Ratio=1-(physical reds/(dbblock gets+consistent gets)) ,

select 1-(phys.value/(cur.value + con.value)) "HIT RATIO"
from    v$sysstat cur, v$sysstat con, v$sysstat phys
where  cur.name = 'db block gets' 
       and con.name = 'consistent gets' 
     and phys.name = 'physical reads';

如果Hit Ratio<60%~70%,則應增大db_block_buffers的參數值。db_block_buffers可以調整分配給緩沖區高速緩存的內存量,即db_block_buffers可設置分配緩沖區高速緩存的數據塊的個數。緩沖區高速緩存的總字節數=db_block_buffers的值*db_block_size的值。db_block_size 的值表示數據塊大小的字節數,可查詢 v$parameter 表:

select name,value
from v$parameter
where name='db_block_size';

在修改了上述數據庫的初始化參數以后,必須先關閉數據庫,在重新啟動數據庫后才能使新的設置起作用。

 

  (2)共享池(shared_pool_size)

分配原則:在shared pool中,主要包含兩個cache,即Library Cache和Data Dictionary Cache,但是不能對它們進行單獨調整,只能通過調整shared_pool_size來進行。

Library Cache用於存放共享SQL語句和PL/SQL語句,采用LRU(Least Recently Used)算法進行管理,Oracle可以用已經cache在其中的SQL語句,而不需要re-parsing,我們可以通過下面的SQL語句來查詢Library Cache的命中率(Hit Ratio):

select GETHITRATIO
from v$librarycache
where namespace ='SQL AREA';

  如果得到的結果小於90%,那么說明命中率不高,需要增大Library Cache了。

 

Data Dictionary Cache的調整,數據字典緩沖區包含了有關數據庫的結構、用戶、實體信息。數據字典的命中率,對系統性能影響極大。數據字典緩沖區的使用情況記錄在動態性能表v$librarycache中,可通過查詢該表來了解其活動情況,以決定如何調整。
select sum(gets),sum(getmisses)

from v$rowcache; 

gets列是對相應項請求次數的統計,getmisses 列是引起緩沖區出錯的數據的請求次數。對於頻繁訪問的數據字典緩沖區,sum(getmisses)/sum(gets)<10%。若大於此百分數,則應考慮增加數據字典緩沖區的容量,即需調整初始化參數shared_pool_size來重新調整分配給共享池的內存量。

  

  (3) 大池(large_pool_size ): 主要用於數據庫備份管理器RAM

  原則: 根據實際情況

 

  (4) Java池(java_pool_size): 主要用於Java語言開發

  原則: 根據實際情況

 

  (5) 日志緩沖區(log_buffers): 存儲數據修改信息

  原則:根據實際情況

 

  2.3 PGA 程序全局區

  PGA包含單個服務器進程或者單個后台進程的數據和控制信息, 與幾個進程共享的SGA正好相反,是一個只被一個進程使用的區域,PGA在創建進程時分配終止進程時回收。

  (1) sort_area_size 用戶排序所占的內存

  (2) hash_area_size 用戶散列聯接, 位圖索引

 

  這兩個參數在非MTS模式下都是屬於PGA,是為每個session單獨分配的,在我們的服務器上除了OS + SGA一定要考慮這兩部分大小的設置

  OS + SGA + 並發執行的進程數*(sort_area_size + hash_area_size) < 0.7 * OS的總物理內存

 

  3 實例配置

  (1) 物理內存大小

  (2) 操作系統及其他應用程序需要的內存

  (3) 數據庫系統使用的是文件設備還是裸設備

  (4) 有多少並發連接

  (5) 應用是OLTP還是OLAP類型

 

  基本分配原則,db_block_buffers盡可能的大, shared_pool_size適度, log_buffer通常幾百KB到1M就可以了。 

  1G內存,1個CPU, db_block_size 為8192B

  SGA = 1024 * 0.5 =512   -- 最大一般為OS 內存的一半左右,不超過60%

  (1) databse buffer cache:512 * 40% = 205M     db_block_buffer應設為:52352(409*1024*1024/8192)  -- 一般為sga_max_size的40%

  (2) shared_pool_size: 563* 40% = 205M  -- 一般為sga_max_size的40%

  (3) log_buffer: 128K (128K*CPU個數)

  (4) java_pool_size: 4M

  (5) large_pool_size: 4M

  (6) sort_area_size: 根據實際情況 65K - 2M

  (7) sort_area_retained_size: 根據實際情況


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM