CS/DataBase

ORACLE D/B

prden 2023. 4. 21. 15:30

1. SQL 내부 수행구조

ORACLE에서는 디스크에 저장된 데이터 집합(Datafile, Redo Log File, Control File 등)을 데이터베이스라고 부른다. 

그리고 SGA (System Global Area) 공유 메모리 영역과 이를 액세스하는 프로세스 집합을 인스턴스라고 부른다. 

기본적으로 하나의 인스턴스가 하나의 데이터베이스를 액세스하지만, RAC(Real Application Cluster)환경에서는 여러 인스턴스가 하나의 데이터베이스를 액세스할 수 있다. 

 

2. 데이터 저장구조

SQL 전문가 가이드 P478

물리적으로는 데이터 파일에 데이터를 저장하고 관리한다. 공간을 할당하고 관리하기 위한 논리적 구조를 아래에서 본다. 

 

1) 블록 ( =페이지)

대부분의 DMBS에서는 I/O는 블록 단위로 이루어진다. 데이터를 읽고 쓸 때의 논리적 단위가 블록이다. ORACLE에서 블록이라하고 SQL Server에서 페이지라고 함. 블록단위로 I/O한다는 것은, 하나의 레코드에서 하나의 칼럼만 읽더라도 레코드가 속한 블록 전체를 읽게된다는 것을 의미한다. SQL 성능을 좌우하는 가장 중요한 성능지표는 액세스하는 블록 개수이며, 옵티마이저의 판단에 가장 큰 영향을 미치는 것도 액세스해야 할 블록 개수이다. 

 

2) 익스텐트

데이터를 읽고 쓰는 단위는 블록이지만, 테이블스페이스로부터 공간을 할당하는 단위는 익스텐트다. 테이블이나 인덱스에 데이터를 입력하다 공간이 부족해지면 해당 오브젝트가 속한 테이블스페이스(물리적으로 데이터파일)로부터 추가적인 공간을 할당받는다. 이때 정해진 익스텐트 크기의 연속된 블록을 할당받는다. 

예를 들어) 블록크기가 8KB일 때 64KB 단위로 익스텐트를 할당하도록 정의했으면, 공간이 부족할 때마다 테이블 스페이스로부터 8개의 연속된 블록을 찾아(찾지 못하면 새롱누 익스텐트 추가) 세그먼트에 할당해 준다. 

 

3) 세그먼트

세그먼트는 테이블, 인덱스, Undo처럼 저장공간을 필요로 하는 데이터베이스 오브젝트이다. 저장공간을 필요로 한다는 것은 한 개 이상의 익스텐트를 사용함을 뜻한다. 테이블을 생성할 때, 내부적으로는 테이블 세그먼트가 생성된다. 인덱스를 생성할 때도 내부적으로 인덱스 세그먼트가 생성된다. 다른 오브젝트는 세그먼트와 1:1관계를 갖는다. 하지만, 파티션은 1:M 관계를 갖는다. 

 

4) 테이블스페이스

테이블스페이스는 세그먼트를 담는 콘테이너로, 여러 데이터파일로 구성된다. 각 세그먼트는 정확히 한 테이블스페이스에만 속하지만, 한 테이블스페이스에는 여러 세그먼트가 존재할 수 있다. 특정 세그먼트에 할당된 모든 익스텐트는 해당 세그먼트와 관련된 테이블스페이스 내에서만 찾아진다. 하지만, 한 세그먼트가 여러 데이터 파일에 걸쳐 저장될 수는 있다. 한 테이블스페이스가 여러 데이터 파일로 구성되기 때문이다. 

'CS > DataBase' 카테고리의 다른 글

ORACLE 인덱스  (0) 2023.04.21
ORACLE 파티셔닝  (1) 2023.04.21
ORACLE 쿼리 조인, 쿼리 튜닝  (0) 2023.03.10
Lock, DeadLock, Blocking  (0) 2023.03.10
Pro*C  (0) 2023.01.08