PGA结构

news/2025/2/27 11:05:29

当客户端向服务器发送连接请求,服务器监听到客户端的请求,在专用服务器模式下,会在服务器端衍生一个server process来代理客户的请求,server process进而向实例发起连接,创建会话,而PGA就为server process所分配和使用。

PGA,这P,或译之程序,或翻为私有,角度不同而已,通常,我们称之”程序全局区“。它的创建时期:

1)server process启动或创建时分配,原因?无他,唯PGA和server process是”一根绳上的两个蚂蚱“。相濡以沫,患难一共。
  2)系统运行时,sort、hash join等操作也可能需要进一步的PGA分配

wpsEF8A.tmp

PGA为server process排他访问,故不存在latch争用。它包含了server process的数据和控制信息。通过C语言的运行时调用malloc()在本地分配,可动态扩缩。PGA是私有的而不是共享的,这个机制是有必要的,因为当进程死掉后可以把这些资源清除和释放掉.

oracle的应用程序或者用户的应用程序在执行时,都可能显示或者隐式地打开cursor,打开cursor就需要分配sql area,私有sql区在cursor打开时分配,关闭时释放,实际上,数据库的主要活动就是cursor的活动,简单说来,用户进程的任务执行和cursor的使用是PGA的主要消耗者。

用户体验最敏感的贡献就在于PGA。用户所发出的请求,执行时,是在pga中执行。若在pga中命中,则无须软解析或者硬解析,此时称为软软解析。pga中的游标指向buffer cache中的数据行。返回时,是一批批,而非一条条。

PGA可分固定PGA和可变PGA。可变PGA是一个内存堆,PGA的可变区实际上是我们最为关注的PGA部分。通过x$ksmpp可以查询可变PGA的分配和使用情况。它主要由:
  a)会话内存:用于存放会话的登录信息以及其他相关信息
  b)私有sql区
    b1)永久区域:含绑定变量,这部分内存只有在cursor关闭时才会被释放
    b2)sql work area:含sort区、hash区等,对于DML事务,sql执行完毕就释放该区域;对于select则是记录返回后或者查询取消时释放

wpsEF8B.tmp

c)游标和sql区域:这里的游标是一块内存,不是我们常指的“指针”

私有sql区的sql工作区太小会造成磁盘I/O,为均衡执行sql所需的内存与实际空间的分配,不得不将作业转换到临时表空间,因此,oracle将所得的sql工作区按大小分:
  a)optimal size:sql工作区完全可以满足执行sql所需的内存
  b)one-pass size:与临时表空间进行一次I/O
  c)multi-pass size:与临时表空间进行多次I/O
   当workload不大时,oracle倾向于为每个用户会话分配optimal size sql工作区.

UGA就是你的会话状态。你的会话总能访问这部分内存。UGA的位置取决你如何连接oracle。如果是专用服务器连接,UGA在PGA中创建;如果是共享服务器连接,UGA则在SGA中创建。所以,PGA包含进程内存,还可能包含UGA。


http://www.niftyadmin.cn/n/4611434.html

相关文章

【干货】大数据在工业4.0演进中的价值

演讲实录: 今天非常高兴跟大家来分享工业4.0研究院对工业大数据的认识。具体来讲,我们将讨论工业4.0演进过程中,大数据将呈现什么价值,我们将从商业模式的设计来认识工业大数据的潜力。 在正式开始前,我先解释一下工业…

jQuery 树型菜单插件(Treeview)

jQuery Treeview 提供了一个无序灵活的可折叠的树形菜单。试用于一些菜单的导航,支持基于 cookie 的持久性菜单转载于:https://www.cnblogs.com/qq3111901846/p/6670036.html

vscode vue格式化不换行

一直以来VS code----vue的代码格式化都差强人意&#xff0c;html会自动展开&#xff0c;真的很难受&#xff0c;类似这样子 <template><div id"energy"><divclass"line-chart-div":style"{width: innerWidth / 4.5 px,height: inner…

安卓全屏-沉浸式

在开发时想要像游戏那样全屏怎么办&#xff1f; 只需要在onCreate方法执行下列代码即可 setContentView(R.layout.activity_main);// 隐藏状态栏和标题this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//…

使用SpringMVC @Async异步执行方法的笔记 (转载)

原文&#xff1a;http://blog.csdn.net/yuwenruli/article/details/8514393 测试代码&#xff1a; RunWith(SpringJUnit4ClassRunner.class)</p>ContextConfiguration(locations { "/spring/*.xml" }) public class JobUtilsTest{ Autowired private DaoS…

安卓读写文件

在manifests里面加权限 <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE"/>申请权限 super.onCreate(savedInstanceState); // 申请权…

RHEL6.4下搭建apache和subversion(SVN)

1、说明rhel6.4系统下搭建apachesvn2、实现1&#xff09;在服务器上安装配置SVN服务&#xff1b;2&#xff09;SVN服务支持svnserve独立服务模式访问&#xff1b;3&#xff09;SVN服务支持Apache的http模式访问。3、安装svn服务器[rootreedoracle ~]# yum install -y subversio…

centos7和centos6的区别【转】

最近发的文章&#xff0c;有人咨询我&#xff0c;说为啥不用centos7&#xff0c;而用centos6&#xff0c;这个跟个人习惯和生产环境元素决定的。centos7和6变化的就很大的。我收集了一些区别&#xff0c;给大家看看。 注意&#xff1a;生产环境推荐centos6.个人学习尝鲜可以7. …