우리 회사 데이터베이스를 티베로로 변경하기
테이블 스페이스 관리 0 0 99,999+

by 티베로 티베로 파일 티베로 데이터파일 티베로 테이블스페이스 [2018.10.11]


티베로 데이터베이스는 테이블 스페이스 생성 시 필요한 용량을 설정(물리적인 데이터 파일을 추가)하므로 해당 테이블 스페이스 용량을 주기적으로 모니터링하고 부족 시 추가해야 한다.

또한 이를 위해서는 사전에 디스크 용량이 충분히 확보되어 있어야 하고 raw device를 사용할 경우는 미리 생성해 두어야 한다.

1. 디스크 용량 모니터링 방법

File System 사용할 경우
-- 데이터파일이 위치한 경로 확인
select file_name 
  from dba_data_files
 where rownum <= 3;

----------------------------
file_name
----------------------------
/tiberodata/testdata01.dtf
/tiberodata/testdata02.dtf
/tiberodata/testdata03.dtf


--  데이터 파일이 위치한 mount point의 용량이 충분한지 확인

tibero:/ # df -g (linux: df -h)
Filesystem     GB blocks Free  %Used Iused %Iused Mounted on
/dev/tibero_lv 100.00    99.98 1%    5     1%     /tiberodata

Raw Device 사용할 경우
--  데이터 파일용으로 생성한 VG(Volume Group) 확인 ( aix 기준 )
tibero:/ # lsvg (linux: vgdisplay)
-------------
tibero_vg
tiberodata_vg <-datafile용 VG


-- 데이터 파일용 VG내 LV(Logical Volume) 확인
tibero:/ # lsvg -l tiberodata_vg

-------------------------------------------------------------------
LV NAME     TYPE LPs PPs PVs LV STATE     MOUNT POINT
data001_10g raw  80  80  9   open/syncd   N/A
data002_10g raw  80  80  9   open/syncd   N/A
data003_10g raw  80  80  9   open/syncd   N/A
data004_10g raw  80  80  9   closed/syncd N/A 
data005_10g raw  80  80  9   closed/syncd N/A
<--- LV STATE가 closed인 것은 미사용, open인 것은 사용중을 의미

note

티베로 데이터베이스는 스토리지에 저장된 파일을 File System 혹은 Raw Device 두 가지 형태로 접근이 가능하다.

File System의 경우 OS에 Mount되는 파일 시스템 형태이므로 관리하기 편하다는 장점이 있으나 OS 커널을 통해 디스크 I/O가 일어나므로 처리속도가 느려질 수 있다. 반면 Raw Device는 OS 커널을 거치지 않고 DBMS(티베로)가 디스크에 직접 I/O를 요청하고 수행하므로 처리속도가 빠른 반면 설정 및 백업 등의 관리가 어렵다는 단점이 있다

티베로를 포함한 데이터베이스 구축 시 처리속도가 빠른 Raw Device를 구성하여 사용하는 것 이 일반적이나 최근에는 어느 쪽을 선택하더라도 큰 성능차이가 없는 스토리지들도 존재하기 때문에, 관리가 편리한 File System를 선택하기도 한다. 따라서 도입하는 스토리지 벤더사의 엔 지니어와 논의하여 관리자가 원하는 방식을 선택하면 될 것이다.

2. 테이블 스페이스 용량 모니터링 방법

tm (tibero monitor) 사용
tibero:/ # tm
=============================
 Tibero RDBMS Monitor Ver4.3
=============================
Enter SYS Password : <--password 입력

 Tibero Version : 6 (SQL_ID_FORMAT: column sql_id format a25)
 -----------------------------------------------------------------
 5.SPACE | 6.I/O
 ---------------------------------- + ----------------------------
 51 - Database File Info            | 61 - File I/O Info
 52 - Tablespace Usage              | 62 - Session I/O Info

 Choose the Number or Command : <--52입력

Dictionary Table 조회
select tablespace_name
 , round(alloc/1024/1024/1024) as Alloc_GB
 , round((alloc-free)/1024/1024/1024) as Used_GB
 , round((alloc-free)*100/alloc,1) as Used_Per
