ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ORACLE内存管理

ORACLE内存管理

原创 Linux操作系统 作者:kkaaron 时间:2010-04-25 17:37:27 0 删除 编辑
转自:http://sunmoonking.spaces.live.com/blog/cns!E3BD9CBED01777CA!509.entry
 
MEM主要由两部分组成
SGA, System Global Area---可以被所以PROCESS访问。
PGA, Process Global Area—单个PROCESS(thread)私有。
UGA会包括在其中之一里
UGA, User Global Area—SESSION私有,shared server的时候在SGA,dedicated server的时候在PGA
首先先看看PGA
           WORKAREA_SIZE_POLICY指的就是PGA的管理,PGA的管理分手工和自动(PGA里非UGA的部分,比如 sorting,hashing),以下参数在手工管理时用到SORT_AREA_SIZE,SORT_AREA_RETAINED_SIZE,sort 结束后保留的大小,比如           SORT_AREA_SIZE是1M, SORT_AREA_RETAINED_SIZE是512K,则一个大的SORT可能用完1M,SORT 完后超过512K的会交换到TEMP SEGMENT里.
HASH_AREA_SIZE server process用来在内存里存hash table的大小.
            大致来看,如果workarea_size_policy=manual那么pga_aggregate_target将会不被使用,而是使用响应的 sort_area_size,hash_area_size等参数.;如果workarea_size_policy=auto的话那么就会使用 pga_aggregate_target而不使用其他的sort_area_size,hash_area_size等参数.
if ( 数据库版本 >= 10gR1 )
then
   if (workarea_size_policy=auto)
   then
       sort area size 无效
   else
       sort area size 有效
   end if
else -- 数据库版本 < 10gr1
   if ( shared server 连接方式 )
   then
       sort area size 有效
   else -- dedicated server连接方式
       if (workarea_size_policy=auto)
       then
           sort area size 无效
       else
           sort area size有效
       end if
    end if
end if
用sort_area_size 512K,1M,1G来看手工与自动管理时的异同,以下是自动管理
SQL> create table wwm as select * from all_objects;
 
SQL> alter session set sort_area_size=524288;
           session xxx memory表示现在这个时刻用了多少,session xxx memory max   表示最高峰时用了多少
SQL> set autotrace traceonly statistics;
SQL> select * from wwm order by 1,2,3,4
---------------------------------------------------------
          0  recursive calls
          0  db block gets
        420  consistent gets
          0  physical reads
          0  redo size
    2178018  bytes sent via SQL*Net to client
      22768  bytes received via SQL*Net from client
       2038  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
      30547  rows processed
 
SQL> alter session set sort_area_size=1048576;           同上
SQL> alter session set sort_area_size=1048576000;    同上
自动管理时sort_area_size不起作用.
 
改成手工管理后
SQL> alter session set workarea_size_policy=manual;
SQL> alter session set sort_area_size = 65536;                   --64K
 
SQL>  set autotrace traceonly statistics;
SQL> select * from wwm order by 1,2,3,4
----------------------------------------------------------
          0  recursive calls
         22  db block gets
        420  consistent gets
        513  physical reads
          0  redo size
    2178018  bytes sent via SQL*Net to client
      22768  bytes received via SQL*Net from client
       2038  SQL*Net roundtrips to/from client
          0  sorts (memory)
          1  sorts (disk)
      30547  rows processed
 
============退出,重进
SQL> alter session set sort_area_size=1048576;
SQL> set autotrace traceonly statistics;
SQL> select * from wwm order by 1,2,3,4;
----------------------------------------------------------
          0  recursive calls
          4  db block gets
        420  consistent gets
        424  physical reads
          0  redo size
    2178018  bytes sent via SQL*Net to client
      22768  bytes received via SQL*Net from client
       2038  SQL*Net roundtrips to/from client
          0  sorts (memory)
          1  sorts (disk)
      30547  rows processed
           还有排序操作在DISK上
SQL> set autotrace off
==============退出,重进
SQL> alter session set sort_area_size=1048576000;
SQL> set autotrace traceonly statistics;
SQL> select * from wwm order by 1,2,3,4;
----------------------------------------------------------
          0  recursive calls
          0  db block gets
        420  consistent gets
          0  physical reads
          0  redo size
    2178018  bytes sent via SQL*Net to client
      22768  bytes received via SQL*Net from client
       2038  SQL*Net roundtrips to/from client
          1  sorts (memory)
          0  sorts (disk)
      30547  rows processed
 
           以上分别用64K,1M,1G来测试,分配1G并不代表就要切实分配1G的MEM出去。而是说你有权利用到1G,相反,设置64K并不代表你的session只能用64k,一个SQL可能有多个SORT,指的是每个SORT 的限额. 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23190213/viewspace-660691/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 数据库链接
下一篇: SGA优化
请登录后发表评论 登录
全部评论

注册时间:2010-04-23

  • 博文量
    14
  • 访问量
    11110