Database/Oracle Exadata

Expert Oracle Exadata 3-A. 하이브리드 컬럼너 압축

Dong538 2023. 1. 9. 01:42

- 오라클 저장 구조

1. 오라클은 데이터를 블록 구조로 저장한다. 블록의 사이즈는 일반적으로 8k 사이즈이고 블록 헤더, row 디렉토리, row 데이터, 여유 공간으로 구성되어 있다. 블록 헤더는 블록의 위에서 시작해서 내려오는 반면 로우 데이터는 바닥에서 시작해서 점차 위로 쌓여간다. 여유 공간은 일반적으로 가운데에 위치한다. 

 

2. 로우는 특정 순서로 저장되어 있지는 않지만 컬럼은 일반적으로 테이블에 정의된 순서로 저장되어 있다. 블록은 각각의 로우마다 로우 헤더가 있으며 각 컬럼에는 컬럼 데이터가 뒤따른다. 로우의 데이터가 하나 이상의 청크에 저장될 수 있기 때문에 row piece라고 한다. 이 경우 다음 조각에 대한 포인터가 존재한다. 

 

3. 컬럼마다 컬럼의 길이를 나타내는 별도 필드가 앞에 존재한다. NULL인 컬럼 값 필드에는 아무것도 저장되어 있지 않으며 NULL 컬럼의 존재는 컬럼 길이 필드 값이 0인 것으로 알 수 있다. 

 

4. PCTFREE: PCTFREE의 목적은 업데이트를 위해 각 블록에 얼마의 여유 공간을 예약해두는 것이다. 이것은 로우의 크기가 커질때 로우의 원래 블록에 공간이 부족할 경우 발생하는 로우 마이그레이션을 방지하기 위해 필요하다. 예를 들어 컬럼 값을 더 긴 값으로 업데이트할 경우 PCTFREE에 예약된 공간이 부족하게 되며, 이 때 새로운 블록으로 이동하는 로우 마이그레이션이 일어난다. PCTFREE를 0으로 설정한 블록은 INSERT가 블록의 거의 대부분을 채울 수 있다. 레코드가 업데이트되어 새로운 데이터가 레코드가 저장된 블록의 가용한 여유 공간에 맞지 않을 때, 데이터베이스는 새로운 블록으로 로우를 이동시키게 된다. 이러한 절차를 로우 마이그레이션이라고 부른다. 원래 블록에서 로우를 완전히 제거하지는 않으며 새롭게 재배치된 로우에 대한 참조 주소를 남겨두어 원래 ROWID가 찾아올 수 있도록 한다. Row chaining은 하나의 piece이상으로 로우를 저장하는 것을 일컫는다. 로우 마이그레이션은 전체 로우가 이동하는 로우 체이닝의 특별한 경우이다. 

 

- 오라클 압축 매커니즘 

1. BASIC: direct path load로 적재되는 데이터만 압축한다. direct path load를 사용하지 않는 INSERT와 같은 변경은 데이터를 압축하지 않은 형식으로 저장되도록 한다. 

create table ... compress;

위와 같은 명령을 실행하면 BASIC 압축이 사용된다. 

 

2. OLTP: OLTP 압축은 direct path load뿐만 아니라 모든 오퍼레이션에 대한 데이터 압축을 허용한다. oltp 압축은 pctfree를 사용하여 각 블록에 10%의 여유 공간을 남겨둠으로써 미래에 업데이트가 가능하도록 한다. basic 압축은 0%의 pctfree 값을 사용한다. 

create table ... compress for oltp;

압축의 문법은 위와 같다. 

hcc를 사용할 수 없는 경우, 예를 들어 direct path load가 아닌 경우 oltp압축을 사용하여 블록을 저장한다. oltp 압축의 특징은 update와 비direct path load insert가 처음에는 압축되지 않고 블록이 가득 차면 압축이 된다는 것이다. 

 

3. HCC: BASIC 압축과 마찬가지로 direct path load를 이용하여 적재되었을 때만 HCC 포맷으로 압축된다. 

3.1. HCC 압축 유형 - Query low: HCC 레벨1은 LZO 압축 알고리즘 사용. 가장 낮은 압축률이지만 최소한의 CPU 사용. 속도에 최적화되어 있다. 예상 압축률은 4x

3.2. HCC 압축 유형 - Query high: HCC 레벨2. ZLIB(gzip) 압축 알고리즘 사용. warehouse high라고도 함. 예상 압축률은 6x

3.3. HCC 압축 유형 - Archive low: HCC 레벨3. 이또한 ZLIB 알고리즘 사용. 예상 압축률 7x

3.4. HCC 압축 유형 - Archive high: HCC 레벨4. Bzip2 압축 사용. 압축 시간은 레벨2와 레벨3보다 몇 배 느림. 그럼에도 레벨3 압축보다 많이 높지 않을 수 있음. 이 레벨은 압축에 필요한 시간은 상대적으로 덜 중요하고 심각한 공간 부족을 겪을 때 사용. 예상 압축률 12x