머리말

디스크 스토리지 시스템들은 데이터베이스 솔루션에 있어서 가장 값비싼 부분이 되기도 한다. 큰 웨어하우스나 많은 양의 데이터를 갖고 있는 데이터베이스의 경우, 스토리지 서브시스템(subsystem)의 비용은 하드웨어 서버와 데이터 서버 소프트웨어 비용을 합친 것을 거뜬히 넘는다. 따라서 스토리지 서브시스템을 조금만 줄여도 전체적인 데이터베이스 솔루션에 상당한 비용 절감 효과를 거둘 수 있다.

행(row) 데이터를 압축하여 스토리지 요구량 줄이고, I/O 효율성을 높이며, 디스크에서 데이터로 더욱 빠르게 액세스 할 수 있는 DB2 9 (이전 코드명 "DB2 Viper") Venom 기술을 소개하고자 한다.

데이터 행(row) 압축 - 어떻게 동작하는가

DB2 9의 "Venom" 기술은 데이터 레코드를 압축할 때 알고리즘에 기반한 딕셔너리를 사용한다. DB2 9은 반복되거나 중복된 데이터가 있는 테이블을 검사하고, 그러한 반복 엔트리에 간단한 숫자 키를 할당하는 딕셔너리를 구축하여, 데이터베이스 테이블에 있는 여러 행(rows)을 압축한다. 텍스트 데이터는 앞뒤로 붙는 공백문자들이나 반복되는 문자열이 많기 때문에 압축이 잘 이루어진다.

DB2는 단순히 특정 필드나 행의 일부가 아닌, 전체 행을 검사하여 반복되는 엔트리나 패턴들이 있는지를 검사한다. 다음 예제를 보자.


표 1. 예제 행
Name Dept Salary City State ZipCode
Fred 500 10000 Plano TX 24355
John 500 20000 Plano TX 24355

Dept 칼럼에서 반복되는 값("500")이 압축되고, 그 외에도 City, State, ZipCode 칼럼에서 반복되는 패턴("Plano, TX, 24355") 역시 하나의 값으로 압축된다. 그림 1은 DB2가 정상적인 방법으로 열을 저장하는 방법과 압축 포맷으로 저장하는 방법을 비교한 것이다.


그림 1. 일반적인 데이터 저장과 압축식 데이터 저장 방식 비교
Comparison of uncompressed and compressed data storage

압축/비압축 검색을 위한 딕셔너리는 데이터베이스 내 비밀 객체에 저장되고, 작은 공간을 차지하며, 빠른 액세스를 위해 메모리에 캐싱된다. 아주 큰 테이블이라 할지라도 압축 딕셔너리는 대게 100 KB 정도이다. 특정 데이터 세트가 압축을 잘 못하거나 많이 압축할 수 없는 데이터 크기가 있을 수 있다. DB2는 지능형 알고리즘을 갖고 있어 이 같은 상황을 파악하고 디스크 공간 절약이라는 효용성이 없다고 판단되면 압축을 하지 않는다.

DB2 for Linux®, UNIX®, Windows®의 데이터 열 압축 기능은 DB2 for z/OS®의 기능과 비슷하다. 하지만 이것은 다른 데이터베이스 벤더들이 제공하는 페이지 레벨 압축 기술과는 다르다. 여기에서 압축 딕셔너리는 데이터베이스의 각 페이지에 대해 만들어진다. 페이지 레벨이 아닌 테이블에서 압축 딕셔너리를 만들기 때문에 전체 테이블의 패턴들이 분석되고 디스크 절약 효과도 높아지게 되는 것이다.

압축 활성화하기

DB2의 데이터 행 압축은 COMPRESS YES 옵션을 사용하여 테이블이 만들어질 때 이루어진다. 또한, ALTER TABLE 명령어를 사용하여 기존 테이블에도 이를 적용할 수 있다. 예를 들어,

CREATE TABLE Sales COMPRESS YES


또는,

ALTER TABLE Sales COMPRESS YES


압축은 테이블 딕셔너리가 생성되어야만 가능하다. 이는 대게 테이블 REORG 단계 동안 발생한다.

큰 테이블을 압축할 때 테이블과 함께 "대표" 세트나 샘플 데이터를 먼저 파퓰레이트 하는 것이 유용하다. 작은 데이터 세트를 사용하면 압축 딕셔너리를 만드는 과정은 매우 빨라질 수 있다. 올바른 대표 샘플 세트라면 테이블에 새로운 데이터가 들어올지라도 이에 대한 별도의 분석이 필요 없이 압축은 잘 적용된다. 하지만 테이블에 저장된 데이터 유형이 여러 번 변화하면 딕셔너리는 REORG를 사용하여 최신 데이터를 반영한다.

압축률 추정하기

DB2에서는 특정 테이블이나 데이터 세트의 압축에 대한 판단을 위해 압축 비율을 추정할 수 있는 INSPECT를 제공한다. 이 툴은 테이블 데이터 샘플을 모아서 압축 딕셔너리를 만든다. 이 딕셔너리는 샘플에 포함된 레코드에 대한 압축률을 테스트할 때 사용된다. 이러한 테스트를 통해서 압축률이 추정된다.

INSPECT ROWCOMPESTIMATE TABLE NAME Sales … 

		RESULTS KEEP <filename>

	

db2inspf <filename> <outfile>


