행 저장 객체와 열 저장 객체에 대한 다양한 압축 옵션을 갖고 있다. 각 객체에 대한 압축 옵션은 다음과 같다.
Rowstore | Columnstore |
---|---|
Row Compression | Columnstore Compression |
Page Compression | Columnstore Archival Compression |
파티셔닝된 인덱스와 테이블의 경우, 각 파티션에 다른 압축 유형을 혼합하여 사용할 수 있다. 다른 파티션들은 동일한 압축 옵션을 가질 필요가 없다.
목적
행 단위로 데이터를 압축하여 저장 공간을 절약하고, 디스크 I/O를 줄이는 데 목적이 있다. 이 압축 방식은 데이터의 실제 필요 크기에 맞춰 저장 공간을 동적으로 조정함으로써 공간을 절약한다.
압축 수준
상대적으로 낮은 압축률을 제공하지만, 압축과 압축 해제 과정에서의 CPU 오버헤드가 비교적 낮다. 이로 인해 쿼리 성능에 미치는 영향이 적어, 자주 액세스되는 데이터에 적용하기 적합하다.
사용 시나리오
고정 길이 데이터 필드를 가진 테이블에서 더 큰 이점을 볼 수 있다. 또한, 데이터의 크기가 열의 최대 크기보다 작은 경우에 효과적이며, 특히 공간 절약이 중요하지만 쿼리 성능에 큰 영향을 주고 싶지 않은 경우에 적합하다.
Page Compression은 Row Compression 도 포함하고 있다. 그 이후에는 중복된 패턴을 찾아내어 더 작은 값으로 교체한다. 이는 주로 중복이 많은 데이터에서 높은 효과를 보이며, 중복이 적은 경우에는 압축 효과가 감소할 수 있다. 왜냐하면 찾아서 대체할 반복 패턴이 없기 때문이다.
목적
데이터를 페이지 단위로 압축하여 더 높은 압축률을 달성하고, 저장 공간을 크게 절약하는 데 목적이 있다. 이 방식은 Row Compression을 포함하며, 추가적으로 프리픽스 압축과 딕셔너리 압축을 사용한다.
압축 수준
높은 압축률을 제공한다. 이는 데이터의 반복되는 패턴을 식별하고 이를 효율적으로 압축하여 달성된다. 다만, 압축과 압축 해제 과정에서 CPU 사용량이 증가할 수 있다.
사용 시나리오
대량의 반복 데이터를 포함하는 테이블에 특히 유용하다. 페이지 압축은 저장 공간 절약을 최대화하고자 할 때, 특히 데이터 액세스 패턴이 비교적 덜 빈번한 경우에 이상적이다.
기본적으로 모든 Columnstore 객체가 Columnstore Compression 을 갖고 있다. 기본 값이기 때문에 별도 설정이 불가능하다.
목적
데이터를 열별로 저장하고 압축하여, 쿼리 성능을 최적화한다. 대규모 데이터웨어하우스와 OLAP(Online Analytics Processing) 시스템에서 자주 사용된다.
압축 수준
표준 압축 수준을 제공하며, 쿼리 성능과 저장 공간 효율 사이의 균형을 맞춘다. 데이터를 열별로 분리하여 저장함으로써, 쿼리가 필요로 하는 데이터에 빠르게 엑세스할 수 있도록 한다.
사용 시나리오
자주 접근되거나 쿼리 성능이 중요한 데이터에 주로 사용된다. 압축을 통해 저장 공간을 절약하면서도, 데이터 액세스 속도에 미치는 영향을 최소화하려는 경우에 적합하다.
그러나 더 압축하고 싶다면, Columnstore Archival Compression 이 있다.
목적
보다 고도의 압축을 제공하여, 저장 공간을 최대한으로 절약하기 위해 설계되었다. 주로 접근 빈도가 낮은 장기 보관 데이터에 사용된다.
압축 수준
Columnstore Compression에 비해 더 높은 압축 비율을 제공한다. 이는 데이터를 아카이브할 때 유용하며, 저장 비용을 크게 절감할 수 있다. 다만, 높은 압축률 때문에 데이터 액세스 시 약간 더 많은 시간이 소요될 수 있다.
사용 시나리오
자주 사용되지 않거나, 쿼리 속도보다는 저장 공간 절약이 더 중요한 데이터에 적합하다. (예. 규제 준수를 위해 오랜 기간 데이터를 보관해야 하는 경우)
어떤 종류의 객체를 가지고 있던, 어느 정도의 압축을 선택하던, Azure SQL Database와 클라우드의 큰 이점 중 하나는 이 모든 것이 통합되어 있다는 것이다.
Storage Saving, 저장 공간 절약
Reduce the size of the database.
Improved I/O Performance
Data is stored in fewer pages.
데이터는 더 적은 페이지에 저장되어, 작업을 수행할 때 검색해야 하는 페이지 수도 더 적다.
사용될 수 있는 객체의 타입은 ...
인덱스와 클러스터링
데이터베이스에서 인덱스는 특정 열(또는 여러 열)의 값을 사용하여 테이블의 특정 행에 빠르게 액세스 할 수 있게 해주는 데이터 구조이다. 인덱스를 사용하면 데이터베이스 엔진은 검색이나 정렬을 빠르게 수행할 수 있다.
클러스터링은 데이터의 물리적인 저장 순서를 의미한다. 클러스터링된 테이블은 특정 열(또는 열의 조합)을 기준으로 데이터를 물리적으로 정렬하여 저장한다. 이로 인해 해당 열을 기준으로 검색 또는 정렬할 때 효율적인 성능을 얻을 수 있다.
Clustered Index, 클러스터형 인덱스
- 클러스터형 인덱스는 테이블의 실제 데이터의 물리적인 순서와 동일하다.
- 클러스터형 인덱스를 가지는 열(또는 열의 조합)은 테이블의 데이터를 정렬하는 기준이 된다.
- 클러스터형 인덱스가 설정된 열을 기준으로 데이터를 찾거나 정렬하는 작업이 매우 효율적으로 이루어진다.
- 하나의 테이블에는 하나의 클러스터형 인덱스만 존재할 수 있다.
클러스터형 인덱스는 주로 검색 성능을 향상시키기 위해 사용되며, 테이블의 데이터를 물리적으로 정렬함으로써 디스크 I/O를 최소화한다. 그러나 클러스터형 인덱스를 사용할 때 삽입, 업데이트, 삭제와 같은 데이터 변경 작업은 느려질 수 있다. 이는 새로운 데이터가 정렬된 위치에 삽입되거나, 기존의 데이터가 업데이트되거나 삭제될 때 해당 테이블의 물리적인 구조를 변경해야 하기 때문이다.
Production.TransactionHistory 테이블의 모든 파티션을 다시 빌드하고 행 단위의 데이터 압축을 사용하여 변경하는 명령문
ALTER TABLE Production.TransactionHistory
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = ROW)
사용될 수 있는 객체의 타입은 ...