[Oracle] 구조

2023. 3. 9. 21:08

오라클 서버 (Oracle Server)

 : 메모리와 디스크에 생성되는 구조

└- 인스턴스 (Instance)

     : 메모리 부분에 생성되는 구조

    └- SGA (System Global Area)

          : 실제 작업들이 수행되는 공간

         └- Database Buffer Cache

              : 데이터의 조회와 변경 등 실제 작업이 일어나는 공간

         └- Redo Log Buffer

              : 변경 내용을 기록하는 메모리 공간

         └- Shared Pool

              : 어떤 대상을 공유해서 사용하기 위한 공간

              └- Library Cache

                   : Soft Parse시 사용, SQL과 실행계획 등이 저장된 공간

              └- Data Dictionary Cache

                   : 구문분석이나 실행계획을 세울때 사용하는 Dictionary들이 Cache 되어진 공간

              └- Server Result Cache

                   : 결과값을 Cache 해 두는 공간

         └- Large Pool

         └- Java Pool

         └- Streams Pool

         └- Fixed SGA

    └- 백그라운드 프로세스 (Background Process)

          : Oracle Server 가 잘 운영되도록 하는 역할

         └- DBWR

               : 데이터 파일로 저장하는 역할

         └- LGWR

               : Redo Log Buffer에 있는 내용을 Redo Log File로 저장하는 역할

         └- PMON

               : 모든 서버 프로세스들 감시

         └- SMON

               : Instance Clean Up 역할

               : Instance Recovery 과정에서 누락된 Transaction Recovery 역할

               : 비정상 종료된 Transaction이 사용 중이던 Temporary segment 를 Clean up 역할

               : Dictionary Managed Tablespace 에서 Free extents들을 모아주는 역할

         └- CKPT

               : DBWR에게 Checkpoint 신호를 전달

         └- ETC

    └- PGA (Program Global Area)

          : Process들이 개별적으로 사용하는 메모리 공간

         └- SQL Work Area

              : Sort 관련 작업을 수행하는 공간

         └- Private SQL Area

└- 데이터베이스 (Database)

     : 디스크 (Disk) 에 위치한 파일들의 세트

    └- 데이터 파일 (Data File)

         : 데이터 (Data) 를 저장하는 공간

    └- 컨트롤 파일 (Control File)

         : DB 운영 정보 저장

    └- 리두 로그 파일 (Redo log File)

         : 변경 내용을 기록하는 파일 공간

 

 

출처 오라클 구조 (Oracle Structure) 를 Tree 형식으로 쉽고 간단하게 알아보자~(?) (tistory.com)

 


1. 메모리

1.1 공유 메모리 영역 SGA(System Global Area)

- 운영체제가 제공해준 것. 여러 프로세스가 동시에 엑세스할 수 있는 메모리 영역

- 인스턴스가 복구 될 때마다 메모리에 할당 됨

- Lock을 걸어 베타적 제어*를 하지 않으면 데이터에 손상을 입을 수 있음

*베타적 제어 : 프로세스가 공유 데이터를 변경하고 있는 도중에 다른 프로세스가 해당 공유 데이터를 읽거나 변경하지 못하도록 하는 것

 

Buffer Cache : 디스크파일로부터 데이터 블록을 담는 캐시 영역.
자주 사용하는 데이터를 더 빠르게 가져오기 위해 존재. LRU 알고리즘 *사용

Buffer Cache 상태
pinned : 지금 사용 중인 상태. 다른 사람이 사용을 못하는 lock 상태
unused : startup 이후 한번도 사용하지 않은 상태
free : 변경된 내용이 Disk에 백업이 완료된 상태
dirty : 내용이 수정되었지만 아직 Disk에 백업이 되지 않은 상태. 백업이 되면 다시 free 상태가 됨.

*LRU (Lease Recently Used) 알고리즘 : 가장 최근에 사용하지 않은 데이터부터 캐시아웃

ex) 1 -> 2-> 3 순차 호출

3 → 2 → 1

2번 캐시 호출

2 → 3 → 1

캐시에 4를 새로 씀 / LRU인 1 제거

