SQL/Oracle

[ORACLE] 파티션 테이블 개념(TABLE PARTITIONING)

멍청한 코더 2021. 10. 17.
728x90




안녕하세요~! '멍청한코더'입니다!
오늘은 파티셔닝 즉 테이블 파티션 생성에
대한 개념을 알아보려고 합니다
저 역시도 그냥 간간히 만들어 쓰기만 해서
심도 있게 알아볼 생각이 없었는데
이번 기회에 함께 알아보시죠!!

오라클 테이블에서 중요하고도 많이
사용되는 형태의 테이블 입니다
제가 다니는 회사는 엑사오라클을
사용하고 있어 인덱스도 사용하지 않고
풀스캔을 때리는 경우가 허다하지만
DELETE, UPDATE 등을 할 때
전체범위에서 찾는것은 굉장히
오랜 시간이 걸립니다...


WHERE 조건절을 통해서 범위를
준다고 해도 전체 테이블에서
그 조건을 찾는것은
굉장히 시간이 걸리는 일이겠죠?
그래서 테이블을 일정한 조건으로 잘라준다
이런 개념으로 생각하시면 편리할 것 같습니다

컴퓨터 작동 원리

그럼 컴퓨터의 입장에서 생각해볼까요?
모든 컴퓨터의 작동 원리는 동일합니다.
데이터를 파일에 저장해 두고
해당 데이터가 수정되거나 조회되는 경우

메모리로 복사한 후 메모리에 작업하게 됩니다
이 공간을 일반적으로 버퍼(Buffer)라고 부릅니다
이렇게 작업을 하는 이유는
디스크 vs 메모리 처리속도를 비교하였을때
메모리에서의 처리속도가 월등히 빠르기 때문입니다

오라클에서는 이 때 사용하는 메모리를
Database Buffer Cache
(데이터베이스 버퍼 캐시)라고 합니다
Database Buffer Cache라는 공간을 TABLESPACE(테이블스페이스)라는
논리적인 공간으로 나누어서 사용하게 됩니다.

즉, 오라클에서의 작업은 평소에는
디스크의 데이터 파일에
내용을 안전하게 저장하고 있다가
필요할 경우 메모리의 TABLESPACE 라는
공간으로 해당 테이블을 복사해 놓고 작업합니다

728x90


예를 들어서 생각해 볼게요
가게에서 우리가 물건을 산다고 생각해보세요
매장 : TABLESPACE
창고 : 데이터
사고자 하는 물건 : 테이블, 인덱스 등의 오브젝트

메모리에 해당 테이블이 없을 경우 데이터 파일에서
해당 데이터를 찾아서 메모리로 가져온 후 작업을 하게 되는데
위에서 언급드린 것처럼 하나의 데이터 파일에 아주 많은
데이터가 들어가 있을 경우 문제가 발생합니다
찾기도, 관리(수정/삭제)하기도 어렵기 때문입니다
그래서 하나의 큰 덩어리를 여러개로 쪼개서 데이터를 분산시키게
되었는데 이것을 테이블 파티셔닝이라고 합니다
학교에서 1학년을 통째로 관리하지 않고 1반, 2반 등으로
쪼개서 관리하는 것과 같은 원리입니다

PARTITION 종류

  • RANGE/LIST/HASH/ PARTITIONING
  • EXTENDED COMPOSITE PARTITIONING
    • RANGE( -list, -hash, range) 
    • LIST( -range, -list, -hash)
    • INTERVAL( -range, -list, -hash)
  • INTERVAL PARTITIONING
  • REF PARTITIONING

사실 여기에 있는 것들을 다 쓰지도 않습니다...
DBA가 아닌 일반 개발자인 저로서는
파티션 / 서브파티션 등을 위해서
RANGE, LIST, HASH 파티션을 조금 쓰는 정도 입니다..
하지만 DBA시라면 이 외에도 더 깊게 쓰실지도 모르겠습니다



728x90

댓글