Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

DBDBDEEP

Oracle DataBase 구조 탐색 본문

Oracle ADMIN

Oracle DataBase 구조 탐색

Kihwane 2022. 1. 10. 22:37

Oracle DB Server는 두 영역(DataBase Instance) 으로 나누어서 보여주게 된다.

 

 DataBase

3type 의 파일들을 데이터 베이스라고 정의한다.

1) datafile

- 유저데이터가 들어가는데 table, index 등이 들어가게 된다.

- datafile은 여러개가 존재하며 필요에 따라 추가가 가능하다.

 

2) log file

-  장애가 발생했을시 복구하기 위해서 오라클이 평소에 적어두는 파일이다.

-  여러개가 존재한다.

 

3) control file

- 데이터 파일과 로그파일에 대한 정보가 적혀져 있다. 

> DB ID 정보 / DB creation 정보 / SCN(동기화 정보)

- Physical Structure 정보라고 한다.

-  Multiplexing (Mirroring) 방법으로 컨트롤 파일을 여러개 구성할 수 있으며 Backup & Recovery 에 사용한다.

 

Instance

- 현재 실행되고 있는 오라클 소프트웨어

- 실행하기 위해서 확보한 Memory(SGA) + Background Processor(LGWR,DBWR,SMON,PMON,CKPT 등)의 집합이다.

- DB로 접근하기 위한 게이트웨이의 역할을 하며 인스턴스는 연관된 DB가 딱 하나 존재한다.

 

연결 및 세션

 

연결 

-  User Process와 Instance간의 통신이다.-

세션

- 유저가 User Process를 통해 수행하는 Instanece에 대한 특정 연결- 유저가 연결하는 시점에서 데이터베이스 응용 프로그램 연결을 끊거나, 종료하는 시점까지 지속된다.- 단일 User에 대해 여러 세션이 동시에 생성되고 존재할 수 있음

연결과 세션의 표현


오라클 데이터 베이스 메모리 구조

오라클 데이터 베이스 Instance에는 두 가지 기본 메모리 구조가 연관되어 있다.

 

1. SGA : System Global Area

- 하나의 오라클 DB Instance의 데이터 및 제어정보를 포함하는 공유 메모리 구조이다.

- 모든 서버 및 백그라운드 프로세스에서 공유된다.

- 인스턴스가 시작 될 때마다 SGA 라는 공유 메모리 영역이 할당되고 백그라운드 프로세스가 시작한다.

 

2. PGA : Program Global Areas

-  서버 또는 백그라운드 프로세스의 데이터 및 제어정보를 포함하는 메모리 영역이다.

-  서버 또는 백그라운드 프로세스를 시작할 때 오라클 데이터 베이스에서 생성되는 비공유 메모리.

   모든 유저에게 할당되는 각각의 서버 프로세서가 독자적으로 사용하는 영역.

-  서버 프로세스만 액세스 가능하다.

 

 

SGA의 구성요소

 

1) shared Pool

- 유저간 공유할 수 있는 다양한 구성요소를 캐시에 저장한다.

- shared pool의 데이터 딕셔너리 캐시에 딕셔너리 정보를 보관한다.

- shared pool의 라이브러리 캐시에 P-Code, 수행계획, SQL이 저장된다.

- 캐시에 명령을 저장해두고 저장되있던 명령이 호출되면 빠르게 접근할 수 있게 한다.

 

2) Database Buffer Cache

- 1 buffer = 1 db block = 8k

- 데이터베이스에서 검색된 데이터블록 복사본을 캐시에 저장한다.

- 모든 동시 유저가 공유를 하게 된다.

- 데이터를 데이터베이스 버퍼 캐시에서 검색한다. 

 

  Physical read : 데이터를 버퍼 캐시에 올리는 작업인데, 버퍼캐시에 데이터가 없으면 올린다.

  Logical read : 버퍼캐시에 있는 데이터를 유저에게 전송한다. (버퍼캐시에서 검색했을때 데이터 존재 Cache Hit)

 

> Data Buffer Cache 상태

상태 설명
free/empty 초기 상태
pinned 수행중인 명령어를 필요로 하는 버퍼
명령어 수행이 끝나면 핀 제거
clean 파일 데이터와 메모리 데이터가 같을 때
dirty 파일 데이터와 메모리 데이터가 다를 때

 

더티 버퍼(Dirty Buffer) - 변경은 완료되었지만 디스크에 기록되지 않은 버퍼

사용중 버퍼(Pinned Buffer) - 변경중인 버퍼

프리 버퍼(Free Buffer) - 변경이 완료된 후 디스크에 기록된 버퍼

 

 

Database Buffer Cache를 관리하기 위한 LRU 알고리즘

캐시의 버퍼는 LRU(Least Recently Used) List와 접근 횟수의 조합을 사용하는 복합 알고리즘에 의해 관리된다.

데이터파일의 데이터를 캐시에 올리다보면 버퍼캐시가 꽉차게되고, 버퍼캐시에 찾고 싶은게 없다면 새로운 블록을 올려야 한다.

LRU List. 버퍼의 헤더부분을 리스트화 한 것이다.

F : Free 상태

MRU : 가장 많이 쓰인 것들

LRU : 가장 적게 쓰인 것들

 

CheckPoint Queue. Dirty Buffer가 기록된다.

UPDATE A -> B를 수행한다고 하면,

LRU List에서 가장 적게 쓰인 9 F (9번블록)을 선택한다.

선택된 블록의 이동. 순서의 변화가 생긴다. D : Dirty

CheckPoint Queue에는 업데이트된 상태의 블록이 들어간다.

