이번 주에는 간단히 Tablespace에 대하여 정리하여 볼까한다. 실습이 없지만 그렇다고 퍼온 글도 아니다. 모두 내가 한땀한땀 타이핑 한 내용.

Tablespace : 물리적인 존재인 Datafile을 하나 이상 모아 놓은 논리적인 개념. 이라고 내 스스로 정리하였다.


Tablespace의 종류


1. SYSTEM Tablespace

Dictionary 정보(메타 정보)가 저장되어 있다. 아주 중요한 정보이다.

  • Static Dictionary : 이름과 같이 실시간으로 내용을 바꿀 수 없는 Dictionary이다. DBA_xxx, ALL_xxx, USER_xxx 등이 이에 해당한다.
  • Dynamic Dictionary : 실시간으로 변경되는 내용을 볼 수 있다. v$xxx가 이에 해당한다.

 

2. SYSAUX Tablespace

10g 부터 추가되었다. 성능 튜닝을 위한 데이터들이 저장되어 있다. 즉, 9i 이전에는 SYSTEM 혼자 이런 역할을 다 했다고 생각하면 된다.

 

3. Undo Tablespace


DML 작업 시 원본 데이터를 저장하는 Segment가 Undo Segment이다. (즉, rollback과 commit을담당한다는 것) 그리고 이 Undo Segment를 담고 있는 공간이 바로 Undo Tablespace이다.

  • Undo Tablespace는 한 인스턴스에 여러 개 만들 수 있다.
  • 관리 방법에 따라 자동 모드(AUM, Automatic Undo Management)와 수동 모드가 있다.

 

4. Temporary Tablespace

임시 자료를 저장하는 Tablespace이다. 따라서 DB를 리부팅하면 모든 내용이 사라진다. 보통 sort 작업(=order by) 시 sort_area_size 영역이 부족하면 Temporary Tablespace를 사용한다. (아마도 Sort Merge Join…) 참고로 sort_area_size는 공용 영역이 아닌 사용자 프로세스 별 영역 크기이다. 그리고 SGA 영역에 속하지 않는다.

아무튼 Temporary Tablespace는 인덱스 생성 시에도 사용한다. 어쨌든 Temporary Tablespace를 사용한다는 것은 성능이 느려진다는 것을 의미한다. 메모리가 아닌 디스크를 사용하기 때문이다.

 

5. 기타 Tablespace

일반적인 Tablespace이다.

 

Tablespace 관리 방식

 

1. DMT (Dictionary Management Tablespace)

extent 정보를 Dictionary Table에서 관리한다. 요즘 이 방식은 거의 사용하지 않는다.

 

2. LMT (Locally Management Tablespace)

Datafile 헤더 부분의 bitmap 정보를 통해 extent 정보를 자체 관리한다. 따라서 성능이 좋다! 그이유는 DMT에 비해 Dictionary Contention이 적기 때문이다. Tablespace 생성 시 "EXTENT MANAGEMENT LOCAL" 절을 사용한다.

만약 ASSM(Automatic Segment Space Management) 기능을 사용하려면 반드시 LMT 방식이어야 한다. Tablespace 생성 시 "SEGMENT SPACE MANAGEMENT AUTO" 절을 사용한다. 참고로 ASSM을 사용하면 자동으로 FREELIST 관리를 할 수 있으며 PCTUSED, FREELISTS, FREELIST GROUP과 같은 골치 아픈 옵션을 신경쓰지 않아도 된다.