소개
기존의 다양한 압축 기능에 더해서 이제 XML 컬럼과 XML 인덱스에 압축 기능을 지원합니다(SQL Server 2022와 Azure SQL 포함).
- CREATE TABLE (또는 ALTER TABLE, XML_COMPRESSSION 옵션 참조)
- CREATE INDEX (또는 ALTER INDEX, XML_COMPRESSSION 옵션 참조)
XML_COMPRESSION 옵션
CREATE/ALTER TABLE 또는 CREATE/ALTER INDEX에서 XML 데이터의 압축 여부를 XML_COMPRESSION 옵션으로 지정할 수 있습니다(위 링크에 있는 문서 내용과 예제 코드 참조), 또한 Partition Table/Index의 경우 원하는 Parition Number를 지정할 수 있습니다.
아래 간단한 예제 코드로 구문과 결과를 확인해 보겠습니다.
[코드-1] 대량 XML 데이터가 필요해서 SQL Server의 xml 실행 계획을 읽어서 테이블 생성
SELECT qp.query_plan
INTO xmlplan
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp;
[코드-2] 압축 적용 전 크기 확인, data 항목: 압축 전 136,480 KB
EXEC sp_spaceused N'xmlplan';
[코드-3] xml 압축 적용 여부 확인 (적용 전)
SELECT rows, xml_compression_desc, partition_number, *
FROM sys.partitions
WHERE object_id = OBJECT_ID('xmlplan');
[코드-4] XML 압축 적용
ALTER TABLE xmlplan
REBUILD PARTITION = ALL
WITH (
XML_COMPRESSION = ON — ON/OFF
);
[코드-5] 압축 후 용량 확인: 41,552 KB
EXEC sp_spaceused N'xmlplan';
압축 전 용량 136MB에서 42MB로 줄어든 것을 볼 수 있습니다. 위의 경우 대략 70% 정도의 압축률이었습니다.
정리
대용량의 XML 데이터나 인덱스 특히 Log 성 대용량 테이블이나 Partition이 적용된 테이블 및 DW 성 테이블이라면 좋은 선택지가 될 수 있겠습니다.
모두 건강하세요.
김정선 드림