• UGA与PGA


    PGA是用户进程区域,这是一个私有的进程区域,这个区域里面包含了与某个特定服务器进程相关的控制信息和数据,对于每一个服务器进程来讲都有一个与之对应的PGA内存区域,这个区域之所以说是私有的是因为进程和进程之间并不会共享同一个PGA区,因此我们在PGA中就看不到有类似于latch的低级串行锁。PGA中包含两个区域一个是fixed pga,其中包含了一些PGA的结构信息,最主要的是他保留了一个指针,指向了PGA中的第二个区域variable PGA,这里面包含的是一些永久性的内存,对于dedicated server模式的进程来讲对于其中的每一个sessionUGA就包含在variable PGA区域中,反过来对于shared server模式的进程,UGA就会包含在SGA中,也就是我们通常所说的Large pool中。那么UGA他的结构基本类似于PGA也分为fixedvariable两个区域,其中主要保存了session用户的登陆信息,以及比较重要的private sql area.


            private sql area
    对于UGA来讲是很重要的一个针对session级别的个区域,其大小取决于SQL语句的复杂程度,其中也包含两个区域,分别是:存放bind var以及数据类型等游标信息的永久内存区域,以及处理SQL语句过程中(包括Sort,hash_join等操作)所创建的运行时区域,其中永久内存区域直到cursor关闭情况下才会被释放,而运行时区域会在sql语句执行结束后就被释放,其中就管理PGA来说,主要就是针对UGA中这个private sql area来进行管理. Oracle为执行sql的每一个session分配一个private sql area,这个区域还存储了一个很重要的地址信息用来指向存储在library cache中的shared sql area,里面保存了SQl的执行计划。Oracle建议程序开发过程中尽量多使用bind variable目的就是为了降低hard parse,直接意思的理解就是让我们尽量重用library cache中的SQL执行计划,这样就可以降低share pool latchlibrary cache latch等闩的竞争。其中bind variable从那里来呢?上面其实已经提到了就是在private sql area中的永久内存区域存在,这个区域只有在游标关闭的状态下才被释放。这里最后要了解的是,永久内存或者是运行时内存的释放并不是将内存反还给OS,而是反还给了UGA.

  • 相关阅读:
    ssh时传递环境变量
    linux删除文件后磁盘空间未释放的问题
    gitlab-ci配置疑难备忘
    javac老提示无效的标记
    unity5.6里Baked Lighting下面几个Lighting Mode的解释
    屌爆的xamarin,一人单挑google/apple/windows
    xamarin.droid自己的示例工程有些都装不上模拟器,是因为它的architectures选项没设对
    使用NFC读卡器ACR122u读取银行卡信息
    【转】Gnirehtet – 为 Android 设备提供反向网络连接[Windows、macOS、Linux]
    【转】1分钟学会U盘启动安装Linux系统
  • 原文地址:https://www.cnblogs.com/liaomin416100569/p/9332140.html
Copyright © 2020-2023  润新知