머리말

대용량 데이터베이스와 테이블 관리는 어려운 일이다. 테이블 크기가 커지면, 그렇게 큰 테이블에서 전체적으로 모든 데이터를 관리하는 것보다 데이터를 몇 개의 청크(chunks) 혹은 범위를 제한하여 관리하는 것이 더 쉬운 방법이 될 수 있다. 이러한 데이터 관리 방식은 새로운 데이터의 청크(chunks)나 범위가 추가되거나 오래된 데이터가 빈번히 테이블에서 삭제될 때 특히 유용하다. (예를 들어, 데이터 웨어하우징 환경에서는 일반적인 롤인과 롤아웃 작동).

DB2 9의 테이블 (범위) 파티셔닝 기능으로 관리가 쉬워지고, 퍼포먼스가 높아지며, 대용량 데이터베이스의 확장성도 더욱 향상된다.

테이블 파티셔닝이란?

테이블 파티셔닝(종종 ‘범위 파티셔닝’이라 불리운다.)은 데이터 구성 스킴(scheme)으로서, 한 개 이상의 테이블 칼럼의 값에 따라, 테이블 데이터는 데이터 파티션이라고 하는(데이터베이스 파티션이나 DPF와 혼돈하지 않길 바란다.) 여러 스토리지 객체들로 나뉘어 진다. 이러한 스토리지 객체들은 다른 테이블 공간 또는 같은 테이블 공간, 또는 이 두 가지를 혼용하여 존재할 수 있다.

DB2 9은 다양한 애트리뷰트에 따라서 데이터 파티션이나 데이터 범위를 지원한다. 일반적으로 사용되는 파티셔닝 스킴은 날짜이다. 데이터 파티션에서 연도(year)나 달(month)별로 데이터를 묶을 수 있다. 또한 파티셔닝에는 숫자 애트리뷰트도 가능하다. 예를 들어, 1에서 백만 까지의 ID를 가진 기록들이 하나의 데이터 파티션에 저장되고, 백만에서 2백만 까지의 ID가 또 다른 데이터 파티션에 저장된다. 또는, 하나의 데이터 파티션에 A-C로 시작하는 이름을 가진 고객들을 저장하고, 두 번째 파티션에는 D-M, 세 번째 데이터 파티션에는 N-Q, 마지막 데이터 파티션에는 R-Z 등으로 저장할 수 있다.

(데이터 파티션 연산에 유용한) 이름이나 숫자로 데이터 파티션을 참조하는 옵션이 있지만, 데이터 파티션은 애플리케이션에 대해 투명하다. 다시 말해서, 애플리케이션은 칼럼과 테이블 이름을 지정하여 데이터에 액세스 할 수 있고, 데이터가 어떤 데이터 파티션에 있는지를 알 수 있다.

DB2 for Linux®, UNIX®, Windows®의 테이블 파티셔닝 기능은 DB2 for z/OS®, Informix® Dynamic Server, Informix Extended Parallel Server의 파티셔닝 기능과 비슷하다. DB2 for z/OS, DB2 for iSeries™와 DB2 for Linux, UNIX, Windows는 공통모듈을 사용하지만, 하위세트(subset)의 구현은 다르다. DB2 for Linux, UNIX, Windows는 다른 두 제품의 신택스 보다 훨씬 더 간결한 축약 신택스를 사용한다.

테이블 파티셔닝 효과

DB2 9의 테이블 파티셔닝의 효과는 다음과 같다:

관리 향상: DB2 9에서는 다양한 데이터 파티션들이 독립적으로 관리된다. 예를 들어, 전체 테이블 대신 개별 데이터 파티션을 백업 및 복원할 수 있다. 따라서 시간이 오래 걸리는 관리 작업을 더 작은 작업 단위로 나눌 수 있는 것이다.

쿼리 퍼포먼스 향상: DB2 옵티마이저는 데이터 파티션을 인식한다. 따라서 쿼리가 실행 중일 때 오직 관련 데이터 파티션만 스캔된다. 쿼리에 영향을 받지 않는 데이터 파티션은 스캔하지 않도록 하여 퍼포먼스를 높인다.


그림 1. 관련 파티션만 스캐닝 하기
Scanning only relevant partitions