from (
select a.tablespace_name, a.alloc, nvl(b.free,0) as free
from (select tablespace_name, sum(bytes) alloc from dba_data_files group
by tablespace_name) a
left outer join (
select tablespace_name, sum(bytes) free from dba_free_space group by
tablespace_name) b
on a.tablespace_name = b.tablespace_name)
order by Used_Per desc;

--------------- -------- ------- --------
tablespace_name Alloc_GB Used_GB Used_Per
--------------- -------- ------- --------
TEST_DATA       240          209    87.2
TEST_INDEX       20           16    81.4
TEST_DATA01     140          114    81.1
TEST_INDEX01     90           72    79.5
 

3. 테이블스페이스 생성/변경/삭제

3-1) 테이블 스페이스 생성

테이블 스페이스는 CREATE TABLESPACE문과 함께 데이터 파일의 경로와 SIZE를 지정하면 생성이 가능하며 기타 사항은 OPTION으로 지정이 가능하다.

OPTION을 지정하지 않을 경우 DEFAULT 값은 각각 AUTOEXTEND OFF, LOGGING, ONLINE, PERMANENT, EXTENT MANAGEMENT LOCAL AUTOALLOCATE이며 특별한 경우가 아니라면 DEFAULT 값을 사용하면 된다.

경로를 지정하지 않을 경우 DB_CREATE_FILE_DEST parameter의 경로에 데이터 파일이 생성 되며 해당 파라미터가 정의되지 않았다면 $TB_HOME/database/$TB_SID에 생성된다.

note

AUTOEXTEND ON일 경우 FILE SYSTEM의 크기만 확보되어 있다면 테이블 스페이스 부족 시 크기가 자동으로 증가할 것이므로 용량이 부족하여 데이터베이스에 행이 걸리는 장애를 예방 할 수 있지만, 업무량이 많은 상황에서 테이블 스페이스의 크기를 자동으로 증가시키는 것 자 체가 부하를 가중시킬 수 있으므로 AUTOEXTEND OFF를 권장한다

(물론 AUTOEXTEND ON을 권장하는 의견도 많지만 개인적으로는 테이블 스페이스 모니터링을 철저히 하고 필요시 업무 량이 적은 시간에 수동으로 크기를 미리 증가하는 것이 바람직하다고 생각한다)

CREATE TABLESPACE [테이블 스페이스명]
DATAFILE[데이터 파일 경로]
SIZE[크기]
AUTOEXTEND [ON|OFF]
LOGGING | NOLOGGING
ONLINE | OFFLINE
PERMANENT | TEMPORARY
EXTENT MANAGEMENT LOCAL [AUTOALLOCATE | UNIFORM SIZE[크기]

1) LOGGING | NOLOGGING : 로깅 옵션을 생략한 테이블 생성문에서의 DEFAULT 로깅 모드(예를 들어 NOLOGGING TABLESPACE에 생성하는 테이블의 경우 테이블 생성시 로깅 옵션을 생략했다면 DEFAULT로 NOLOGGING 모드의 TABLE이 생성된다).

2) AUTO EXTENT [ON|OFF] : TABLESPACE 크기 자동 증가 여부

3) EXTENT MANAGEMENT LOCAL [AUTOALLOCATE|UNIFORM SIZE크기] :AUTOALLOCATE의 경우 테이블 스페이스에 생성하는 세그먼트(테이블, 인덱스 등)의 크기에 따라 EXTENT의 크기가 자동으로 증분하여 할당되며 UNIFORM SIZE는 정의된 크기로 일정한 EXTENT가 생성된다.

FILE SYSTEM을 사용할 경우(df -g를 통해 원하는 경로에 용량이 충분한지 확인한 후 진행한다. DATAFILE이 해당 경로에 생성되며 테이블 스페이스에 할당된다).

CREATE TABLESPACE TEST_DATA DATAFILE 
       '/tiberodata/testdata01.dtf' SIZE 10G;

RAW DEVICE 사용할 경우(lsvg를 통해 필요한 raw device 및 closed state을 확인한 후 진행한다. DATAFILE로 사용할 RAW DEVICE는 미리 생성이 되어있어야 한다).

CREATE TABLESPACE TEST_DATA 
       DATAFILE '/dev/rdata001_10g' SIZE 10239M;

