2008年01月22日

[轉]ORACLE內存管理 之一 ORACLE PGA SGA

轉自: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 的限額.

Posted by my_work at 樂多Roodo! │22:49 │回應(0)引用(0)DB
樂多分類:網路/3C 共同主題:Oracle 工具:編輯本文
Ads by Roodo! 

引用URL

http://cgi.blog.roodo.com/trackback/5027023