빠른 롤-인 / 롤-아웃 : DB2 9은 데이터베이스를 끄지 않아도 테이블에서 데이터 파티션을 쉽게 추가 또는 제거할 수 있다. 이 기능은 의사 결정 지원(decision-support) 쿼리를 실행하기 위해 데이터를 자주 로딩 또는 삭제해야 하는 데이터 웨어아우스 환경에 특히 유용하게 사용된다. 어떤 보험 데이터 웨어하우스에 3년 간의 클레임 내역이 저장되어 있다고 가정해 보자. 매 달 웨어하우스로 로딩 및 롤아웃 되면서, 가장 오래된 달은 활성 테이블에서 압축 및 제거(롤아웃) 될 수 있다. 이렇게 데이터 파티션을 롤아웃 하는 방식은 delete 문 수행 log를 남길 필요가 없기 때문에 더욱 효율적이다.

스토리지 비용의 최적화: DB2 9의 테이블 파티셔닝은 계층적 스토리지 모델과 더 잘 통합된다. 가장 활성화 된 데이터 파티션에 가장 빠르고 비싼 스토리지 하드웨어를 사용하기만 해도 DB2 9은 전체 스토리지 비용을 최적화 하고 퍼포먼스를 높일 수 있다. 최근 세 달 동안의 데이터에 대해서만 대부분의 쿼리가 실행한다면, 오래된 데이터에 대해서는 좀 더 느리고 덜 비싼 스토리지 하드웨어를 할당할 수 있다.

더욱 커진 테이블 용량: 파티셔닝 없이는 스토리지 객체(테이블)가 보유할 수 있는 최대 데이터의 양이 제한된다. 하지만 테이블의 콘텐트를 여러 스토리지 객체나 데이터 파티션으로 나누고, 각각의 테이블 파티션이 파티션 되지 않은 테이블이 보유할 수 있는 데이터 만큼을 지원한다고 볼 때 가상으로는 무제한 크기의 데이터베이스를 효과적으로 만들 수 있다.

더욱 유연해진 인덱스 배치: DB2 9에서는 파티션 테이블용 인덱스들이 고유의 스토리지 객체(테이블 공간)에 저장될 수 있다. 파티션 되지 않은 테이블의 경우 같은 스토리지 객체에 저장되는 것과는 반대되는 이치이다. 이러한 인덱스 배치로 인해, 테이블에 있는 인덱스 데이터로 효율적인 동시 액세스가 가능해져서, 더욱 빠른 인덱스 연산(드롭 인덱스, 온라인 인덱스 생성, 인덱스 재구성)이 가능하고, 테이블 증가를 관리하며, I/O 경쟁을 줄일 수 있다.

"DB2 9의 신기능을 소개하게 되어 기쁘게 생각한다. ALTER TABLE에 대한 확장된 기능은 잘 작동하고, 생산성을 높이며 시간도 줄인다. 파티션된 테이블의 인덱스를 어디에나 둘 수 있다는 것은 지정된 테이블 공간 밖에서 실행할 때 특히 유용하다.”
- Ellen Reys-Klebaner, Chief Database Architect, Visa

테이블 파티션 생성 및 사용

DB2에서는 테이블 파티션 생성이 매우 유연하다. 예를 들어, 1년치 데이터가 있고, 이것을 날짜 별로 파티션 하여, 한 분기씩 개별 데이터 파티션에 있도록 한다. 아래 create 테이블 신택스는 이를 쉽게 수행하는 방법을 설명한다. 또한 그래픽 DB2 Control Center를 사용하여 데이터 파티션을 생성 및 관리할 수 있다.

CREATE TABLE orders(id INT, shipdate DATE, …)

  PARTITION BY RANGE(shipdate)

    (

    STARTING '1/1/2006' ENDING '12/31/2006' 

      EVERY 3 MONTHS

    )


이렇게 하면 네 개의 데이터 파티션을 가진 테이블이 만들어지고 각각 세 달치의 데이터를 갖게 된다.


그림 2. 네 개의 데이터 파티션을 가진 테이블
Table with 4 data partitions

예제에서 설명하는 것처럼, 데이터 파티션 범위를 구체적으로 지정하고, 시작과 종료 범위를 만들고, 각 데이터 파티션에 이름을 짓는 것이 가능하다. 데이터 파티션의 네이밍은 DETACH 같은 데이터 파티션 조작을 수행하는데 유용하다.

CREATE TABLE orders(id INT, shipdate DATE, …)

  PARTITION BY RANGE(shipdate)

    (

  PARTITION 4q05 STARTING MINVALUE,

    PARTITION 1q06 STARTING '1/1/2006',

    PARTITION 2q06 STARTING '4/1/2006',

    PARTITION 3q06 STARTING '7/1/2006',

    PARTITION 4q06 STARTING '10/1/2006' 

                  ENDING ‘12/31/2006'

    )


