是每个会话都有一个私有的SGA吗?

解决方案 »

  1.   

    sga只有一个,你说的是pga,每个私有会话都会有一个私有的pga的
      

  2.   

    可是数据库资源里有一个叫“会话所使用的SGA空间限制(Private SQL Areas)”,这个是共享池中的私有SQL区吗?
      

  3.   

    shared pool里面的是共享sql区,pga里面有私有sql区。
    http://log-cd.iteye.com/blog/562052
      

  4.   

    共享池里面也有私有SQL区,存放用户的私有变量。
      

  5.   

    是每个会话都有一个私有的SGA吗?
    为什么会问这个问题呢,是这样的:
    我用同一个用户登录了两次,产生了两个会话,A会话修改了某表数据但未提交,B会话查询该表,结果B会话查到的是旧值。既使B会话从回滚段中读到了旧值,也是要读到内存中的数据库高速缓冲区中的,说明A会话的数据库高速缓冲区与B会话的数据库高速缓冲区不同,所以问是不是每个会话都有自己私有的SGA?
      

  6.   

    会话公用的是sga,私有的是pga
      

  7.   

    楼主可以参考,下面的博文,了解oracle内存结构:
    http://blog.csdn.net/flighting_sky/article/details/8885256在非共享服务器模式下,每个会话都会分配PGA内存空间,PGA中有private SQL Area来存放会话变量和绑定变量。SGA是所有会话所共享的,当然包括高速缓冲区和日志缓冲区;在共享服务器模式下,SGA中的shared pool会有private SQL Area;
      

  8.   

    记得书上说在共享池的库缓冲区中一块是共享SQL区,一块是私有SQL区。共享SQL区存放共享的SQL语句,私有SQL区存放会话的私有变量。而PGA是存放服务器进程的吧?
      

  9.   

    明白了:
    Private SQL area在什么内存模块分配,取决于连接的会话是什么类型,如果是dedicated server,那么private SQL area在server process’PGA。如果是shared server,那么private SQL area在SGA里分配。
      

  10.   

    而我还是没明白,不是SGA中的数据库高速缓冲区是用户执行select和insert,update,delete时所直接使用的、存放查询结果和修改数据的内存吗?现在是会话的私有SQL区好像是这个作用了?糊涂了
      

  11.   

    SGA中的高速缓冲区里面存放的是从物理文件中读取进来的oracle数据块,PGA中的private SQL Area里面放的是会话变量。
      

  12.   

    每个会话都会读的,应该是每个会话都有自己的私有缓存区吧,是把SGA中的高速缓冲区分了呢,还是用PGA中的private SQL Area?
      

  13.   

    sga系统全局区,主要有共享池、数据缓冲池、日志缓冲池组成;
    pga程序全局区,主要用来用户(会话)提供内存
      

  14.   

    PGA      .....