程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> Oracle 10g內存結構之排序區和Java池的相關知識簡介

Oracle 10g內存結構之排序區和Java池的相關知識簡介

編輯:Oracle數據庫基礎
本文我們接著介紹一下剩余的部分,包括:程序全局區排序區Java池等的相關知識,接下來我們就開始介紹這部分內容。

程序全局區

程序全局區是包含單個用戶或服務器數據和控制信息的內存區域。程序全局區是用戶進程連接到Oracle數據庫並創建一個會話時,由Oracle自動分配的。與sga不同,pga 並非共享區,主要用於用戶在編程時存儲變量和數組。該區域中 STACK SPACE 是用於存儲用戶會話的變量和數組的存儲區域,USER SESSION DATA 是用戶會話使用的附加區域。用戶會話結束pga 釋放。

排序區

Sort  Area 是為有排序請求的sal 語句提供內存空間,系統使用專用的內存區域進行數據排序,這部分空間就稱為排序區,用戶數據的排序可以分為兩個一個是內存排序區,另外一個是磁盤臨時段。系統優先使用內存排序區進行排序。如果內存不夠,Oracle自動使用磁盤臨時段表空間進行排序。

要了解排序區的大小,可以查看 sort_area_size 方法如下:

參數文件:

  1. ….  
  2. Compatible = 8.1.0  
  3. Sort_area_size = 65536 
  4. Sort_area_retained_size = 65536 
  5. ….. 

方法二:

  1. SQL>select name,value from v$parameter where name like ‘%size’; 

方法三:

  1. SQL> show parameter sort_area_size 

如果要了解數據庫中排序區的使用情況,確認在內存排序量與磁盤排序量,可以查詢數據字典v$sysstat

SQL> select name,value from v$sysstat where name like ‘%sort%’;

大池

大池(large pool)用於數據庫備份工具—恢復管理器(rman)

大池的參數由large_pool_size 確定。

查詢該值的方法有三,這裡介紹其中一個方法:

SQL> show parameter large_pool_size

Java 池

參數Java_pool_size  大小應該不小於20M。

Oracle10g自動共享內存管理

在Oracle 中 將參數STSTISTICS_LEVEL 設置為 TYPICAL(默認)或ALL,使用新參數SGA_TARGET 指出SGA內存分配總大小即可,不需要定義SHAR_POOL_SIZE DB_CACHE_SIZE 等參數,數據庫服務器會自動根據需要動態分配。 注意如果沒有sga_targe ,則自動共享內存管理功能被禁止,仍然可以設置每個參數。在設置了SGA_TARGET 後,其他參數默認設置為0。

自動恭喜內存管理時設置內存參數的最小值限制:如果數據庫管理員了解某一個應用所需的內存大小,就可以為內存組件指定最小值。最小值可以用相應的參數進行設置,例如:

  1. SGA_TARGET256m 
  2. SHARE_POOL_SIZE32M 
  3. DB_CACHE_SIZE = 100M 

即在自動分配時,共享池及數據緩沖區的值不得小於32m 和 100m ,其余的124m 內存將分配給其他組件。可以查詢數據字典 v$sga_dynamic_components 了解各個組件的分配值。

當啟動自動共享內存管理的功能後,對於自動設置的參數也可以手動設置,例如SHARE_POOL_SIZE 如果為sga 組件參數設置了比較小的值,則不會立即起作用,例如:如果設置參數SGA_TARGET = 512M ,SHARE_POOL_SIZE = 256M 而當前共享池為284M,如果dba 動態減少SHARE_POOL_SIZE的值,使之低於256M或更低的值時將不起作用。如果參數值超過當前組件值,則組件的值也隨之增加,如果SHARE_POOL_SIZE的值為300M,則共享池增加到300M。

在自動管理內存時,當參數的取值增加時,則用於自動調整地額外內存就減少,反之亦然。

此外,一些sga參數必須由數據庫管理員設置,系統將不進行自動調整。這些參數包括:

  •  LOG_BUFFER
  •  DB_KEEP_CACHE_SIZE
  •  DB_RECYCLE_CACHE_SIZE
  •  DB_nK_CACHE_SIZE
  •  STREAMS_POOL_SIZE

這些參數設置後將影響到其他參數的自動分配,(可用內存變化)。

手動內存管理轉到自動內存管理

如果要從手動內存管理轉到自動內存管理,只需要增加參數SGA_TARGET即可。首先,計算出SGA各個參數的取值,再加上16M(fixed SGA overhead),即可得到SGA總大小。然後從參數文件中將內存各個組件的值取消。例如:

  •  SHARE_POOL_SIZE = 256M
  •  DB_CACHE_SIZE = 512M
  •  LARGE_POOL_SIZE = 256M
  •  LOG_BUFFER  = 16M

則SGA_TARGET = 256+512+256+16+16 =1056M,也可以查詢數據字典得到:

  1. SQL> select ( ( select sum(value) from v$sga ) – (select current_size from v$ sga_dynamic_free_memory ) ) “sga_target” from dual; 

又例如:如果一個手動管理的實例SGA_MAX_SIZE = 1200M 其中

  1. SHARE_POOL_SIZE = 200M 
  2. DB_CACHE_SIZE = 500M 
  3. LARGE_POOL_SIZE = 200M 

查詢結果如下:

  1. SQL> select sum(value) from v$sga  ;  結果為1200m  
  2. SQL> select current_size from v$sga_dynamic_free_memory ;   

結果為208M。

則SGA_TARGET =1200 – 208 = 902M。

從參數文件取消SHARE_POOL_SIZE DB_CACHE_SIZE LARGE_POOL_SIZE

在自動內存管理方式下,如果數據庫適用spfile ,那麼數據庫關閉後,系統激昂上一次數據庫關閉時的狀態記錄下來,經過調整後的內存參數的各個組件的值將保存在參數文件中,所以如果使用自動內存管理,最好使用spfile。

關於Oracle 10g內存結構之排序區和Java池的相關知識就介紹到這裡了,希望本次的介紹能夠對您有所收獲。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved