ORACLE - DAY 6

BUMSOO·2024년 8월 5일

테이블스페이스 생성

dictionary managed tablespace

  • 딕셔너리로 관리되는 테이블스페이스
  • 사용가능한 extent에 대해서 데이터딕셔너리에서 관리한다.
    • fet$ : free extent 정보
    • uet$ : used extent 정보
  • extent 할당하거나 할당이 해제 될때 딕셔너리 테이블에 대해서 조회갱신이 발생한다.
  • extent 할당하거나 해제가 발생한 경우 UNDO 정보를 생성해야 한다.
  • enq : ST - contention : wait event
  • PCTINCREASE는 익스텐트의 크기가 증가할 때의 비율을 설정하는 매개변수입니다. 익스텐트는 테이블스페이스에 데이터가 추가될 때 사용되는 데이터 블록의 집합입니다. PCTINCREASE를 설정하면, 다음 익스텐트의 크기가 이전 익스텐트의 크기에 비례하여 증가합니다.
  CREATE TABLESPACE dict_tbs DATAFILE '/u01/app/oracle/oradata/ORA19C/dict_tbs01.dbf' SIZE 10M 
EXTENT MANAGEMENT DICTIONARY
BLOCKSIZE 8K 
DEFAULT STORAGE(INITIAL 1M NEXT 1M PCTINCREASE 0);

딕셔너리 방식으로 생성하려고 하면 오류가 발생한다.

- system tablespace 자체가 로컬로 관리하는 테이블스페이스로 생성되어 있는 경우 딕셔너리 관리하는 테이블스페이스 생성시 오류 발생

locally managed tablespace

  • 로컬로 관리되는 테이블스페이스
  • 사용가능한 extent에 대해서 테이블스페이스에서 관리하는 방식
  • 비트맵은 사용가능 확장영역을 기록하는데 사용한다.
  • extent 할당하거나 해제가 발생한 경우 UNDO 정보를 생성되지 않습니다.
  • datafile 헤더에서 비트맵 관리를 따로한다.
CREATE TABLESPACE userdata
DATAFILE'/u01/app/oracle/oradata/ORA19C/userdata01.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

- UNIFORM SIZE 1M : extent 크기를 일정한 extent로 관리한다.

  • 현재 테이블스페이스들의 주소정보
    SELECT * FROM dba_data_files;
    • 해당 딕셔너리 테이블에서 AUTOEXTENSIBLE 열이 NO로 되어있으면 설정되어있는 테이블스페이스 크기가 초과 되면 데이터를 더 삽입할수가 없다
CREATE TABLESPACE user_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/user_tbs.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL;

- autoallocate : 시스템에서 extent크기를 관리한다. 기본값, 초기 extent는 64k로 설정되지만 대량의 데이터가 추가 될 경우 자동으로 extent 크기를 증가시킨다.

TABLESPACE 삭제

DROP TABLESPACE user_tbs INCLUDING CONTENTS AND DATAFILES;

- INCLUDING CONTENTS : 해당 테이블스페이스 안에 sengment가 있어도 같이 삭제
- AND DATAFIELS : 물리적 공간인 데이터파일도 같이 삭제, 해당 옵션을 쓰지 않으면 물리적인 공간은 남아있지만 사용할 수는 없다.


FLM(FreeLIST Management)

  • pctused, freelists, freelists groups 사용하는 방식

  • pctused : insert시 block 사용할 수 있는 여부를 나타내는 블록 파라미터이다. 기본값 40%

  • freelists : 처음 pctused 파라미터 보다 데이터가 작게 들어가 있는 block의 정보를 관리한다. 그 다음 사용할수 있는 block은 현재 사용할 수 있는 block header에서 관리한다.

  • freelists groups : freelists의 그룹을 의미, RAC에서 사용한다.

  • 동시 insert 작업이 수행할때 freelists를 획득해야 하는 문제점 때문에 buffer busy wait이 과도하게 많이 발생한다.

  • 이 문제점을 개선한 개념이 ASSM이다.

1) MANUAL 테이블스페이스 생성

