Oracle-OCP学习笔记:PGA

实际工作中,Oracle中有两个很重要:ServerProcess 和 PGA。

 

SGA:Shared Global area

 

PGA内存作用和构成 (Private Global Area)

一个server process占用一个PGA(内存空间)独占。

 

1.PGA作用

PGA存储与server process相关的一些会话,被单个serverprocess独占

2、PGA构成

1)private SQL area

 

2)Session Memory

 

(hold a session’s variables (logon information) and otherinformation related to the session.)

 

3)SQL Work Areas:   sql工作区(重点研究对象),server process执行sql语句时,需要这个一样由PGA提供的工作空间。

 

Sql工作区的组成部分:

WORKAREA_SIZE_POLICY

sort_area_size    #排序区域

sort_area_retained_size #释放空间的大小,也就是最低保留的空间大小

hash_area_size    #hash连接时用的空间

hash_join_enable  #

bitmap_merge_area_size #位图空间

create_bitmap_area_size 

open_cursors   #一个会话可以同时执行SQL语句的数量,一般配置200M

_pga_max_size   #每个会话可以分配PGA空间最大的容量

 

查看为每个ServerProcess分配空间的最大值:

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';

 

查看各区的大小:

SYS AS SYSDBA@ORCL>show parameter area;

NAME                   TYPE       VALUE

------------------------------------ --------------------------------------------------

bitmap_merge_area_size           integer        1048576

create_bitmap_area_size      integer        8388608

hash_area_size                integer        131072

sort_area_retained_size      integer        0

sort_area_size                integer        65536

workarea_size_policy          string         AUTO

 

PGA分配空间的方式:

手工分配:手动指定sort,hash,bitmap空间的大小,这个空间指为每个server process分配的空间。

如果sort_area_size分配小了,PGA中的排序就会利用磁盘进行排序,这个sql执行效率就会很低。

Server process执行的sql语句如果在磁盘中排序分三种情况:

1. 完全内存排序

2. 使用磁盘排序,但只使用一次

3. 使用磁盘排序,并使用多次,速度会变得非常慢

自动分配:

    自动分配时,PGA获取的空间是有限制的。

 

分配PGA空间大小参考:

PGA_AGGREGATE_TARGET

在OLTP系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。

OLTP:PGA_AGGREGATE_TARGET= (total_mem * 80%) * 20%

在DSS系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。

DSS:PGA_AGGREGATE_TARGET= (total_mem * 80%) * 50%

 

 

 

 

3、PGA管理方式

Dedicated Server、Shared Server

Dedicated Server:连接和server process是一一对应的关系,适用于一般使用,对数据库的连接数量有限制,每个连接的负载比较大。

Shared Server:通过调度进程来分配server process进程,来执行语句,适用于对数据库的连接数量非常大,但每个连接的负载比较小的情况。

 

    目前大都是用Dedicated Server.

如果是大型电商网站,访问很多,单个负载很小的话,就用Shared Server。

 

 

5、重要参数

6、重要视图

V$PGASTAT

SELECT * FROM V$PGASTAT;


查看PGA需要分配多大空间才合适:

方法一:

V$PGA_TARGET_ADVICE :

Select pga_target_for_estimate/1024/1024 ||'M'"Estimate PGA Target",estd_pga_cache_hit_percentage "CacheHit(%)",estd_extra_bytes_rw/1024/1024 ||'M' "ExtraRead/Write",estd_overalloc_count "Over alloc count" Fromv$pga_target_advice

 

select(p.PGA_TARGET_FOR_ESTIMATE)/1024/1024,p.ESTD_PGA_CACHE_HIT_PERCENTAGE fromv$pga_target_advice p where p.ESTD_PGA_CACHE_HIT_PERCENTAGE>95;

 

 

SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024)target_mb, ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,  ESTD_OVERALLOC_COUNT FROMv$pga_target_advice;

 

 

 

方法二:

查看为每个ServerProcess分配空间的最大值:

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';

 

 

通过系统状态值,查看是否有磁盘排序的情况发生:

V$SYSSTAT 、V$SESSTAT 

select * from V$SYSSTAT where name like '%sort%';

 

查看当前会话使用的情况:

select name,value from v$statname a,v$mystat b wherea.statistic#=b.statistic# and a.name like '%pga%';

 

 

V$SQL_WORKAREA

V$SQL_WORKAREA_ACTIVE

 

查看数据库总的连接数:

V$PROCESS

selectspid,program,pga_max_mem,pga_alloc_mem,pga_used_mem,pga_freeable_mem fromv$process where PROGRAM like '%ORCL%'

  

 

--查看PGA各个区域使用情况

selectp.PROGRAM,p.SPID,pm.CATEGORY,pm.ALLOCATED,pm.USED,pm.MAX_ALLOCATED fromv$process p,v$process_memory pm where p.PID=pm.PID and p.SPID in (select spidfrom v$process where addr in

(select paddr from v$sessionwhere sid in

(select distinct sid fromv$mystat )

));

分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS