요구사항: SQL Server 데이터베이스에는 매우 큰 디스크 공간, 수백 GB를 차지하는 테이블(예: 로그 테이블, 요청 로그 테이블)이 있습니다. 테이블 공간 사용량을 줄이는 방법은 무엇인가요? 데이터 압축(공간 절약)은 매우 반복적인 텍스트(예: HTML, JSON, 로그)에 대해 활성화할 수 있습니다.
ROW 압축
압축은 데이터의 물리적 저장 공간은 바뀌지만, 데이터의 논리적 구조는 바꾸지 않습니다. 라인 압축 과정:
각 열의 데이터 타입을 식별하고 이를 가변 길이로 변환하세요 마지막으로, 저장 공간 요청량이 실제 수요로 줄어듭니다 압축 후에는 각 페이지에 저장된 데이터 양이 증가합니다 압축 후에는 메타데이터 양을 줄이세요 예를 들어, 열의 데이터 타입이 smallint라면 시스템은 기본적으로 2바이트를 할당합니다 하지만 실제로는 1바이트의 공간만 사용되며, 테이블에서 압축이 활성화되어 있으면 필요에 따라 할당할 수 있습니다
PAGE 압축
페이지 압축은 행 압축을 향상시키기 위해 추가 연산을 수행합니다 주요 연산: 라인 압축, 접두사 압축, 사전 압축
CPU 소모: PAGE 압축 > 행 압축
테스트
새로운 Users1과 Users2 테이블을 생성하면, 두 테이블 모두 100,000개의 데이터를 삽입하고, SQL 스크립트는 다음과 같습니다:
테이블 공간 점유율(모두 3.27 MB)를 보기 위해서는 명령어가 다음과 같습니다:
아래에 나와 있습니다:
Users2 테이블의 압축 상태를 확인하려면 명령어는 다음과 같습니다:
아래에 나와 있습니다:
sp_estimate_data_compression_savings행, 페이지, 열저장, 열저장 아카이브, XML 압축에 테이블이나 파티션을 활성화할 때 발생할 수 있는 절감 효과를 추정하세요. 명령어는 다음과 같습니다:
출력은 다음과 같습니다:
object_name schema_name index_id partition_number size_with_current_compression_setting(KB) size_with_requested_compression_setting(KB) sample_size_with_current_compression_setting(KB) sample_size_with_requested_compression_setting(KB) 사용자2 dbo 1 1 3368 1296 3448 1328
size_with_current_compression_setting (KB) 3368 KB 현재 압축 설정으로 인덱스는 ≈ 3.29 MB를 차지합니다 size_with_requested_compression_setting (KB) 1296 KB 요청하는 새로운 압축 방식(예: PAGE, ROW)을 활성화하면 예상 용량 ≈ 1.27 MB 페이지 압축을 실행하기 위한 명령은 다음과 같습니다:
효과 비교:Users2 테이블은 압축 전 3.27MB, 압축 후 1.23MB입니다, 아래 그림에서 볼 수 있습니다:
시각화는 다음과 같습니다:
참조:
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다.
하이퍼링크 로그인이 보입니다. |