Bigfile Tablespace


Bigfile tablespace(BFT)는 아주 큰 크기의 datafile을 가질 수 있는 tablespace이다.

Oracle Database 10g의 새로운 addressing 기법에 의해, 하나의 datafile이 40억개의 block을 가질 수 있게 되었다.

그래서, 최대 datafile 크기는 block의 크기에 따라 8TB ~ 128TB까지 이뤄질 수 있다.

이와 구분하기 위하여 상대적으로 작은 여러 개의 datafile을 갖고 있는 기존의 tablespace는 Smallfile tablespace라고 한다.

Oracle Database 10g는 이 두 종류의 tablespace를 모두 가질 수 있다. BFT는 오직 Locally-managed tablespace를 지원한다.

이를 사용하면, Disk 공간관리가 쉬워지고, 더 이상 tablespace에 datafile을 추가하는 작업을 수행할 필요가 없다.

 


위 그림에서 볼 수 있는 바와 같이, tablespace와 datafile의 관계가 1:M인 경우는 관리 복잡성이 증가된다.

BFT는 논리적으로 Tablespace와 datafile가 동일하게 다뤄질 수 있는 개연성을 제공하는 것이다.

예전 버전에서, datafile에 대해 적용하였던 operation들이 지금은 tablespace에 대해서 적용 가능하다.

BFT와 OMF(Oracle Managed File)가 함께 사용된다면, datafile은 사용자에게 완벽히 투명한 존재가 된다.

왜냐하면, 해당 datafile은 사용자에 의해 전혀 참조될 일이 없기 때문이다.

 

장점

■ 저장공간 극대화

하나의 데이터베이스가 가질 수 있는 데이터의 크기는 8EB이다.

최대 데이터 크기는 산출하는 공식은

  • M = D(최대 파일 수) * F(파일 당 최대 block 수) * B(최대 block 크기)
  • 예전 버전 : (D = 64K, F = 4M and B = 32K) => 8PB
  • 현재 버전 : (D = 64K, F = 4G and B = 32K) => 8EB

☞ 1PB (petabyte) = 1024TB (terabyte); 1EB (exabyte) = 1024PB = 1,048,576TB = 2**60 bytes! ☜

 

■ 관리 용이성 제공

Tablespace 자체를 Disk 공간관리의 단위로 간주되기 때문에 Database 관리가 간소해 진다.

DBA가 관리해야 될 datafile 수도 혁신적으로 줄어들 수 있다.

현재, 더욱 더 많은 파일을 가질 수 있는 64bit OS가 일반화 되고 있고, 500GB 이상을 수용할 수 있는 Disk drive가 출시되고 있는 상황에서 BFT의 매력은 더욱 더 증가할 것으로 판단된다.

 

유의 사항

동적으로 Logical volume을 확장할 수 있고 striping/RAID를 지원하는 ASM(Automatic Storage Management) 또는 LVM(Logical Volume Manager)과 함께 BFT를 사용해야 한다.

특히, Striping을 지원하지 않는 Filesystem에 BFT를 생성해서는 안된다.

왜냐하면, 이러한 환경에서 Parallel Query의 성능은 매우 떨어질 것으로 판단되며, RMAN 백업 시 사용되는 병렬처리 속도 또한 마찬가지의 결과를 가져올 수 있기 때문이다.

그리고, Disk 가용 공간이 제한된 경우나 공간을 늘이는 방법이 또 다른 Disk에 새로운 datafile을 추가하는 방법밖에 없는 경우는 BFT 사용이 비 효율적이다.

그러나, 언급된 두 가지의 상황이, 대용량 database에서는 쉽게 찾아 볼 수 없는 것이 현실이다.

‘Large File’ option을 지원하지 않는 platform에서 BFT를 사용하면 Tablespace 가용공간의 제약사항이 급증한다.

 

Extended ROWID Format and BFT


BFT를 표현하는 ROWID는 상대파일 number를 포함하고 있지 않다. 대신 그 자리에 기존의 Rowid 보다 더욱 큰 block number를 저장할 수 있는 체계를 적용하고 있다.

예전 버전의 ROWID 형식 : OOOOOOFFFBBBBBBRRR
  • OOOOOO : database segment를 지정하는 data object number
  • FFF : 상대파일 number
  • BBBBB : 실제 Row를 포함하고 있는 data block number
  • RRR : 특정 block 내의 Row를 지정하는 slot number

Bigfile tablespace에는 상대파일 number가 1024인 파일 하나만이 존재한다.

그러므로 파일 number를 ROWID에서 표현할 필요가 없고, FFF 와 BBBBBB 범위는 block number를 나타내는데 쓰인다.

BFT의 ROWID 정보를 얻어내기 위해서는 DBMS_ROWID package를 사용해야만 한다.

 

SQL> SELECT DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID,’BIGFILE‘) from sales
where rownum < 2

/

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID,’BIGFILE’)

———————————————-

1024

SQL> SELECT DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID,’SMALLFILE‘) from sales

where rownum < 2

/

DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID,’SMALLFILE’)

————————————————


5


Comments

comments

haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

Bigfile Tablespace”의 1개의 댓글

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다