Oracle/Tuning2009. 12. 24. 14:11

● Monitoring and Managing Memory

  ◎ SGA
     : 공유메모리 영역

       관련 파라미터의 분류



     ASMM (Automatic Shared Memory Management)
      SGA의 크기를 자동으로 조정해줌
      관련 파라미터 :
        SGA_TARGET (Auto-tuned Dynamic + Manually-tuned Dynamic + Manually-tuned Static{그림 참조))


      SGA_MAX_SIZE = 16G    : static

SQL> alter system set sga_max_size = 16g scope=spfile --> restartup


      SGA_TARGET   = 10G    : dynamic

SQL> alter system set sga_target=10G                 -- 증가시킬수 있는 최대값은 SGA_MAX_SIZE

     SGA_TARGET 변경에 따른 각 파라미터의 변경특성
     1. SGA_TARGET을 늘이거나 줄이면 auto-tuned dynamic만 늘거나 준다.
     2. manually tuned가 늘이거나 줄이면 auto-tuned dynamic이 영향을 받는다.
     3. auto-tuned dynamic중 각 파라미터의 크기를 줄이면 그 파라미터의 하한값만 변경되는 것.
     4. SGA_TARGET을 0으로 하면 ASMM이 off가 되고 각 파라미터 상태로 고정이 된다.
     

     MMAN (Memory Manager)
      이상적인 메모리의 분배를 위해 수분에 한번씩 메모리를 모니터링한다.

    ○ Database Buffer Cache
      - 데이터 블럭이 복사되는 메모리 영역.
      - 2k, 4k, 8k, 16k, 32k -> 잘 결정할 것
      - 집계를 주로 하는 프로그램의 경우는 데이터 블럭이 클수록 좋음.
      - 관련 파라미터 : DB_CACHE_SIZE
                      DB_KEEP_BUFFER_SIZE
                      DB_RECYCLE_BUFFER_SIZE
                      DB_BLOCK_SIZE(한번 정하면 못바꿈)
                      DB_CACHE_ADVICE

      - 자주쓰는 데이터 블럭의 데이터가 일부 영역에 caching되어 있다.
      - 저장되는 데이터와 사용하는 패턴에 따라 잘 결정해야함.
      - CR블럭 : 데이터베이스 블럭은 하나지만 읽기 일관성을 위해 존재하는 복사한 이미지
      - 블럭의 분류

        standard block


create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool default)
tablespace users5;
.......

db_cache_size  = 100m(캐쉬될 메모리의 크기)

create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool keep)
tablespace users5;
.........

db_keep_cache_size = 40m
(keep이란 메모리 영역의 한번에 캐쉬될 메모리의 크기. 정말 자주 사용되므로 메모리에 올려놓고 disk i/o를 줄임)

create table t22 (c1 number)
storage(INITIAL 10K NEXT 10K MINEXTENTS 3 MAXEXTENTS 10 PCTINCREASE 0 buffer_pool recycle)
tablespace users5;
..............

db_recycle_cache_size = 20m
(recycle이란 메모리 영역의 한번에 캐쉬될 메모리의 크기,
keep영역보다는 덜 사용되지만 default보다는 많이 사용되는 데이터에 사용)

default, keep, recycle의 의미는 그냥 a,b,c와 같은 의미이다. 특별한 취급이 없음.



        non standard block

db_4k_cache_size = 20m  -- 이 파라미터가 설정되어 있어야 아래의 테이블 스페이스가 생성됨.
create tablespace ts4k
datafile ~~~~~ size 100m blocksize 4k;
 -- 이 데이터 파일은 데이터 블럭이 4k로 이루어짐
create table t1 (...) tablespace ts4k;


      - LRU lists(Least Recently Used Lists)
        : 가장 최근에 사용된 버퍼 캐쉬의 주소부터 오랫동안 사용이 안된 버퍼캐쉬의 순서로 저장되어 있는 리스트
          서버 프로세서가 주로 사용.

      - Checkpoint queue
        : 가장 오래된 dirty buffer부터 차례대로 들어가 있음.
          DBWR가 내려써야 할 순서

    ○ Shared pool
      - Library Cache
        : 최근에 사용된 SQL, 파싱된 SQL이 저장됨
      - Data Dictionary Cache
        : 최근에 사용된 metadata가 저장됨

    ○ Large pool
      - UGA(User Globalization Area)
        : 세션데이터. Shared Server Process들이 사용하는 메모리 영역
      - RMAN이 백업과 복원, 복구시 사용.
      - 설정을 해줘야 공간할당이 됨.할당이 안될 경우에는 shared pool을 사용.
        -> 경합을 줄이기 위해서는 공간할당을 해주는 것이 좋음

    ○ Java pool
      - jvm이 내장되어 있음
      - java의 클래스, method등이 저장 가능.

  ◎ PGA
    ○ 서버프로세스가 독자적으로 사용하는 메모리 영역이지만 대량의 데이터를 정렬해야 하는 상황에서는 disk i/o가 발생하므로
      다른 서버 프로세스에 영향을 줄 수 있음.

    ○ PGA의 크기는 SGA의 크기와 비교해서 결정
      OLTP 환경 - SGA:PGA = 8:2
      OLAP 환경 - SGA:PGA = 5:5

    ○ 관련 파라미터 : 
      - PGA_AGGREGATE_TARGET : 자동관리, 총량제
                               PGA_AGGREGATE_TARGET = 4G이더라도 4G까지 제한을 두는 것은 아님.세션이 많아지면 늘어날 수도 있음.
      - *_AREA_SIZE          : 수동관리, 세션별 제한
        SORT_AREA_SIZE = 1M : 정렬시 사용할 수 있는 최대의 메모리가 1M
              읽기(3G) -> 정렬(1G*3) -> Merge(3G) : 정렬해야 하는 데이터가 3M일 경우.

    ○ 관련 statistics
      - v$pgastat의 cache hit percentage : 
               http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/memory.htm#i48203
      - v$sql_workarea_histogram
        : 빈도수를 나타내는 막대그래프
        

        Optimal -> 메모리 정렬
        Onepass -> 한번 disk i/o후 merge과정을 통한 return
        Multipass -> disk에서 sort run을 하고 이를 다시하여 merge하는 과정
                     sga의 크기를 줄여서라도 없애야 한다.
        ex) Data : 10G
            i/o slot : 256kb
            Moptimal : 약 11G
            Monepass : 약 76M

  ◎ 효율적인 메모리 사용 : 가이드라인

    ○ buffer cache hit ratio를 높이는 것이 좋다.
      but, hit ratio만으로는 정확한 진단이 어렵다.-> wait 지표를 봐야 한다.
      ex) 100만 블럭  A           99%(99%를 메모리에서, 1%는 디스크에서 읽음)
          100블럭    B            60%(60%를 메모리에서, 40%는 디스크에서 읽음)
    ○ memory advisor를 이용할 것.



기타 참고사항

- PGA의 크기 관련 파라미터 : PGA_AGGREGATE_TARGET 

- performance 관련 query
 select * from v$latch;
 select * from v$system_event;
 select * from v$event_name;

- v$sga_target_advice;

- MEMORY_TARGET (11g 파라미터)

- CGA (Call Globalization Area)

'Oracle > Tuning' 카테고리의 다른 글

[펌]SQL*TRACE와 TKPROF  (0) 2010.01.13
Statistics, Waits  (0) 2010.01.13
Tuning Overview  (0) 2010.01.12
Automatic Performance Management  (0) 2009.12.29
Dynamic Performance View의 이름 / 설명  (0) 2009.12.26
Posted by 자수성가한 부자