테이블 파티셔닝을 사용하면 데이터를 동시에 롤인, 롤아웃 할 수 있다. ALTER TABLE 명령어의 ATTACHDETACH 옵션들은 이러한 수행을 하도록 한다. DETACH를 사용하여 기존 데이터 파티션이나 값의 범위가 별개의 테이블로 나뉜다. 롤아웃(분리된) 테이블은 드롭(삭제) 혹은 별도로 저장되거나 느린 스토리지로 옮겨질 수 있다.

마지막 예제에서 만들어진 주문 테이블에 단 1년짜리(2006) 데이터를 저장해야 할 경우도 있다. 오래된(2006년 이전) 데이터를 포함하고 있는 파티션에 DETACH 연산을 수행할 수 있다.

ALTER TABLE orders 

	DETACH PARTITION qold INTO oldorders


이와 마찬가지로, 한 테이블에 있는 새로운 데이터 파티션으로서 데이터를 붙이는(attach하는) 것(롤인) 역시 쉽다. 롤인 될 데이터는 처음 개별(스테이징) 테이블에 로딩되고 필요에 따라 변환 및 제거 과정을 거치며 이미 존재하는 테이블에 추가(attach)된다.(추가해주세요) 그 예가 아래 보여진다.

// CREATE TABLE neworders

// load / insert desired data into neworders

// transform or cleanse new data if neeeded

  ALTER TABLE orders

  	ATTACH PARTITION 1q07

  	STARTING '01/01/2007'

  	ENDING   '03/31/2007'

  	FROM TABLE neworders 

// COMMIT 

// SET INTEGRITY …

// COMMIT


롤인 된 데이터가 애플리케이션에 보이기 전에 (새로운 데이터의 유효성을 검사하고 글로벌 인덱스를 관리하기 위해) SET INTEGRITY 문의 실행으로 작업이 확약될 필요가 있다.

그림 3은 이전 예제에 사용되었던 주문 테이블의 롤-인 / 롤-아웃 데이터 모습이다.


그림 3. 데이터 파티션 롤-인 / 롤-아웃
Rolled-in and rolled-out data partitions

테이블 파티셔닝과 기타 구성 스킴

DB2 9의 테이블 파티셔닝은 다른 데이터 구성 스킴들과 결합하여 사용되거나 독립적으로 사용될 수 있다. CREATE TABLE 문의 각 구절에는 데이터가 구성되는 방법을 나타내는 알고리즘이 포함되어 있다. 다음 세 개의 구문들은 조합되어 사용될 수 있는 데이터 구성 레벨이다.

  • DISTRIBUTE BY -- 데이터를 공평하게 데이터베이스 파티션에 분산한다. 이 구절을 사용하여 인트라쿼리(intraquery) 병렬 처리가 가능하고 각 데이터베이스 파티션에 로드를 분산할 수 있다. 이 개념은 데이터베이스 파티셔닝으로 알려져 있고 DB2에서 Database Partitioning Feature (DPF)를 사용하여 실행한다.
  • PARTITION BY -- 같은 데이터 파티션에 같은 차원의 비슷한 값으로 행(row)을 그룹핑한다. 이 개념은 테이블 파티셔닝이라고 한다.
  • ORGANIZE BY -- 같은 테이블 확장에서 여러 차원에 대한 비슷한 값으로 행을 그룹핑 한다. 이 개념은 다차원 클러스터링(MDC)이라고 한다.

이 신택스를 사용하면 구절 간 일관성을 유지하는 것이 가능하고 미래의 데이터 구성 알고리즘도 가능하다. CREATE TABLE 문의 DISTRIBUTE BYPARTITION BY를 결합하면 데이터는 여러 테이블 공간에 걸쳐 존재하며 데이터베이스 파티션 전반으로 확대된다.

DB2 9은 데이터를 동시에 그룹핑하는 세 개의 방법을 지원하는 최초의 데이터 서버이다. 이는 데이터 관리와 정보 가용성을 향상시키는 크나큰 혁신이다.

그림 4는 서로 연결되어 사용되는 세 개의 DB2 데이터 구성 스킴이다:


그림 4. 세 개의 DB2 데이터 구성 스킴
Three DB2 data organization schemes

맺음말

DB2 9의 테이블 파티셔닝은 큰 볼륨을 쉽고 빠르게 관리할 수 있는 강력한 기능을 제공한다. DB2 9을 다운로드 하여 이 글에서 설명한 기능과 기타 기능들을 직접 경험해 보기 바란다.

기사의 원문보기


참고자료

교육

제품 및 기술 얻기

토론

+ Recent posts