4 → 2 → 3 → 1

 

 

Cache와 Buffer
Cache : 속도가 다른 두 장치간의 속도 차이를 줄여주기 위한 장치.
데이터 저장소로 이용되므로 데이터를 저장하여 추후에도 계속 사용 가능
Buffer : 데이터를 전송하는 상호간의 장치에서 저속의 장치가 작업을 하는 동안 고속의 장치가 기다려야 하는 현상을 줄여주는 장치. (데이터를 읽어오기 위해 디스크까지 가지 않아도 됨)
데이터 손실 방지 & 사용된 데이터는 삭제 됨

 

 

 

1.2 프로세스 고유 메모리 영역 PGA(Process Global Area)

- 서버 프로세스가 가진 자신만의 메모리 영역. DB에 접속하는 모든 유저에게 할당되는 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메모리 영역.

- SQL의 작업 공간. 정렬 작업을 수행(sort) → PGA 메모리 용량 부족 시 TEMPORARY TABLESPACE를 사용

하나의 유저 프로세스에 하나의 서버 프로세스가 할당되며, 하나의 서버 프로세스는 하나의 PGA를 생성

 

PGA 구조

정렬 공간
Sort Area
유저 프로세서 세션 정보
User Session Data
파싱 정보가 기록된 주소
Cursor State
변수 저장 공간
Stack Space
- Sort Area : Order By 또는 Group By 등의 정렬을 수행하기 위한 공간이며 해당 공간에서만 정렬이 완료된다면 이를 메모리 정렬이라 함
- Session Information : 서버 프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스의 세션 정보를 저장
- Cursor State : 해당 SQL의 Parsing 정보가 저장되어 있는 주소를 저장
(Cursor : SQL문을 처리하는 정보를 저장한 메모리 공간)
- Stack Space : SQL문장에 Bind Variable를 사용했을 경우 해당 바인드 변수를 저장하는 공간

 

 

 

1.3 RAC (Real Application Cluster)

  • 하나의 Database에 여러개의 Instance를 구성하는 방식 = 하나의 Instance에 장애가 발생하여도 DB운영에 지장X
  • n개의 Instance에서 동일한 datafile을 공유하여 엑세스
  • CPU나 메모리 등의 자원은 공유X
  • SPFILE* 권장

 

*SPFILE (서버파라미터 파일)

  • 바이너리 형식
  • PFILE을 사용해 수동으로 생성되거나, DB 생성 시 사용하는 DBCA에 의해 자동으로 생성됨
  • NOMOUNT 단계 이상이라면 다시 SPFILE을 쓰기 때문에 제거하거나 이동하면 안됨
spfile$SID.ora
ALTER SYSTEM SET [파라미터명 = 값] [SCOPE]
  • 수정 시 인스턴스 재기동 불필요

*SCOPE 옵션

MEMORY - 변경 즉시 적용 / 재시작 시 원래 설정 값으로 돌아감

SPFILE - SPFILE에만 변경 적용 / 현재 상태에는 영향X

BOTH - 변경 즉시 SPFILE에도 적용 / 재시작 시 변경 내용 반영

 

cf) PFILE (파라미터 파일)

  • 텍스트 형식으로 변경 가능
  • 파일 수정 시 인스턴스 재 기동으로 적용
  • DB 생성이나 장애 발생 시 사용

--pfile

더보기
-- Pfile
$ cd /ORA19/app/.../dbs
$ vi Init$SID.ora

 

+ RAC Ping 현상: Instance 1에서 변경 완료 된 데이터를 Instance 2 로 가져오기 위해 디스크에 저장 후 해당 데이터를 Instance 2 로 복사해오는 작업

 

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

[Oracle] 관리자 계정(system, sys) 비밀번호 변경  (0) 2023.03.16
[Oracle] 이전 명령어 방향키로 출력  (0) 2023.03.15
[Oracle] Sequence  (0) 2023.03.13
[Oracle] Listener & Oracel DB  (0) 2023.03.12
[Oracle] SCN, Checkpoint  (0) 2023.03.12

+ Recent posts