PGA 記憶體的管理 (zt)
一、PGA的概念
服務程式啟動的時候,被建立的非共有的記憶體領域。只能被建立的程式所訪問。
專用模式:一個Session一個服務程式
共有模式:多個Session一個服務程式,服務程式與Dispatcher無關。
二、PGA包含的內容
PRIVATE SQL領域:SQL的作業空間,用於儲存變數資訊,結果資訊,中間結果。
SESSION Memory:用於儲存於SESSION相關的一些資訊。如SESSION級別的引數,變數。
PRIVATE SQL領域裡,包含用於進行以下處理的空間
排序
Hash結合
Bitmap Merge
Bitmap 做成
三、PGA記憶體調整以後有什麼好處
排序,Hash結合等處理也在PGA中進行,如果PGA的記憶體不夠的話,就會的任務進行拆分
然後把不能放到記憶體的部分放到磁碟上去,這樣的話就會處理速度大大的降低。而這種
時候適當的調整PGA的大小,可能大大提高系統的效能。
四、PGA記憶體所需大小的估算方法
按照下面的優先順序。
1、如果是系統的更新,可以根據原有系統的效能。例如,想在原有系統上效能提高50%
那麼,記憶體也在原有系統上增加50%。
2、參照類似的系統。如果在使用環境,使用者數量,內容上,效能上都差不多的系統。也可以參考
3、按照以下公司大概估算
同時使用系統的使用者數 × 10M
4、PGA和SGA的總量可以按照以下公式
A: 更新處理需要的記憶體
commit數/秒 × 每一個事務的資料量 × 緩衝的儲存時間
B: 檢索結果需要的記憶體
檢索事務數/秒×每一件的資料量 × 同時使用的使用者數
C:總的記憶體 A + B
五、PGA現在使用大小的確認方法
PGA的使用情況透過對一下幾個動態效能表的查詢進行管理
V$PROCESS、
1、V$PROCESS能夠檢視每一個程式(包括系統的後臺程式)分配到的,使用的,可以Free的記憶體
PGA_USED_MEM 現在使用的
PGA_ALLOC_MEM 分配到的(包含未釋放到OS的)
PGA_FREEABLE_MEM 可以釋放的
PGA_MAX_MEM 曾經分配的最大記憶體
USERNAME 作業系統程式的使用者,不是客戶SESSION的使用者
2、V$PROCESS_MEMORY 每一個程式中,SQL,PL/SQL,OTHER等每一個部分分配到的記憶體
ALLOCATED
USED
MAX_ALLOCATED
3、v$bgprocess 後臺程式的資訊。paddr有值得程式才處於啟用狀態
4、v$session SESSION的資訊,專用模式是透過paddr可以找到process
5、v$shared_server v$dispatcher
系統使用中的PGA總數(M)
select trunc(sum( pga_alloc_mem )/(1024*1024),2) from v$process
六、PGA關聯的引數設定
從9i開始,PGA的大小可以由資料庫自動管理,不用再手工的去設定*_AREA_SIZE引數。
一、自動管理
pga_aggregate_target 不是PGA的最大記憶體,PGA使用的記憶體有可能超過這個大小,它是sort , hash join 等使用的作業區的大小
workarea_size_policy AUTO 使用自動管理 MANUAL 手工管理
下面的SQL驗證了PGA的總記憶體數量可以超過 pga_aggregate_target 所設定的數量
SQL> show parameter pga_aggre
NAME TYPE VALUE
------------------------------------ ----------- ------------
pga_aggregate_target big integer 91M
SQL> select trunc(sum( pga_alloc_mem )/(1024*1024),2) from v$process;
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
50.14
SQL> alter system set pga_aggregate_target= 50M scope=BOTH ;
SQL> show parameter pga_a
NAME TYPE VALUE
------------------------------------ ----------- ----------
pga_aggregate_target big integer 50M
SQL> show parameter work_area_
SQL> show parameter work
NAME TYPE VALUE
------------------------------------ ----------- ----------
fileio_network_adapters string
workarea_size_policy string AUTO
SQL> select trunc(sum( pga_alloc_mem )/(1024*1024),2) from v$process;
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
43.61
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
45.99
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
46.83
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
48.14
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
48.14
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
49.33
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
50.52
SQL> /
TRUNC(SUM(PGA_ALLOC_MEM)/(1024*1024),2)
---------------------------------------
51.11
七、PGA大小的調整
在檢查PGA的問題是,下面的幾個效能表將會非常有用
v$pgastat
aggregate PGA target parameter 初始化引數pga_aggregate_target的值
aggregate PGA auto target 可以實際使用的PGA記憶體,太小時需要調整
global memory bound 能夠使用的SQL作業區域的最大值
與_smm_max_size 和_smm_min_size 有關
total PGA used for auto workareas 使用中的SQL作業區的大小。SQL執行完成,變為0
PGA大小調整的關鍵是SQL作業區的使用方式
optimal : 所有的處理都在記憶體中執行
onepass : 有一部分處理不在記憶體中
multipass : 很多的處理不在記憶體中
效能最佳化的目標
optimal 的PERCENTAGE >= 90%
multipass 的 PERCENTAGE = 0%
用下面的SQL來檢查每個部分的百分比
SELECT name profile,
cnt,
decode( total, 0, 0, round( cnt * 100 / total)) percentage
FROM ( SELECT name, value cnt, ( SUM( value ) OVER()) total
FROM v$sysstat
WHERE name LIKE 'workarea exec%');
PROFILE CNT PERCENTAGE
-------------------------------------------------- ----------
workarea executions - optimal 5395 95
workarea executions - onepass 284 5
workarea executions - multipass 0 0
八、PGA每一個服務程式 serer process的記憶體分配
每一個server process能夠分配到的記憶體(不包括session等,主要是SQL的作業區域)的最大值和最小值由下面的隱藏引數控制,下面使default值的設定
_smm_min_size: max(pga_aggregate_target 的 0.1%(1MB 以內), 128KB)
_smm_max_size: min(pga_aggregate_target 的 5%, _pga_max_size/2)
注意:並不是server process一建立,這些記憶體就會被使用,記憶體只有再必須的時候才會被分配。這個的最大,最小不是對一個server process說的,而是對於一個,operation type ,例如
sort , hash join . 所以,一個server process 有可能可以分配到兩個。當_smm_max_size也不能完成處理的時候,系統可能會自動暫時的擴張pga_aggrate_target的大小,
-----------------------------------------------------------------
隱藏引數的確認方法:
用SYS使用者執行以下SQL
select a.ksppinm "Parameter",a.KSPPDESC "Description",b.ksppstvl "Value"
from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm like '%_smm_min_size%';
隱藏引數的修改方法:
SQL> create pfile='d:huddy.ora' from spfile ;
SQL> shutdown immediate ;
SQL> create spfile from pfile='d:huddy.ora';
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
SQL> select a.ksppinm "Parameter",a.KSPPDESC "Description",b.ksppstvl "Value"
2 from x$ksppi a, x$ksppcv b where a.indx = b.indx and a.ksppinm like '%_smm_min_size%';
_smm_min_size
minimum work area size in auto mode
8096
-----------------------------------------------------------------
當pga_aggrate_target的記憶體用完的時候,系統並不會因此而不讓新的server process產生
而是會自動的去取得超過pga_aggrate_target的記憶體來用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-84975/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle9i 自動管理PGA記憶體(zt)Oracle記憶體
- SGA和PGA記憶體管理記憶體
- ORACLE記憶體管理 之一 ORACLE PGAOracle記憶體
- ORACLE 記憶體管理 之二 PGA v$pgastatOracle記憶體AST
- Oracle PGA記憶體的配置和使用Oracle記憶體
- ORACLE記憶體管理 之三 PGA v$sql_workarea_histogram v$pga_target_adviceOracle記憶體SQLHistogram
- 記憶體管理篇——實體記憶體的管理記憶體
- Oracle記憶體結構研究-PGA篇Oracle記憶體
- 記憶體管理 記憶體管理概述記憶體
- 【SGA】【PGA】普適的Oracle記憶體分配策略Oracle記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Oracle記憶體全面分析(ZT)Oracle記憶體
- Aerospike的bin記憶體管理--即列記憶體管理ROS記憶體
- 自動共享記憶體管理 自動記憶體管理 手工記憶體管理記憶體
- 當實體記憶體小於sga+pga時記憶體
- Oracle9i自動PGA管理(zt)Oracle
- 【記憶體管理】記憶體佈局記憶體
- oracle例項記憶體(SGA和PGA)調整Oracle記憶體
- oracle資料庫記憶體分配(sga和pga)Oracle資料庫記憶體
- Oracle記憶體分配與使用(zt)Oracle記憶體
- Oracle體系結構之記憶體結構(SGA、PGA)Oracle記憶體
- 記憶體管理記憶體
- 記憶體管理兩部曲之實體記憶體管理記憶體
- CF的記憶體管理。記憶體
- JavaScript的記憶體管理JavaScript記憶體
- Go:記憶體管理與記憶體清理Go記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- zt_eygle_Linux虛擬記憶體管理 - page table頁表的作用Linux記憶體
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- Linux 記憶體管理:記憶體對映Linux記憶體
- 記憶體管理-swMemoryGlobal記憶體
- OC記憶體管理記憶體
- iOS 記憶體管理iOS記憶體
- JavaScript 記憶體管理JavaScript記憶體
- MySQL記憶體管理MySql記憶體
- Oracle 記憶體管理Oracle記憶體
- JavaScript記憶體管理JavaScript記憶體