ORACLE PGA introduction

理解PGA

PGA(program grlobal area or process global area)指服务进程的私有内存空间,包括服务进程全局变量,数据结构和控制信息,如服务进程SQL查询的游标,PGA包括以下结构:

私有SQL区域:

存储服务进程执行SQL所需要的私有数据和控制结构,包括固定区域和运行区域(runtimearea)。固定区域数据在SQL游标关闭之前一直存在,运行区域在SQL执行时存在(如INSERT、DELETE及UPDATE执行完成后释放运行区域,SELECT语句只有所有查询结果集获取完成或取消才释放运行区域)。对于独立模式链接,私有SQL区域在PGA中分配,而共享模式链接私有SQL区域在SGA中分配。

会话空间:

保存用户logon信息等会话控制信息。对于共享模式,会话信息是共享的。

SQL工作区(SQL workarea):

对于复杂SQL,需要进行多表查询,可能会需要额外区域如:

排序操作

HASH JION

位图链接

创建位图

多表HASH链接

……

在oracle server中PGA的空间是独立于SGA的,PGA中的SQL工作区域对数据库的性能有很大影响,配置合理的PGA对于调整系统性能有很大的帮助。

PGA是独立于SGA的内存空间,主要用来执行SQL、表连接、排序等操作,一般根据系统配置和应用软件的不同,可以把物理内存的15%——30%用于PGA空间。

排序区操作需要分配内存空间,这部分内存空间称为sort_area。在使用pga自动管理的系统中sort_area被自动管理,否则,由sort_areaZ_size参数分配限定每个会话的使用sort_area的最大值。

通过v$sort_segment可以查看临时表空间排序段的使用空间。

 
SQL> selecttablespace_name, extent_size, total_extents, used_extents, free_extents,max_used_size
  2  from v$sort_segment;
 
TABLESPACE_NAME                 EXTENT_SIZE TOTAL_EXTENTSUSED_EXTENTS FREE_EXTENTS MAX_USED_SIZE
------------------------------------------ ------------- ------------ ------------ -------------
TEMP                                    128            58            0          58             9

查看某个数据库用户当前使用了多少临时段空间,可以通过查看v$sort_usage和v$session实现:

SQL>select s.username, u.tablespace, u.contents, u.extents, u.blocks    
  2   from v$session s, v$sort_usage u
  3   where s.saddr = u.session_addr;
 
 
PGA  PGA_AGGREGATE_TARGET

PGA  PGA_AGGREGATE_TARGET

SQL>show parameters pga
 
NAME                                 TYPE        VALUE
----------------------------------------------- ------------------------------
pga_aggregate_target                 big integer 800M
PGA能够使用的最大空间
SQL>show parameters workarea_size
 
NAME                                 TYPE        VALUE
----------------------------------------------- ------------------------------
workarea_size_policy                 string     AUTO
分配SQL工作区的规则, AUTO或MANNUAL
SQL>show parameters sort_area_size
 
NAME                                 TYPE        VALUE
----------------------------------------------- ------------------------------
sort_area_size                       integer     65536
定义每个会话SQL排序区的最大值
SQL>show parameters hash_area_size
 
NAME                                 TYPE        VALUE
----------------------------------------------- ------------------------------
hash_area_size                       integer     131072
定义每个会话hash连接的内存空间最大值
SQL>show parameters bitmap_merge_area_size
 
NAME                                 TYPE        VALUE
----------------------------------------------- ------------------------------
bitmap_merge_area_size               integer     1048576
定义每个会话使用位图合并连接时的内存工作区域的最大值
SQL>show parameters create_bitmap_area_size
 
NAME                                 TYPE        VALUE
----------------------------------------------- ------------------------------
create_bitmap_area_size              integer     8388608
定义每个会话创建位图时可以使用的内存工作区域的最大值

如果workarea_size_policy设置为AUTO就不需要为*_area_size设置值,PGA自动管理为自动为各个工作区分配内存大小。Oracle10g之后,共享模式连接也可以设置workarea_size_policy自动管理。

通过v$sgastat可以得到一些调整PGA_AGGREGATGE_TARGET参数的参考资料

SQL>select * from v$pgastat;
 
NAME                                                                 VALUE UNIT
-------------------------------------------------------------------------- ------------
aggregate PGA targetparameter                                   838860800 bytes
aggregate PGA autotarget                                        531348480 bytes
global memory bound                                              104857600 bytes
total PGA inuse                                                  248585216 bytes
total PGA allocated                                              319751168 bytes
maximum PGA allocated                                            481471488 bytes
total freeable PGAmemory                                         45678592 bytes
process count                                                           67
max processes count                                                     96
PGA memory freed back toOS                                     3.1422E+11 bytes
total PGA used for autoworkareas                                         0 bytes
 
NAME                                                                 VALUE UNIT
-------------------------------------------------------------------------- ------------
maximum PGA used for autoworkareas                                56870912 bytes
total PGA used for manualworkareas                                      0 bytes
maximum PGA used for manualworkareas                               542720 bytes
over allocation count                                                    0
bytes processed                                                 3.6840E+11 bytes
extra bytes read/written                                                 0 bytes
cache hit percentage                                                   100 percent
recompute count (total)                                            2761548
 
19 rows selected.

