2013년 8월 5일 월요일

[오라클교육자바교육,오엔제이프로그래밍]Oracle Dynamic SGA & Advisory

Dynamic SGA & Buffer Cache Advisory 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 
 www.onjprogramming.co.kr  



Oracle 9i 이전에는 SGA의 경우 인스턴스 시작 시 할당 받고 인스턴스 종료 시 반환하는 구조를 가졌습니다. 물론 운영 중에 SGA에 대한 변경은 불가능 했습니다. 9i에서 새로 소개돤 Dynamic SGA로 인해 인스턴스의 중단 없이 SGA에 대한 변경이 가능하게 되었습니다.

 이것을 가능하게 하는 매개변수는 SGA_MAX_SIZE 이며 만약 이 값이 지정되지 않으면 DB_CACHE_SIZE, SHARE_POOL_SIZE등의 매개변수 값에 따라 지정된 만큼 정의 되어 집니다. Dynamic하게 메모리를 할당 하는 단위는 그래뉼(Granule)이며 Allocation, Deallocation  정보는 v$buffer_pool에서 확인 가능 합니다.

아래의 예를 ㅡ볼까요

C:\Documents and Settings\이종철>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 수 Dec 22 00:54:46 2004

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn / as sysdba
연결되었습니다.

SQL> show sga

Total System Global Area  93395628 bytes
Fixed Size                  453292 bytes
Variable Size              67108864 bytes
Database Buffers          25165824 bytes
Redo Buffers                667648 bytes

SQL> alter system set shared_pool_size = 2000000;

시스템이 변경되었습니다.

SQL> alter system set db_cache_size = 10000000;

시스템이 변경되었습니다.

SQL> show sga

Total System Global Area  93395628 bytes
Fixed Size                  453292 bytes
Variable Size              79691776 bytes
Database Buffers          12582912 bytes
Redo Buffers                667648 bytes


 동적으로 크기를 바꿀 수 있는 요소는 Shared_Pool_Size, Large_Pool, DB_Buffer_Cache의 세가지 인데 이 Dynamic SGA 기능을 이용하여 여러 공간을 조절하는 것은 정확한 판단에 의해 이루어 져야 합니다. 이때 사용자가 참조 할 수 있는 통계 정보의 생성을 위해 Oracle 9i에서는 Dynamic SGA와 같이 Buffer Cache Advisory 기능을 제공 합니다.

ON : Advisory 기능이 enable 되고 CPU나 Memory 오버헤드 발생
OFF : Advisory 기능이 disable 되고 CPU나 Memory 오버헤드 없슴
READY : Advisory 기능이 disable 되나 Shared Pool의 메모리는 할당

또한 DB_CACHE_ADVISORY 기능이 활성화 되어 있는 내용을 확인 하기 위해서는 v$db_cache_advice의 advice_status column을 참조 합니다.

V$db_cache_advice를 이용하여 DB CACHE SIZE증가에 따른 Physical Reads에 대한 변화 정보를 얻을 수 있습니다. 예를 들어 DB Buffer Cache가 2배 증가 시 예측된 Physical Reads 값으로 인해 BUFFER CACHE HIT ratio에 대한 예측이 되므로 Dynamic 하게 DB BUFFER CACHE 크기를 정하는데 유용한 정보가 될 수 있습니다.

V$DB_CACHE_ADVICE View의 컬럼은 다음과 같습니다.

ID : Buffer Cache의 id (1 ~8)
Name : Buffer Cache의 이름
Block Size : 현재 Buffer Cache의 블록 크기
Advice_status : Buffer Cache Advisory 기능의 상태(ON,OFF,READY)
Size_for_estimate : Simulation에 사용 한 버퍼 캐시의 크기(단위 : KB)
Buffers_for_estimate : Simulation에 사용 한 Buffer Cache의 블록의 개수
Estd_physical_read_factor : (물리적 읽기 예상# / Buffer Cache 읽기#)
Estd_physical_reads : 물리적 읽기 예상치


SQL> select size_for_estimate          "Cache Size(M)",
  2        buffers_for_estimate      "BUFFERS",
  3        estd_physical_read_factor "Estd Phy Read Factor",
  4        estd_physical_reads        "Estd Phy Read"
  5  from v$db_cache_advice
  6  where name = 'DEFAULT'
  7  and  advice_status = 'ON';

Cache Size(M)    BUFFERS Estd Phy Read Factor Estd Phy Read
------------- ---------- -------------------- -------------
            4        500              1.1573        335925
            8      1000              1.1548        335192
          12      1500              1.1498        333747
          16      2000              1.1281        327465
          20      2500                    1        290271
          24      3000                    1        290271
          28      3500                .0107          3120
          32      4000                .0107          3099
          36      4500                .0106          3068
          40      5000                .0106          3068
          44      5500                .0106          3068

댓글 없음:

댓글 쓰기