oracle sga pga mysql_oracle实例内存(SGA和PGA)调整-xin
一、名詞解釋
(1)SGA:System Global Area是Oracle Instance的基本組成部分,在實例啟動時分配;系統全局域SGA主要由三部分構成:共享池、數據緩沖區、日志緩沖區。
(2)共享池:Shared Pool用于緩存最近被執行的SQL語句和最近被使用的數據定義,主要包括:Library cache(共享SQL區)和Data dictionary cache(數據字典緩沖區)。? 共享SQL區是存放用戶SQL命令的區域,數據字典緩沖區存放數據庫運行的動態信息。
(3)緩沖區高速緩存:Database Buffer Cache用于緩存從數據文件中檢索出來的數據塊,可以大大提高查詢和更新數據的性能。
(4)大型池:Large Pool是SGA中一個可選的內存區域,它只用于shared server環境。
(5)Java池:Java Pool為Java命令的語法分析提供服務。
(6)PGA:Process Global Area是為每個連接到Oracle database的用戶進程保留的內存。
二、分析與調整
(1)系統全局域:
SGA與操作系統、內存大小、cpu、同時登錄的用戶數有關??烧糘S系統物理內存的1/3到1/2。
a.共享池:
查看共享SQL區的使用率:
Sql代碼??
select(sum(pins-reloads))/sum(pins)?"Library?cache"?from?v$librarycache;--動態性能表
這個使用率應該在90%以上,否則需要增加共享池的大小。
查看數據字典緩沖區的使用率:
Sql代碼??
select?(sum(gets-getmisses-usage-fixed))/sum(gets)?"Data?dictionary?cache"?from?v$rowcache;--動態性能表
這個使用率也應該在90%以上,否則需要增加共享池的大小。
修改共享池的大小:
Sql代碼??
ALTER?SYSTEM?SET?SHARED_POOL_SIZE?=?64M;
b.緩沖區高速緩存:
查看數據庫數據緩沖區的使用情況:
Sql代碼??
SELECT?name,value?FROM?v$sysstat?order?by?name?WHERE?name?IN(''DB?BLOCK?GETS'',''CONSISTENT?GETS'',''PHYSICAL?READS'');
計算出來數據緩沖區的使用命中率=1-(physical reads/(db block gets+consistent gets)),這個命中率應該在90%以上,否則需要增加數據緩沖區的大小。
c.日志緩沖區
查看日志緩沖區的使用情況:
Sql代碼??
SELECT?name,?value??FROM?v$sysstat?WHERE?name?IN?(''redo?entries'',''redo?log?space?requests'');
查詢出的結果可以計算出日志緩沖區的申請失敗率:
申請失敗率=requests/entries,申請失敗率應該接近于0,否則說明日志緩沖區開設太小,需要增加ORACLE數據庫的日志緩沖區。
d.大型池:
可以減輕共享池的負擔,可以為備份、恢復等操作來使用,不使用LRU算法來管理。其大小由數據庫的‘共享模式/db模式’如果是共享模式的話,要分配的大一些。
指定Large Pool的大小:
Sql代碼??
ALTER?SYSTEM?SET?LARGE_POOL_SIZE=64M
e.Java池:
在安裝和使用Java的情況下使用。
(2)PGA調整
a.PGA_AGGREGATE_TARGET初始化設置
PGA_AGGREGATE_TARGET的值應該基于Oracle實例可利用內存的總量來設置,這個參數可以被動態的修改。假設Oracle實例可分配4GB的物理內存,剩下的內存分配給操作系統和其它應用程序。你也許會分配80%的可用內存給Oracle實例,即3.2G?,F在必須在內存中劃分SGA和PGA區域。
在OLTP(聯機事務處理)系統中,典型PGA內存設置應該是總內存的較小部分(例如20%),剩下80%分配給SGA。
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20%
在DSS(數據集)系統中,由于會運行一些很大的查詢,典型的PGA內存最多分配70%的內存。
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%
在這個例子中,總內存4GB,DSS系統,你可以設置PGA_AGGREGATE_TARGET為1600MB,OLTP則為655MB。
b.配置PGA自動管理
不用重啟DB,直接在線修改。
SQL>?alter system set workarea_size_policy=auto scope=both;
System altered.
SQL>?alter system set pga_aggregate_target=512m scope=both;
System altered.
SQL>?show parameter workarea
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy???????????????? string????? AUTO --這個設置成AUTO
SQL> show parameter pga
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target???????????????? big integer 536870912
SQL>
c.監控自動PGA內存管理的性能
V$PGASTAT:這個視圖給出了一個實例級別的PGA內存使用和自動分配的統計。
SQL> set lines 256
SQL> set pages 42
SQL> SELECT * FROM V$PGASTAT;
NAME????????????????????????????????????????????????????????????????? VALUE UNIT
---------------------------------------------------------------- ---------- ------------
aggregate PGA target parameter??????????????????????????????????? 536870912 bytes??? --當前PGA_AGGREGATE_TARGET的值
aggregate PGA auto target???????????????????????????????????????? 477379584 bytes??? --當前可用于自動分配了的PGA大小,應該比PGA_AGGREGATE_TARGET 小
global memory bound??????????????????????????????????????????????? 26843136 bytes??? --自動模式下工作區域的最大大小,Oracle根據工作負載自動調整。
total PGA inuse???????????????????????????????????????????????????? 6448128 bytes
total PGA allocated??????????????????????????????????????????????? 11598848 bytes??? --PGA的最大分配
maximum PGA allocated???????????????????????????????????????????? 166175744 bytes
total freeable PGA memory??????????????????????????????????????????? 393216 bytes??? --PGA的最大空閑大小
PGA memory freed back to OS??????????????????????????????????????? 69074944 bytes
total PGA used for auto workareas???????????????????????????????????????? 0 bytes??? --PGA分配給auto workareas的大小
maximum PGA used for auto workareas???????????????????????????????? 1049600 bytes
total PGA used for manual workareas?????????????????????????????????????? 0 bytes
maximum PGA used for manual workareas??????????????????????????????? 530432 bytes
over allocation count????????????????????????????????????????????????? 1118??? --實例啟動后,發生的分配次數,如果這個值大于0,就要考慮增加pga的值
bytes processed?????????????????????????????????????????????????? 114895872 bytes
extra bytes read/written??????????????????????????????????????????? 4608000 bytes
cache hit percentage????????????????????????????????????????????????? 96.14 percent??? --命中率
16 rows selected.
--V$PGA_TARGET_ADVICE
SQL>?SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,
ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
ESTD_OVERALLOC_COUNT
FROM v$pga_target_advice;
The output of this query might look like the following:
TARGET_MB?? CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
---------- -------------- --------------------
63?????? 23????????? 367
125??????? 24????????? 30
250??????? 30????????? 3
375??????? 39????????? 0
500??????? 58????????? 0
600??????? 59????????? 0
700??????? 59????????? 0
800??????? 60????????? 0
900??????? 60????????? 0
1000??? 61????????? 0
1500??? 67????????? 0
2000??? 76????????? 0
3000??? 83????????? 0
4000??? 85????????? 0
可以看出當TARGET_MB 為375M是ESTD_OVERALLOC_COUNT=0,所以可以將PGA_AGGREGATE_TARGET設置成375M。
附:oracle SGA與PGA區別:
SGA:是用于存儲數據庫信息的內存區,該信息為數據庫進程所共享。它包含Oracle 服務器的數據和控制信息,它是在Oracle服務器所駐留的計算機的實際內存中得以分配,如果實際內存不夠再往虛擬內存中寫。
PGA:包含單個服務器進程或單個后臺進程的數據和控制信息,與幾個進程共享的SGA 正相反,PGA 是只被一個進程使用的區域,PGA 在創建進程時分配,在終止進程時回收。
總結
以上是生活随笔為你收集整理的oracle sga pga mysql_oracle实例内存(SGA和PGA)调整-xin的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网商银行贷款可靠吗
- 下一篇: java mssql jdbc_从零开始