결과를 보려면 INSPECT의 아웃풋을 DB2 유틸리티를 사용하여 포맷해야 한다. 파일은 db2dump 디렉토리에 있다. 샘플 아웃풋은 아래 내용을 참조하라.

  DATABASE: TEST  

  VERSION : SQL09010 

  2005-12-01-13.12.21.232959



  Action: ROWCOMPESTIMATE TABLE

  Schema name: RSAHUJA 

  Table name: Sales 

  ... 

      Percentage of bytes saved from compression: 66 

      Compression dictionary size: 2176 bytes. 

  ... 


데이터 열 압축의 효용성

"Venom" 압축 기술은, 데이터 저장에 필요한 디스크 공간 (그리고 디스크 하위 시스템 주변장치)을 줄여서 스토리지 비용을 50% 이상 절약할 수 있다. 로그 레코드 내에서 DB2가 사용자 데이터를 압축하기 때문에 데이터베이스 로그 크기도 줄어든다.

어떤 경우에는 퍼포먼스까지 높인다. 압축/비압축이 CPU 오버헤드를 야기하긴 하지만, 어떤 상황에서는 퍼포먼스를 높이기도 한다. 디스크에 존재하는 데이터에 액세스 하는 것은 가장 더딘 데이터베이스 작동이라 할 수 있다. 압축된 데이터를 디스크에 저장하여, 더 적은 I/O 연산으로 같은 양의 데이터를 가져오거나 저장한다. 따라서 디스크 I/O 중심의 워크로드의 경우(디스크에 존재하는 데이터에 액세스 되기를 기다리거나 유휴상태일 때) 쿼리 처리 시간이 매우 빨라진다.

더욱이 DB2는 디스크와 메모리(DB2 버퍼 풀)에 압축된 데이터를 저장하기 때문에 사용된 메모리 양이 줄어들고, 다른 데이터베이스나 시스템 작동을 위한 여유 공간이 남는다. 이로서 쿼리나 다른 연산에 대해 데이터베이스 퍼포먼스는 더욱더 높아지는 것이다.

샘플 결과

DB2의 데이터 열 압축 기능을 사용했을 때 어느 만큼의 공간이 절약되는지는 데이터 마다 다르다. DB2 9 베타 버전을 사용하는 사람들은 50% 이상을 절약했다고 하고, 어떤 대형 데이터베이스의 경우 80%까지 절약했다고도 한다. 어떤 데이터 세트의 경우 32KB 페이지를 사용한 179.9GB 테이블은 42.5GB로 줄어들었다. 76.4%나 절약된 것이다.

다음 차트는 다른 테이블에서 DB2 데이터 열 압축 기능을 사용했을 때 어느 만큼의 공간 절약 효과를 거두었는지를 보여주는 예제이다.


그림 2. DB2 데이터 열 압축을 통한 공간 절약
Examples of space savings with DB2 data row compression

InfoWorld의 Sean McCown은 다음과 같이 설명한다.

"새로운 압축 방식은 데이터 유형에 따라 평균 45%에서 75% 정도의 스토리지 절약 효과를 거두고 있다. 이를 테스트 하기 위해 숫자와 텍스트 데이터가 혼합된 40GB 테이블 (약 5억 줄)을 만들어서 이것을 압축된 테이블 포맷으로 반출했다. 압축된 테이블의 크기는 약 17.75GB가 되었다. 56%나 줄어든 것이다."

자세한 내용은 참고자료 섹션을 참조하라.

DB2의 다른 압축 형태

"Venom" 기술의 일부인 데이터 열 압축 외에도 DB2는 스토리지 요구 사항을 더욱 줄일 수 있는 다른 방식들도 제공한다.

NULL 값과 디폴트 값 압축

DB2 for Linux, UNIX, and Windows, Version 8부터는, NULL 값, 길이가 0인 데이터, 시스템 디폴트 값에 스토리지가 사용되지 않는다.

데이터베이스 백업 압축

DB2 for Linux, UNIX, and Windows V8의 Fixpak 4 이후부터 이러한 압축 기능은 더 작은 백업 이미지를 만들어 백업 스토리지 요구량을 줄일 뿐만 아니라 시스템 간 백업도 이동하기가 더욱 쉬워졌다.

XML 태그 대체

XML의 장황한 특성 상 XML 조각과 문서들은 많은 디스크 공간을 소비하기 마련이다. DB2 9은 파싱된 계층형 포맷으로 XML 데이터를 저장하고 태그 이름(가령, employee)을 정수 값(4와 같은)으로 바꾼다. 반복되는 태그에는 같은 숫자 값이 할당된다. 정수 값을 사용하여 텍스트 태그를 저장하면 공간 소비율을 줄일 뿐만 아니라 데이터를 쿼리 할 때도 높은 퍼포먼스를 누릴 수 있다. 더욱이 데이터 행 압축 같은 XML 태그 파싱(정수 값으로 대체하기)은 별도로(사용자가 신경 쓸 필요 없이) 수행되고 사용자와 애플리케이션에 완전히 투명하다.

다차원 클러스터링

인덱스 압축 형태도 V8.1부터는 가능해졌다. 블록 인덱스를 통해서 인덱스 공간이 상당히 많이 절약된다. 이곳에서는 수 천 개의 레코드에 하나의 키(인덱스 엔트리)가 사용된다. (레코드 당 하나의 키가 아니다.)

결론

DB2 9의 데이터 열 압축은 디스크 공간과 스토리지 비용을 많이 줄일 수 있는 혁신적인 신기능이라 할 수 있다. DB2 9을 다운로드 하여 직접 경험해 보기 바란다.

기사의 원문보기


참고자료

교육

제품 및 기술 얻기

토론

+ Recent posts