CREATE TABLESPACE flm_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/flm_tbs.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT MANUAL;

2) PCTUSED, FREELISTS를 설정한 테이블 생성

CREATE TABLE hr.emp
PCTUSED 30 -- pctused를 30으로 낮춘다
STORAGE(FREELISTS 2) -- FREELISTS의 수를 2개로 생성, buffer busy wait를 줄일수 있다.
TABLESPACE flm_tbs
AS SELECT * FROM hr.employees;

3) 딕셔너리 확인

SELECT * FROM dba_tables WHERE owner = 'HR' AND table_name = 'EMP';
SELECT * FROM dba_segments WHERE owner = 'HR' AND segment_name = 'EMP';
SELECT * FROM dba_data_files;
SELECT * FROM dba_objects WHERE owner = 'HR' AND object_name = 'EMP';
SELECT ROWID, employee_id FROM hr.emp;
SELECT * FROM dba_extents WHERE owner = 'HR' AND segment_name = 'EMP';
  • dba_extents를 확인하게 되면 EXTENT_ID와 BLOCK_ID를 알수 있는데 BLOCK_ID는 해당 EXTENT의 첫번째 block의 ID를 반환한다.
  • ROWID

ASSM(Automatic Segment Space Management)

  • 각 블록의 FREE 상태를 비트맵(Bitmap) 값으로 관리하는 방식
  • 공간관리가 자동화 한다.
  • 데이터블록의 free 공간을 총 6단계로 관리
    1) FULL
    2) UNFORMATED
    3) 0 ~ 25% FREE
    4) 25 ~ 50% FREE
    5) 50 ~ 75% FREE
    6) 75 ~ 100% FREE
  • 동시에 INSERT 성능이 향상된다.
    하지만 buffer busy wait는 발생한다.
  • ASSM 관리방식의 테이블스페이스를 생성하려면 EXTENT 관리방식은 LOCAL을 이용해야 한다.

1) AUTO 테이블스페이스 생성

CREATE TABLESPACE assm_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/assm_tbs.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;

2) 테이블 생성

CREATE TABLE hr.emp
TABLESPACE flm_tbs
AS SELECT * FROM hr.employees;

3) 딕셔너리 확인

SELECT * FROM dba_tables WHERE owner = 'HR' AND table_name = 'EMP';
SELECT * FROM dba_segments WHERE owner = 'HR' AND segment_name = 'EMP';
SELECT * FROM dba_data_files;
SELECT * FROM dba_objects WHERE owner = 'HR' AND object_name = 'EMP';
SELECT ROWID, employee_id FROM hr.emp;
SELECT * FROM dba_extents WHERE owner = 'HR' AND segment_name = 'EMP';

- dba_tables를 확인하면 block수가 6개로 FLM 방식에 비해 늘어난걸 확인할 수 있는데 비트맵 방식은 가지고 있는 모든 block들의 대한 정보를 가지고 있어야 하기 때문에 block수는 늘어났지만 ROWID를 확인해보면 실제 데이터가 들어간 block의 수는 2개로 동일한걸 알 수 있다.


AUTOEXTEND

  • 테이블스페이스 크기 조정
  • AUTOEXTEND ON만 작성하면 기본값으로 오라클에서 자동설정
  • SEGMENT SPACE MANAGEMENT가 MANUAL이여도 설정가능

1) 테이블스페이스 생성시에 데이터파일을 자동으로 확장기능 설정

CREATE TABLESPACE insa_tbs
DATAFILE'/u01/app/oracle/oradata/ORA19C/insa_tbs.dbf' SIZE 10M
AUTOEXTEND ON NEXT 2M MAXSIZE 200M  -- 10M가를 초과하면 2M가씩 커지는데 최대치는 200M이다.
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;

2) 설정된 파라미터 확인
SELECT * FROM dba_data_files;

테이블스페이스 생성 후에 AUTOEXTEND를 지정하여 자동으로 확장가능을 설정

ALTER DATABASE DATAFILE
'/u01/app/oracle/oradata/ORA19C/insa_tbs.dbf' AUTOEXTEND ON;

0개의 댓글