(주의 사항) TAC 환경에서 데이터 파일을 할당할 때 BLOCK DEVICE를 할당하지 않도록 주의해야 한 다. BLOCK DEVICE는 OS에서 캐싱을 하므로 데이터 변경 시(체크 포인트 발생 시) 실시간으로 디스 크에 반영이 되지 않아 TAC 구성 노드간 바라보는 데이터가 상이해지는 문제가 발생한다.

@tibero:/dev # ls -al | grep data001_10g
brw-rw---- 1 tibero dba 51, 1 Mar 30 17:05 data001_10g
   <-- block device는 TAC에서 사용하지 않아야 한다.
crw-rw---- 1 tibero dba 51, 1 Jun 4 05:28 rdata001_10g
   <-- character device를 할당하여 사용해야 한다.

N개의 데이터 파일을 생성 시 할당할 경우

CREATE TABLESPACE TEST_DATA
        DATAFILE '/dev/rdata001_10g' SIZE 10239M
               , '/dev/rdata002_10g' SIZE 10239M
               , '/dev/rdata003_10g' SIZE 10239M
;

OPTION을 지정할 경우

CREATE TABLESPACE TEST_DATA 
       DATAFILE '/dev/rdata001_10g' SIZE 10239M 
       NOLOGGING ONLINE PERMANENT 
       EXTENT MANAGEMENT LOCAL 
       UNIFORM SIZE 256K;

note

10GB raw device를 테이블스페스에 할당할 경우 전체에서 1M를 제외한 용량 (1024M * 10 - 1M = 10239M)을 할당하는 이유는 OS가 raw device를 관리할 때 필요하기 때문이다. -> OS의 종류(혹은 버전)에 따라 10G 전체를 사용해도 무관한 경우도 있으나 안전하게 1M 를 제외하는 것을 권고한다.

3-2) 테이블 스페이스 변경/삭제

테이블 스페이스 크기가 부족할 경우 ALTER TABLESPACE문에 ADD DATAFILE절을 삽입하여 새로운 데이터 파일을 추가하거나 ALTER DATABASE DATAFILE RESIZE를 통해 기존 데이터 파일의 크기를 증가시키면 테이블스페이 스 부족을 해결할 수 있다.

테이블 스페이스 크기를 주기적으로 모니터링하며 사용 률이 80% 이상이 되었을 때 업무량이 적은 시간을 선택하여 크기를 증가시킬 것을 권고한다.

데이터 파일의 크기를 줄이는 경우 해당 데이터 파일 안에 저장되어 있는 스키마 객체의 전체 크기보다 작을 경우는 에러가 발생한다.

데이터 파일 추가 및 삭제

ALTER TABLESPACE TEST_DATA
       ADD DATAFILE '/dev/rdata005_10g' 
       SIZE 10200M;

ALTER TABLESPACE TEST_DATA 
       DROP DATAFILE '/dev/rdata005_10g';

데이터 파일 크기 변경

ALTER DATABASE DATAFILE '/dev/rdata005_10g' RESIZE 10239M;

테이블 스페이스 삭제

DROP TABLESPACE TEST_DATA
   [INCLUDING CONTENTS | INCLUDING CONTENTS AND DATAFILES];

테이블 스페이스에 스키마가 존재할 경우는 Segments still exist in the specified tablespace 에러가 발생/삭제가 불가능하며 이 경우 INCLUDING CONTENTS 옵션을 추가하여 스키마와 함께 삭제가 가능하다.

INCLUDING CONTENTS AND DATAFILES 옵션을 추가할 경우는 데이터 파일도 함께 삭제된다.

  • - 해당 강좌는 도서 " [우리 회사 데이터베이스를 티베로로 변경하기]"의 내용을 옮겼습니다.
  • - 해당 도서는 기간계 DBMS(DATABASE MANAGEMENT SYSTEM)를 티베로로 전환하는 실제 프로젝트를 수행한 실무자가 DBMS 전환 과정과 실제 적용 사례, 문제 해결 과정 등을 자세하게 설명하고 있습니다.

- 강좌 URL : http://www.gurubee.net/lecture/4159

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입