PGA内存作用和构成

来源:互联网 发布:hadoop大数据平台构建 编辑:程序博客网 时间:2024/04/28 05:24
这篇文章是参考甲骨论老相老师的教学视频
http://v.youku.com/v_show/id_XMzk2NjAxODQ4.html?f=17419200
所做的学习笔记.


1. 什么是PGA, PGA的作用
         PGA的全程是Program global area,  是Oracle数据库系统的进程(包括前台进程server process 和 后台进程各种daemon)的专用的内存空间,  每1个进程都配1个PGA, 不过实在我们说的PGA通常指的是server process的PGA.

        每1个server process的PGA都只能被这个server process访问. 



2. PGA的构成
       
1) Private SQL area
          2) Session Memory           #hold a session's variables (logon information) and other information related to the session

          3) SQL work Areas   #SQL 工作区

          我们知道server process 是为连接数据库和用户客户端的session服务的, 而session的作用是什么呢? 当然是执行用户客户端提交的sql语句啊. 所以PGA结构中最重要的就是第3点 SQL 工作区, 就是为了执行sql语句服务的内存空间. 而我们主要研究的就是这个sql 工作区.

          
          
3. SQL work Areas的构成
            那么sql工作区又由那些部分构成呢?

            实际上sql 工作区也可以分成几个部分,  其中主要的2部分就是:
             1) sort_area            #排序工作区
             2) hash_area           #哈希工作区
         

            
             3.1      sort area  
                          顾名思义,  Sort area就是用于排序的空间.
                          假如,clent想从具有10000条数据的表T1中执行两条select语句:
                          1. select * from T1
                          2. select * from T1 order by c1,c2
                           
                          由于这10000条数据很可能存放在多个buffer中的, 所以实际上server process不能一次过获得所有10000条数据行的,只会一条一条地获得数据行.

                          对于第一条语句来讲, server process中每获得一条数据行就会把这条数据行发给用户, 当中只不过会经过PGA一下, PGA在这个过程中意义不大.

                          而对于第一条语句来讲, PGA必须先将10000条数据排好序才能发给用户, 所以会将10000条数据缓存在PGA里的Sort Aare 里面进行排序. 最后返回给用户.

                          所以sort area是PGA其中1个重要的部分.

                          而对于sort area 有两个重要的参数.
                          它们是 sort_area_size ,  sort_area_retained_size
                         
                          3.1.1  sort_area_size
                                    顾名思义, sort_area_size 就是当前的sort area的大小了. 假如上述要排序的10000条数据总共占5MB空间,那么sort_area_size 就会扩容到5MB.

                          3.1.2  sort_area_retained_size
                                   这个是sort_area的保留空间大小, 当上面的5MB 的10000条数据排好序后, server process就会把数据传给用户, 那么sort area就会释放空间, 那么释放到什么大小呢? 就是由这参数设定的啦.

             3.2     Hash area 
                         首先,  Oralce数据库是1个关系数据库.
                         而什么是关系数据库呢?  就是表于表之间有关系啊.
                         绝大部分情况下, 我们不单只从1张表从取数据. 而是多表连接来去数据,  而多表连接中有一种连接是Hash连接, PGA的Hash are就是为表与表的hash连接服务的.

                         

                         生产中, 大部分sql语句都会涉及排序和哈希连接, 所以这两个pga的部分十分重要...
原创粉丝点击