AggregatePGA auto target 可调整的pga空间,只有这部分空间可以被oracle自动调整功能使用,并用于各种SQL工作区域,这部分空间应该占PGA_AGGREGATE_TARGET中的最大比重,如果太小,可能会引起性能问题。

TotalPGA used for auto workarea

系统使用的可调整PGA空间,maxmum PGA used for auto workarea显示系统启动后使用可调整PGA的最大值

TotalPGA in used:

目前PGA空间的使用情况,这个值和v$process中的PGA_USED_MEM相同

Cachehit percentage: 这个值在oracle9i后出现,它显示PGA的性能。如果值是100%说明PGA的空间是够用的。

当PGA空间不足时,oracle需要使用外部辅助空间,结合one-pass或multi-pass模式来完成操作,此时系统的性能将受到影响,该值得计算公式为:

PGACACHE HIT RATIO=total byte processed * 100 / (total bytes processed + totalextra bytes read/written)

使用v$sql_workarea_histogram视图可以查看系统中PGA的详细使用情况,该视图中列出了

通过v$sal_workarea_active视图,可以查看当前活跃的PGA工作区

未完待续……

时间: 2024-12-12 02:48:55

ORACLE PGA introduction的相关文章

Oracle PGA作用_work_mode

Oracle PGA作用 (2013-03-25 14:23:37)专有模式下ORACLE会给每个连接分配一个服务进程(Server Process),这个服务进程将为这个连接服务.为这个服务进程分配的内存叫做PGA.PGA不需要Latch也不需要Lock,永远不会发生竞争. PGA组成中主要包括两部分:Session Area和Private SQL Area.Session Area包括会话跟踪信息,使用alter session命令修改的环境参数.打开的DB Links.会话特有的角色等.

Oracle PGA

PGA:他也是一块内存区.可是和SGA不同,他不是共享的.而是私有的.用户对数据库发起的不管是查询还是更新的不论什么操作,都是在PGA先预处理.然后接下来才进入instance区域,由SGA 和一系列后台进程共同完毕用户发起的请求. PGA作用: 1,保存用户的连接信息 2,保存用户的权限信息 3,为排序提供内存支持

Oracle内存结构:SGA PGA UGA

内存结构是oracle数据库最重要的组成部分之一,在数据库中的操作或多或少都会依赖到内存,是影响数据库性能的重要因素Oracle数据库中包括3个基本的内存结构: 一. 系统全局区  (System Global Area, SGA): SGA是一组共享内存结构, 被所有的服务和后台进程所共享.当数据库实例启动时,系统全局区内存被自动分配.当数据库实例关闭时,SGA内存被回收. SGA是占用内存最大的一个区域,同时也是影响数据库性能的重要因素. 查询SGA区的情况: SQL> show SGA T

Oracle Table连接方式分析

Oracle Table连接方式分析 表连接基本知识: 1.哪张表将驱动查询(即访问的第一张表)?按照指定的路径查询,何时将访问到没一张表?可选的驱动路径有哪些? 2.可能出现哪些Oracle连接?记住:在Oracle中,连接顺序.可选的索引.用于排序和建立散列表的可用内存的不同都会导致不同的结果. 3.哪些索引是可用的?哪些索引是可选的?索引的选择不仅仅将导致优化器使用或者限制一个索引,还将改变驱动查询的方式,并可能决定使用或者限制查询中其他的索引. 4.哪些提示提供了可选的路径?哪些提示限制

Quick and Easy Installation of Oracle Database 12c on Oracle Linux in Oracle VM VirtualBox

发贴人 Sergio-Oracle 于2018-4-18 23:10:15在Oracle Linux Introduction How Does This Work? Requirements Before You Get Started Steps Clone the vagrant-boxes repository from GitHub Download Oracle Database Installation Files Place the downloaded Database ins

mariadb 10.1查看per connection内存消耗

在mariadb 10.1版本中,在information_schema.processlist表中,新增了几个字段,其中有一个memory_used,其记录的是连接的内存消耗. 同时新增了一个状态变量memory_used,其记录的应该是所有连接加起来消耗的内存(官方并没有特别详细地解释https://mariadb.com/kb/en/mariadb/show-processlist/),应该类似于oracle pga的概念. 为了再检查下mysql占用内存远超过buffer pool的原因

SHMMAX

SHMMAX Available physical memory Defines the maximum allowable size of one shared memory segment.The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory

Oracle8i Internal Services

http://d.hatena.ne.jp/yohei-a/20091017/1255791152 第1回 Oracle8i Internal Services 1人読書会 Oracle 読んだところ Introduction The Oracle Kernel Layers The Kernel Services 書かれていること この本の2章以降を理解するために必要なこと. それは「Oracle の中心部 (Kernel) の階層構造 (layers)」. 要約 Oracle の中心部は階層

Oracle实例内存(SGA和PGA)调整

一.名词解释 (1)SGA:System Global Area是Oracle Instance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区. (2)共享池:Shared Pool用于缓存最近被执行的SQL语句和最近被使用的数据定义,主要包括:Library cache(共享SQL区)和Data dictionary cache(数据字典缓冲区).  共享SQL区是存放用户SQL命令的区域,数据字典缓冲区存放数据库运行的动态信息. (3)缓冲