Oracle PGA参数
生活随笔
收集整理的這篇文章主要介紹了
Oracle PGA参数
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
PGA: 程序全局區(qū),服務(wù)器進(jìn)程使用的內(nèi)存區(qū)域,包括特定服務(wù)器進(jìn)程的數(shù)據(jù)和控制信息,例如使用的操作系統(tǒng)資源等。
UGA: 用戶(hù)全局區(qū),特定Session使用的內(nèi)存區(qū)域,例如Session的SQL工作區(qū)、登陸認(rèn)證信息等。Session的SQL工作區(qū)大小對(duì)查詢(xún)性能的影響比較關(guān)鍵,shared server模式時(shí)UGA從SGA的large pool(如果有設(shè)置)或者shared pool(沒(méi)有設(shè)置large pool)中分配,dedicated server模式時(shí)UGA從PGA中分配。
CGA: 調(diào)用全局區(qū),存放調(diào)用過(guò)程中需要的數(shù)據(jù),例如parse調(diào)用、executive調(diào)用、fetch調(diào)用等。調(diào)用過(guò)程中實(shí)際需要的數(shù)據(jù),例如SQL Area、Sort Area等位于UGA中,CGA存放的只是調(diào)用過(guò)程中的臨時(shí)處理數(shù)據(jù),例如I/O緩存、臨時(shí)堆棧空間等。CGA位于PGA中(PGA是集中管理這些資源的地方),在調(diào)用開(kāi)始時(shí)創(chuàng)建,調(diào)用執(zhí)行過(guò)程中動(dòng)態(tài)分配,調(diào)用結(jié)束后釋放。
WORKAREA_SIZE_POLICY = { AUTO | MANUAL }
{ ALTER SYSTEM | ALTER SESSION } SET WORKAREA_SIZE_POLICY = { AUTO | MANUAL }
設(shè)為AUTO時(shí),內(nèi)存使用比較多的SQL操作,例如sort, group-by, hash-join, bitmap merge和bitmap create等,由Oracle自動(dòng)分配;設(shè)為MANUAL時(shí),這些操作將使用相應(yīng)的*_AREA_SIZE參數(shù)設(shè)置的內(nèi)存值。
*_AREA_SIZE作用于每個(gè)Session,分配的過(guò)小,很多Session可能沒(méi)有足夠的內(nèi)存而效率低下,分配過(guò)多,大量Session可能浪費(fèi)掉很多內(nèi)存空間,9i開(kāi)始的PGA自動(dòng)管理功能改善了這個(gè)狀況。使用PGA_AGGREGATE_TARGET設(shè)置整個(gè)PGA大小,Oracle將為每個(gè)Session按照實(shí)際需要為其分配PGA,并盡量維持PGA總量不超過(guò)PGA_AGGREGATE_TARGET值。
PGA_AGGREGATE_TARGET = integer [K | M | G]
ALTER SYSTEM
設(shè)定總的PGA內(nèi)存大小。Oracle將盡量保證PGA內(nèi)存總合不超過(guò)這個(gè)值,但不是絕對(duì)的,為了避免磁盤(pán)操作,有時(shí)可能會(huì)超過(guò)這個(gè)值。可以設(shè)置為總的內(nèi)存數(shù)減去SGA的剩余值。
將該初始化參數(shù)設(shè)置為大于0的值,Oracle自動(dòng)將WORKAREA_SIZE_POLICY設(shè)為AUTO;將該初始化參數(shù)設(shè)置為0,Oracle自動(dòng)將WORKAREA_SIZE_POLICY設(shè)為MANUAL。設(shè)置了PGA_AGGREGATE_TARGET之后,會(huì)忽略所有*_AREA_SIZE設(shè)置。
HASH_AREA_SIZE = Integer
ALTER SESSION
單位為字節(jié)數(shù)。
SORT_AREA_SIZE = Integer
ALTER SESSION, ALTER SYSTEM ... DEFERRED
單位為字節(jié)數(shù)。如果沒(méi)有設(shè)置SORT_AREA_RETAINED_SIZE,分配的內(nèi)存在排序結(jié)束,開(kāi)始返回記錄之前釋放,如果設(shè)置了SORT_AREA_RETAINED_SIZE,分配的內(nèi)存在最后一條記錄返回后釋放。位圖索引上的插入、更新也會(huì)用到SORT_AREA_SIZE(因?yàn)閽呙柰晁饕蟊仨殞?duì)各個(gè)位圖進(jìn)行排序,然后再合并成一個(gè)位圖)。
SORT_AREA_RETAINED_SIZE = Integer
ALTER SESSION, ALTER SYSTEM ... DEFERRED
單位為字節(jié)數(shù)。指在UGA中保留的排序內(nèi)存大小,排序操作結(jié)束,返回最后一條記錄之后釋放排序內(nèi)存,只是釋放給UGA,而不是操作系統(tǒng)。
BITMAP_MERGE_AREA_SIZE,CREATE_BITMAP_AREA_SIZE,位圖索引創(chuàng)建、更新時(shí)使用的內(nèi)存配置。
_pga_max_size: Maximum size of the PGA memory for one process。ALTER SYSTEM。默認(rèn)值200M。
查看_pga_max_size值的方法:
select ksppinm "Name", ksppstvl/1024/1024 ||'M' "Value", ksppdesc "Desc"
from x$ksppi x, x$ksppcv y
where x.indx = y.indx and ksppinm ='_pga_max_size';
_smm_max_size: Maximum work area size in auto mode (serial)。{ALTER SESSION | ALTER SYSTEM}。
網(wǎng)上有很多描述_smm_max_size默認(rèn)值的說(shuō)法,其實(shí)都不對(duì),追究其算法也沒(méi)多少意義,反正如果你沒(méi)有手動(dòng)設(shè)置過(guò)_smm_max_size的值,一旦設(shè)置_pga_max_size或者PGA_AGGREGATE_TARGET,Oracle就會(huì)自動(dòng)計(jì)算出_smm_max_size的值,如果手動(dòng)設(shè)置過(guò)_smm_max_size則不會(huì)變化,Oracle自動(dòng)計(jì)算出的_smm_max_size值,跟PGA_AGGREGATE_TARGET和_pga_max_size都有關(guān)系。查看_smm_max_size值的方法如下:
select ksppinm "Name", ksppstvl/1024 ||'M' "Value", ksppdesc "Desc"
from x$ksppi x, x$ksppcv y
where x.indx = y.indx and ksppinm ='_smm_max_size';
使用PGA_AGGREGATE_TARGET讓Oracle自動(dòng)分配PGA時(shí),為了防止單個(gè)Session占用過(guò)多內(nèi)存而導(dǎo)致整個(gè)服務(wù)器性能下降,這兩個(gè)隱藏參數(shù)控制了單個(gè)進(jìn)程的最大內(nèi)存使用量。
這兩個(gè)參數(shù)為隱藏參數(shù),Oracle官方不進(jìn)行技術(shù)支持,如果系統(tǒng)中存在大量的HASH JOIN、SORT等耗費(fèi)內(nèi)存的操作,可以考慮、測(cè)試這些參數(shù)對(duì)系統(tǒng)性能的影響,但注意其副作用。
沒(méi)有使用并行查詢(xún)時(shí),單個(gè)Session SQL工作區(qū)內(nèi)存使用最大值為min( 5%*PGA_AGGREGATE_TARGET , 50%*_pga_max_size , _smm_max_size)。
設(shè)置_pga_max_size: Alter System Set "_pga_max_size"=1024M。
設(shè)置_smm_max_size: Alter System Set "_smm_max_size"=307200,單位是K,只能以這種單位進(jìn)行設(shè)置,數(shù)字后面不能使用K、M、G這些單位字符了。
監(jiān)控、改善PGA設(shè)置
監(jiān)控PGA的視圖:v$sql_workarea_active、v$sql_workarea、v$sesstat、v$process、v$sysstat、v$sql_workarea_histogram等。
使用下面的視圖查看Oracle建議的評(píng)估設(shè)置:
Select pga_target_for_estimate/1024/1024 ||'M' "Estimate PGA Target"
?????? ,estd_pga_cache_hit_percentage "Cache Hit(%)"
?????? ,estd_extra_bytes_rw/1024/1024 ||'M' "Extra Read/Write"
?????? ,estd_overalloc_count "Over alloc count"
From v$pga_target_advice
選出的4個(gè)列中,Over alloc count指示Oracle SQL工作區(qū)內(nèi)存分配的三種情況:optimal完全可以在內(nèi)存中完成操作;onepass需要進(jìn)行一次磁盤(pán)交換;multipass需要進(jìn)行多次磁盤(pán)交換。第四列的值就是需要進(jìn)行磁盤(pán)交換的數(shù)量。
PGA_AGGREGATE_TARGET的值最好選擇: Over alloc count為0、Cache Hit(%)盡可能高、Extra Read/Write盡可能低的Estimate PGA Target值。
UGA: 用戶(hù)全局區(qū),特定Session使用的內(nèi)存區(qū)域,例如Session的SQL工作區(qū)、登陸認(rèn)證信息等。Session的SQL工作區(qū)大小對(duì)查詢(xún)性能的影響比較關(guān)鍵,shared server模式時(shí)UGA從SGA的large pool(如果有設(shè)置)或者shared pool(沒(méi)有設(shè)置large pool)中分配,dedicated server模式時(shí)UGA從PGA中分配。
CGA: 調(diào)用全局區(qū),存放調(diào)用過(guò)程中需要的數(shù)據(jù),例如parse調(diào)用、executive調(diào)用、fetch調(diào)用等。調(diào)用過(guò)程中實(shí)際需要的數(shù)據(jù),例如SQL Area、Sort Area等位于UGA中,CGA存放的只是調(diào)用過(guò)程中的臨時(shí)處理數(shù)據(jù),例如I/O緩存、臨時(shí)堆棧空間等。CGA位于PGA中(PGA是集中管理這些資源的地方),在調(diào)用開(kāi)始時(shí)創(chuàng)建,調(diào)用執(zhí)行過(guò)程中動(dòng)態(tài)分配,調(diào)用結(jié)束后釋放。
WORKAREA_SIZE_POLICY = { AUTO | MANUAL }
{ ALTER SYSTEM | ALTER SESSION } SET WORKAREA_SIZE_POLICY = { AUTO | MANUAL }
設(shè)為AUTO時(shí),內(nèi)存使用比較多的SQL操作,例如sort, group-by, hash-join, bitmap merge和bitmap create等,由Oracle自動(dòng)分配;設(shè)為MANUAL時(shí),這些操作將使用相應(yīng)的*_AREA_SIZE參數(shù)設(shè)置的內(nèi)存值。
*_AREA_SIZE作用于每個(gè)Session,分配的過(guò)小,很多Session可能沒(méi)有足夠的內(nèi)存而效率低下,分配過(guò)多,大量Session可能浪費(fèi)掉很多內(nèi)存空間,9i開(kāi)始的PGA自動(dòng)管理功能改善了這個(gè)狀況。使用PGA_AGGREGATE_TARGET設(shè)置整個(gè)PGA大小,Oracle將為每個(gè)Session按照實(shí)際需要為其分配PGA,并盡量維持PGA總量不超過(guò)PGA_AGGREGATE_TARGET值。
PGA_AGGREGATE_TARGET = integer [K | M | G]
ALTER SYSTEM
設(shè)定總的PGA內(nèi)存大小。Oracle將盡量保證PGA內(nèi)存總合不超過(guò)這個(gè)值,但不是絕對(duì)的,為了避免磁盤(pán)操作,有時(shí)可能會(huì)超過(guò)這個(gè)值。可以設(shè)置為總的內(nèi)存數(shù)減去SGA的剩余值。
將該初始化參數(shù)設(shè)置為大于0的值,Oracle自動(dòng)將WORKAREA_SIZE_POLICY設(shè)為AUTO;將該初始化參數(shù)設(shè)置為0,Oracle自動(dòng)將WORKAREA_SIZE_POLICY設(shè)為MANUAL。設(shè)置了PGA_AGGREGATE_TARGET之后,會(huì)忽略所有*_AREA_SIZE設(shè)置。
HASH_AREA_SIZE = Integer
ALTER SESSION
單位為字節(jié)數(shù)。
SORT_AREA_SIZE = Integer
ALTER SESSION, ALTER SYSTEM ... DEFERRED
單位為字節(jié)數(shù)。如果沒(méi)有設(shè)置SORT_AREA_RETAINED_SIZE,分配的內(nèi)存在排序結(jié)束,開(kāi)始返回記錄之前釋放,如果設(shè)置了SORT_AREA_RETAINED_SIZE,分配的內(nèi)存在最后一條記錄返回后釋放。位圖索引上的插入、更新也會(huì)用到SORT_AREA_SIZE(因?yàn)閽呙柰晁饕蟊仨殞?duì)各個(gè)位圖進(jìn)行排序,然后再合并成一個(gè)位圖)。
SORT_AREA_RETAINED_SIZE = Integer
ALTER SESSION, ALTER SYSTEM ... DEFERRED
單位為字節(jié)數(shù)。指在UGA中保留的排序內(nèi)存大小,排序操作結(jié)束,返回最后一條記錄之后釋放排序內(nèi)存,只是釋放給UGA,而不是操作系統(tǒng)。
BITMAP_MERGE_AREA_SIZE,CREATE_BITMAP_AREA_SIZE,位圖索引創(chuàng)建、更新時(shí)使用的內(nèi)存配置。
_pga_max_size: Maximum size of the PGA memory for one process。ALTER SYSTEM。默認(rèn)值200M。
查看_pga_max_size值的方法:
select ksppinm "Name", ksppstvl/1024/1024 ||'M' "Value", ksppdesc "Desc"
from x$ksppi x, x$ksppcv y
where x.indx = y.indx and ksppinm ='_pga_max_size';
_smm_max_size: Maximum work area size in auto mode (serial)。{ALTER SESSION | ALTER SYSTEM}。
網(wǎng)上有很多描述_smm_max_size默認(rèn)值的說(shuō)法,其實(shí)都不對(duì),追究其算法也沒(méi)多少意義,反正如果你沒(méi)有手動(dòng)設(shè)置過(guò)_smm_max_size的值,一旦設(shè)置_pga_max_size或者PGA_AGGREGATE_TARGET,Oracle就會(huì)自動(dòng)計(jì)算出_smm_max_size的值,如果手動(dòng)設(shè)置過(guò)_smm_max_size則不會(huì)變化,Oracle自動(dòng)計(jì)算出的_smm_max_size值,跟PGA_AGGREGATE_TARGET和_pga_max_size都有關(guān)系。查看_smm_max_size值的方法如下:
select ksppinm "Name", ksppstvl/1024 ||'M' "Value", ksppdesc "Desc"
from x$ksppi x, x$ksppcv y
where x.indx = y.indx and ksppinm ='_smm_max_size';
使用PGA_AGGREGATE_TARGET讓Oracle自動(dòng)分配PGA時(shí),為了防止單個(gè)Session占用過(guò)多內(nèi)存而導(dǎo)致整個(gè)服務(wù)器性能下降,這兩個(gè)隱藏參數(shù)控制了單個(gè)進(jìn)程的最大內(nèi)存使用量。
這兩個(gè)參數(shù)為隱藏參數(shù),Oracle官方不進(jìn)行技術(shù)支持,如果系統(tǒng)中存在大量的HASH JOIN、SORT等耗費(fèi)內(nèi)存的操作,可以考慮、測(cè)試這些參數(shù)對(duì)系統(tǒng)性能的影響,但注意其副作用。
沒(méi)有使用并行查詢(xún)時(shí),單個(gè)Session SQL工作區(qū)內(nèi)存使用最大值為min( 5%*PGA_AGGREGATE_TARGET , 50%*_pga_max_size , _smm_max_size)。
設(shè)置_pga_max_size: Alter System Set "_pga_max_size"=1024M。
設(shè)置_smm_max_size: Alter System Set "_smm_max_size"=307200,單位是K,只能以這種單位進(jìn)行設(shè)置,數(shù)字后面不能使用K、M、G這些單位字符了。
監(jiān)控、改善PGA設(shè)置
監(jiān)控PGA的視圖:v$sql_workarea_active、v$sql_workarea、v$sesstat、v$process、v$sysstat、v$sql_workarea_histogram等。
使用下面的視圖查看Oracle建議的評(píng)估設(shè)置:
Select pga_target_for_estimate/1024/1024 ||'M' "Estimate PGA Target"
?????? ,estd_pga_cache_hit_percentage "Cache Hit(%)"
?????? ,estd_extra_bytes_rw/1024/1024 ||'M' "Extra Read/Write"
?????? ,estd_overalloc_count "Over alloc count"
From v$pga_target_advice
選出的4個(gè)列中,Over alloc count指示Oracle SQL工作區(qū)內(nèi)存分配的三種情況:optimal完全可以在內(nèi)存中完成操作;onepass需要進(jìn)行一次磁盤(pán)交換;multipass需要進(jìn)行多次磁盤(pán)交換。第四列的值就是需要進(jìn)行磁盤(pán)交換的數(shù)量。
PGA_AGGREGATE_TARGET的值最好選擇: Over alloc count為0、Cache Hit(%)盡可能高、Extra Read/Write盡可能低的Estimate PGA Target值。
轉(zhuǎn)載于:https://www.cnblogs.com/RicCC/archive/2008/01/06/1027524.html
總結(jié)
以上是生活随笔為你收集整理的Oracle PGA参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 程序员入职后千万不要沾沾自喜,不注意这一
- 下一篇: 简单实现分行输出的javascript代