상세 컨텐츠

본문 제목

오라클 데이터베이스와 Instance

Database

by thankee 2007. 12. 15. 18:31

본문


오라클 데이터 베이스


사용자 삽입 이미지

 

1. 데이터 파일 : 실제 데이터가 포함되어 있다.

2. 리두 로그 파일 : 데이터를 복구할 수 있도록 DB변경 사항이 기록되어 있다. SGA의 Redo log buffer의 내용이 LGWR(백그라운드 프로세스 중 하나)에 의해 기록된다.

3. 제어 파일(Control files) : 뮤결성 유지 관리 확인에 필요한 정보

 

위 세가지를 오라클 데이터베이스라(물리적구조라고도 함)고 한다.

다음 세가지는 기타 키파일을 말한다.

 

1. 매개편수 파일(Parameter file) :  Oracle Instance의 특성 정의에 관한 정보(예 각종 매개변수)

2. 암호 파일(Password file) : 사용자 인증을 위한 정보

3. 아카이브된 로그 파일(Archived log files) : 리두 로그 파일의 오프라인 복사본으로서 리두 로그 파일이 담겨진 디스크에 문제가 생겨도 복구할 수 있도록 하기 위해 존재한다.

 

 

오라클 메모리 구조

사용자 삽입 이미지

오라클의 메모리 구조는 크게 SGA와 PGA로 구분된다.
(메모리를 말하는것이지 프로세스를 말하는것이 아니다. 대개 SGA는 하나 PGA는 여럿이며 여러 PGA가 SGA를 공유한다.)