체크포인트 큐에 들어간 Dirty 상태의 블록.

Datafile에 쓰기 위해서 체크포인트 큐에 들어가며, 큐에 삽입된 순서대로 Datafile에 쓰여지게 된다 (FIFO:선입선출)

 

3) Redo Buffer Cache (리두로그 버퍼)

- 데이터베이스에 대한 변경사항 관련 정보가 포함된 SGA의 순환 버퍼

- Insert, Update, Delete 등 작업에 따른 데이터 베이스의 변경사항을 재생성 하는데 필요한 정보 포함.

- Instance Recovery에 사용되는 리두 정보가 디스크에 저장된 물리적 리두로그 파일에 기록될 때 까지 저장.

- 서버 프로세서에 의해 유저 메모리 영역에서 리두로그 버퍼로 복사한다.

- LGWR(로그 기록 프로세서)가 리두로그버퍼를 디스크의 리두로그 파일에 기록한다. 

 

 

앞서 나온 세가지는 데이터베이스를 이루는데 꼭 필요한 3가지 SGA의 구성요소


 

4. Large Pool

- 오라클 백업 Recovery 작업과 같은 특정 대용량 프로세스 및 I/O 서버 프로세스에 대한 메모리 할당을 제공하는 선택    적 영역.

- Large_pool_size = 0 (Default Size 이다.)

- 대규모 메모리 요청을 Shared Pool 보다 잘 만족시킬 수 있다.

 

5. Java Pool

- JVM의 모든 세션별 Java 코드 및 데이터를 저장하는데 사용한다. 

 

6. Streams Pool

- 기본 Streams_pool_size = 0이다. 사용됨에 따라 동적으로 커진다.

- Oracle Streams 프로세스용 메모리를 제공한다.

 

7. Fixed SGA

- 내부의 작업 관리 영역으로서 데이터베이스 및 Instance의 상태에 관한 일반적인 정보. 프로세스 간에 주고받는 정보      등을 표시.

- DB가 시작될때 할당

- 다른 유저와 공유

 

PGA의 구성요소

1. Stack Space(변수 저장 공간)

- Sql 문장에 Bind Variable을 사용했을 경우 해당 바인드 변수를 저장한다.

ex) server process id : 123

 

2. Cursor State(커서 상태  정보)

- 커서에 대한 런타임 정보를 저장하기 위한 커서영역이다.

- 해당 Sql 파싱정보가 저장되어 있는 주소를 저장한다.

- 서버가 아무것도 수행하고 있지 않다면 비어있다.

- Privte sql Area를 만든다.

  > 해당하는 명령어를 수행하는 동안 정보들을 모두 Private sql Area에 저장한다.

  > 명령어 수행이 끝나면 할당을 해제한다.

 

3. Session Information(세션정보)

- 세션에 대한 제어정보를 위한 유저 세션 데이터 저장 영역이다.

ex) hr/oracle 129.30.10.1

 

 정렬공간 / 세션정보 / 커서상태 정보는 User Global Area (UGA) 라고 한다.

 

4. Sort Area

- Select을 통해서 가져온 내용들이 Private Sql Area에 있다고 하였는데, 그것을 Sort Area (Sql Work Area) 에서 정렬작   업을 하는 공간이다.

 

PGA 관리하는 파라미터

 

1. PGA_AGGREGATE_TARGET

- 모든 세션의 PGA 크기의 합을 설정하는 파라미터

- PGA_AGGREGATE_TARGET 파라미터에서 지정한 크기까지 오라클이 PGA를 자동으로 관리한다.

 

2. SORT_AREA_SIZE

- 정렬 공간에 대한 크기를  설정하는 파라미터이다.

 

3. WORKAREA_SIZE_POLICY

AUTO : PGA_AGGREGATE_TARGET 파리미터를 이용하여 PGA의 크기를 설정하겠다.

MANUAL : SORT_AREA_SIZE 파라미터를 이용하여 정렬공간을 설정한다.

 

 

In-Memory 열 저장소

- 객체를 열 형식으로 알려진 새 형식으로 메모리에 저장할 수 있다.  즉, 메모리에 데이터를 저장해서 디스크간 병목이 존재하지 않음. 지연이 적음- OLTP 환경과 DW 환경 모두에 대해 빠른 보고 및 DML 성능을 제공한다.- 디스크 형식에 독립적이고,  메모리에서만 사용할 수 있는 새로운 열 형식으로 변환된 테이블의 일관성 있는 복사본.

 

In-Memory 특징, Instant Query 응답

- 열에서 

매우 큰 테이블에 대한 쿼리 속도가 증가한다.- 스캔, 조인 및 집계 사용가능- 인덱스가 존재하지 않게 된다.- 적은 수의 열, 많은 수의 행인 애널리스틱에 최적화된다.- 더 빠른 DML이 가능하다.

 

In-Memory 장점

1) 일부 컬럼에 대한 질의문에 빠른 응답속도 제공가능(100x)

2) 인덱스 구조가 필요치 않음

3) 일부 컬럼에 대해 많은 건수를 놓고 분석하는 작업에 유리

4) 인덱스를 적게 생성하게 됨으로 DML 속도도 빨라질 수 있음

5) 기존의 application 의 변경이 필요치 않음

6) 설정 및 사용이 쉬움

7) 영속성을 보장하지 않아도 되고 저장공간이 많이 필요한 것이 아니라면 in-memory DB는 유용

   ex) 테스트 db

 

In-Memory 단점

1) 영속성을 보장하지 않음. Error로 인한 프로세서 종료시, 데이터 유실가능성 有

2) 메모리에 데이터를 저장하기 때문에 저장공간이 한정되어있음.