/*******************************************************************************************************************
-- Title : [SQL2016] 데이터 압축(data_compression) 테스트
-- Reference : https://msdn.microsoft.com/ko-kr/library/cc280449.aspx
-- Key word : data compression 데이터압축 데이터 압축 data_compression page 압축 row 압축 page압축 row압축
*******************************************************************************************************************/
/**************************************************
-- 압축 데이터 생성 및 메타 조회
**************************************************/
-- ROW|PAGE 압축 테이블 생성
create table ttt
(
...
, constraint pk_ttt primary key (col1)
with (data_compression=row|page) on fg_data
) on fg_data;
create table ttt2
(
...
) with (data_compression=row|page)
on fg_data;
-- 테이블 변경
alter table ttt3
rebuild with (data_compression=row|page);
-- 압축 정보 확인
select object_name(i.object_id) "tbl_nm"
, i.name, p.data_compression, p.data_compression_desc
from sys.partitions p
inner join sys.objects o
on p.object_id = o.object_id
and o.type = 'U'
inner join sys.indexes i
on p.object_id = i.object_id
and p.index_id = i.index_id
where data_compression <> 0;
/**************************************************
-- 성능 테스트
**************************************************/
-- Insert(300만건)
* 다른 테이블에서 읽어 CL 테이블, ROW 압축 테이블, PAGE 압축 테이블에 저장.
* 다른 테이블을 읽는데 왜 CL > Row > Page순으로 IO가 다른지 모름.
* CPU는 Page가 다른 두 테이블보다 2개 정도 커짐.
* Write, Dur, Size 모두 CL > Row > Page 순으로 작아짐.
테이블 |
CPU |
Read IO |
Write IO |
Dur(ms) |
Size(kb) |
CL |
10,256 |
993,207 |
98,948 |
40,665 |
694,099 |
Row 압축 |
11,036 |
585,122 |
50,741 |
31,011 |
381,288 |
Page 압축 |
22,125 |
282,528 |
19,945 |
29,106 |
148,336 |
-- Select(100만건)
* Read, Dur는 확실히 Page가 작음.
* 대신 Page의 CPU가 CL대비 2배 정도 증가됨.
테이블 | CPU | Read IO | Write IO | Dur(ms) | Size(kb) |
CL | 984 | 29,046 | - | 8,878 | - |
Row 압축 | 1,182 | 16,036 | - | 3,637 | - |
Page 압축 | 1,547 | 6,509 | - | 2,286 | - |
-- Update(300만건)
* Dur가 왜 Row가 가장 좋은지 모름.
* CPU와 Write는 여전히 Page가 높음.
테이블 | CPU | Read IO | Write IO | Dur(ms) | Size(kb) |
CL | 13,631 | 339,989 | 139,723 | 44,756 | 1,057,915 |
Row 압축 | 8,120 | 47,869 | 47,551 | 14,359 | 381,056 |
Page 압축 | 21,662 | 137,392 | 38,974 | 22,968 | 311,405 |
-- Delete(50만건)
* Select와 유사한 결과를 보임.
테이블 | CPU | Read IO | Write IO | Dur(ms) | Size(kb) |
CL | 1,474 | 399,916 | 22,168 | 20,657 | 706,243 |
Row 압축 | 1,250 | 142,628 | 7,917 | 6,281 | 254,240 |
Page 압축 | 1,738 | 115,821 | 6,466 | 4,014 | 211,717 |