PGA包括用于存储服务器进程临时变量等内容的工作内存区,存储服务器进程正在执行的SQL信息的内存,以及作为SQL执行一部分的排序记录所占用的内存。用于保存变量的PGA工作内存区最初的大小被称为栈空间,由于它是基于数据库服务器正在使用的操作系统预先确定的,因此不能直接控制。而PGA中的其他部分则都能控制,下面分别加以描述。
当服务器进程为某个用户执行SQL语句时,它可以跟踪相关SQL语句特定会话的信息以及某些过程的执行情况,这些信息存储在PGA中的私有SQL区中,这些过程又被称作游标(cursor)。请不要将它与共享内存池中的共享SQL区混淆。共享SQL区包含SQL语句相关的可共享的详细信息,例如优化规划等。我们在第4章对优化器和优化规划进行了讨论。
私有SQL区包含会话中SQL语句执行的特定信息,例如,到目前为止获取的行数等信息。一旦SQL语句被处理,它的私有SQL区可以被其他SQL语句重用。如果应用程序对那些私有SQL区已经被重用的SQL语句重新发起执行请求,那么它的私有SQL区必须重新初始化。
一旦SQL语句被处理,它的私有SQL区可以被其他SQL语句重用
这句怎样理解,是私有SQL区被清空再填充内容 还是被其他SQL语句重复利用原来的内容
请教各位

解决方案 »

  1.   

    这里面存在最近最先使用的优先算法的,最近最后一次被处理的sql语句放在堆栈最顶端,越近刚使用越有机会被重用,越久没有机会被重用的越有可能被淘汰;
    因为oracle的进程管理接到一条sql语句时,首先分析它在高速缓存里面是否存在,如果存在就不用分析而直接取调整缓存里取高速缓存里的sql语句,如果不存在那么就要做语句分析然后才能执行;
    做sql语句分析是需要开销服务器时间的;
      

  2.   

    首先,私有sql区域有有两个特别,1.永久区域, 用于保存绑定变量信息,2.运行区域,也就是执行结束时就结束了.
    私有sql区域的释放是与你使用的工具相关的,当然也与open_cursor参数的设置有关系,当游标关闭时,private sql area也就会被释放了, 而这种释放也就是清空了.
      

  3.   

    所有提交了相同SQL语句的用户都有各自的私有SQL区,并且他们共享一个共享SQL区。
      

  4.   

    大家没有理解我的意思啊在同一个会话里,一旦SQL语句被处理,它的私有SQL区可以被其他SQL语句重用,这里的重用是重复利用原来的内容,是这样理解吗
      

  5.   

    重用cursor,只要cursor没有被释放掉.
      

  6.   


    PGA是占用的内存块,私有SQL区也是内存块,红色标识字的意思就是PGA中私有SQL区的sql被处理完后,这部分sql所占据的内存块就被回收,然后被分配给别的请求SQL。
      

  7.   

    楼主的想法在于PGA中的SQL已经被解析,其他连线的相同SQL是否可以重用已经被解析的SQL执行计划等。这个如果有疑问可以通过实验来验证。对于PGA中中文字的表达,其要点在于PGA中SQL区域的内存区域可以被其他用户使用,而不是被独占。谢谢!