1. SGA(System Global Area) : 인스턴스 시작시 생성된다.

  - SGA_MAX_SIZE에 의해 최대 크기가 조정되며, 크기는 동적이다(커지거나 작아지거나 한다).

  - SGA는 인스턴스를 종료하지 않고 구성을 변경할 수 있다(9i이후 부터)

  - 할당단위는 그래뉼이다. (그래뉼 : 연속적인 가상 메모리 할당 단위. 예상 SGA가 128MB이하이면
     4MB, 크면 16MB)

  - SGA구성요소는 그래뉼 단위로 커지거나작아진다.
  - SGA구성 최소 단위는 세개의 그래뉼이다. (Database Buffer cache, Shared cache, 그외 고정SGA)

  - 공유 풀(Shared Pool) : - Library cache + Data dict cache로 구성.

      > Library cache : 최근에 사용한 SQL문, PL/SQL문에 대한 정보가 저장된다.
         *LRU(Least Recently Used)알고리즘으로 관리

         *SQL(또는 PL/SQL), parse tree, QEP(Quary Execution Plan : 실행 계획)의 형태로 저장됨.

         *SQL : 실제 SQL문장이 저장되어 사용자 프로세스에서 요구된 SQL문과 비교한다.(대소문자,
                  띄어쓰기 구분하며 비교한다) SQL문이 똑같은 경우 parse-tree와 QEP실행이 실행된다.

         *QEP : 실행 계획으로서 해당 데이터를 찾아가는 최적의 방법.

         *Parse-tree : 해당 SQL문의 실행의 주체(C language에서 컴파일후 생성되는 목적모듈이라고
                        생각하면 된다. 즉 parsing(분석)후 생성된 것이 parse-tree로서 실행이 주체가 된다.)

         *SQL문이 넘어오면 가장 먼져 Library cache에서 전에 실행된적이 있는지 확인한다. 만약

          이전에 실행된 것으로 확인되면, 해당 parsing과정을 건너뛰고 이미 존재하는 해당 parse-tree

          와 QEP를 실행한다. 즉 Library cache는 Parsing과정을 생략할 수 있도록함으로서 속도향상에

          기여한다.

      > Data Dictionary Cache : 가장 최근의 데이터 정의 모음 및 각종 통계 정보가 저장된다.
          * 테이블, 인덱스, 열, 사용자, 권한, DB파일, 기타 통계정보 포함

          * 자주 참조되는 정보를 메모리상에 존재하게 함으로서 물리적 IO를 최소화 함으로서

             속도 향상에 기여한다.
          * 구문분석단계(Parsing) 동안에 이곳에서 각종 정보를 찾아, 권한 확인, 해당 정보 확인

            따위의 작업을 한다.(계정 확인, 데이터 파일이름, 세그먼트이름, 테이블 설명, 권한,...)

      > SHARED_POOL_SIZE 매개변수로 크기 조정(Library cache와 Data dictionary cache의 세부

          크기조정은 오라클이 알아서 한다. SHARED_POOL_SIZE의 크기가 작으면 오버해드가

          늘어난다. 크기가 크면 속도가 향상된다.) SGA_MAX_SIZE를 초과하게 설정할수 없다.

      > Shared Pool은 여러 프로세스들이 공유한다. 또한 인스턴스마다 개별로 존재하지 않는다.

  - 데이터베이스 버퍼 캐시(Database Buffer Cache) : 데이터 파일에서 읽어들인 복사본 저장

      > DB_BLOCK_SIZE에 지정된 블록크기 단위로 데이터가 전송된다.
        (기본 8k, 2의 1승부터 6승인 64k 중 하나 선택 가능)

      > System data(Dictionary table), User data(일반 table), Undo block(롤백용 블록)로 구성

      > 하드디스크에 직접 조회하지 않고 메모리에 두고 사용함으로서 속도 향상(물리적 IO감소)

      > LRU알고리즘을 통해 관리
      > 모든 DB작업은 이곳에서 이뤄지며, 이곳에 없는 데이터는 하드디스크에서 이곳으로 읽어온다)

      > 데이터베이스 버퍼 캐시는 크기가 동적이다.

      > 세가지 서브 캐시로 나눌수 있다.

         * DB_CACHE_SIZE 크기의 Default Buffer Cache. 항상 존재하며 0이 될수 없다.

         * DB_KEEP_CACHE_SIZE 크기의 Keep Buffer Cache. 재사용될 메모리 블록이 저장되는 곳.

         * DB_RECYCLE_CACHE_SIZE 크기의 Recycle Buffer Cache. 거의 재사용되지 않는 메모리 블록.

         * 서브 캐시들의 크기 역시 DB_BLOCK_SIZE에서 정해진 크기로 관리된다.

         * 재사용될 정보의 메모리 구역과 그렇지 않은 메모리구역을 나누어 둠으로서 LRU알고리즘에

           의해 공간확보시 재사용될 메모리 구역의 데이터가 삭제되는것을 막는다.

  - Redo Log Buffer : 복구 목적으로 데이터베이스 블록의 모든 변경사항이 기록되는 메모리 공간

      > 기록된 사항은 리두 항목이라고 하며, 변경사항을 재구성, 재실행 할 정보가 포함된다.
      > LOG_BUFFER로 크기가 정해진다.

      > LGWR 백그라운드 프로세스에 의해 리두 로그 파일에 기록된다.

      > 약 1MB의 작은 크기를 가지고 있다

      > 버퍼가 가득 차버리는 것을 막기 위해 지속적으로 Redo Buffer의 내용을 Redo Log File에

         기록하는데 하드디스크와 메모리의 속도차를 가만해 Redo Log Buffer을 3등분하고,

         각 등분이 가득 찰때마다 그 등분의 내용을 하드디스크의 Redo Log File에 기록하게 된다.

         (순환형 버퍼라고 칭하기도 하는데 그 이유는 지속적으로 1,2,3,1,2,3,1,2,3순서로 순환하며

         덮어 쓰기 때문이다.)

                      

사용자 삽입 이미지

2.PGA(Program Global Area) : 서버 프로세스 시작시 생성(서버프로세스에 할당되는 메모리 공간)

  - Cursor : SQL문으로 조회한 데이터 결과값은 작을수도 있고 엄청나게 클수도 있다. 이렇게 크기를

                예측할 수 없는 결과값을 한번에 사용자 프로세스에게 넘겨주지 않고 커서를 이용하여,

                커서가 가리키는 데이터를 사용자 프로세스가 준비되었을때 한줄 씩 반환한다.




by thankee from tistory.com

관련글 더보기