페이지 압축 구현

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

이 문서에서는 데이터베이스 엔진이 페이지 압축을 구현하는 방법을 요약합니다. 이 요약에서는 사용자의 데이터에 필요한 스토리지 공간을 계획하는 데 도움이 되는 기본 정보를 제공합니다.

페이지 압축은 테이블, 테이블 파티션, 인덱스 및 인덱스 파티션에 대한 압축과 유사합니다. 테이블에 대한 다음 페이지 압축 설명은 모든 개체 유형에 대한 페이지 압축에 동일하게 적용됩니다. 다음 예제에서는 문자열을 압축하지만 접두사 및 사전 압축은 모두 다른 데이터 형식에 동일한 원칙을 적용합니다.

페이지 압축을 사용하여 테이블 및 인덱스의 리프 수준을 압축하는 작업은 다음 순서로 세 가지 작업으로 구성됩니다.

  1. 행 압축
  2. 접두사 압축
  3. 사전 압축

페이지 압축을 사용하는 경우 행 압축만 사용하여 리프 수준 이외의 인덱스 페이지가 압축됩니다. 행 압축에 대한 자세한 내용은 행 압축 구현을 참조하세요.

접두사 압축

압축되는 각 페이지에 대해 접두사 압축은 다음 단계를 사용합니다.

  1. 각 열에 대해 각 열의 값에 대한 스토리지 공간을 줄이는 데 사용할 수 있는 값이 식별됩니다.

  2. 각 열의 접두사 값을 나타내는 행이 CI(압축 정보) 구조에서 페이지 헤더 바로 다음에 만들어지고 저장됩니다.

  3. 열에서 반복되는 접두사 값은 해당 접두사에 대한 참조로 대체됩니다. 행의 값이 선택한 접두사 값과 정확히 일치하지 않는 경우에도 부분 일치를 표시할 수 있습니다.

다음 그림에서는 접두사 압축 전에 테이블의 샘플 페이지를 보여 줍니다.

Diagram of page before prefix compression.

다음 그림에서는 접두사 압축 다음의 동일한 페이지를 보여 줍니다. 접두사는 헤더로 이동되고 열 값은 접두사에 대한 참조로 변경됩니다.

Diagram of page after prefix compression.

첫 번째 행의 첫 번째 열에서 값 4b 은 접두사(aaab)의 처음 네 문자가 해당 행과 문자 b에 대해 있음을 나타냅니다. 이렇게 하면 원래 값 aaabb인 결과 값이 만들어집니다.

사전 압축

접두사 압축이 완료되면 사전 압축이 적용됩니다. 사전 압축은 페이지의 아무 곳이나 반복되는 값을 검색하여 CI 영역에 저장합니다. 접두사 압축과 달리 사전 압축은 하나의 열로 제한되지 않습니다. 사전 압축은 페이지에서 발생하는 반복된 값을 교체할 수 있습니다. 다음 그림에서는 사전 압축 다음의 동일한 페이지를 보여 줍니다.

Diagram of page after dictionary compression.

이 값 4b 은 페이지의 여러 열에서 참조되었습니다.

페이지 압축이 발생하는 경우

페이지 압축이 발생한 새 테이블이 만들어지면 압축이 발생하지 않습니다. 그러나 테이블의 메타데이터는 페이지 압축을 사용해야 임을 나타냅니다. 데이터가 첫 번째 데이터 페이지에 추가되면 데이터는 행 압축됩니다. 페이지가 가득 차 있지 않으므로 페이지 압축을 통해 이점을 얻을 수 없습니다. 페이지가 가득 차면 추가할 다음 행에서 페이지 압축 작업을 시작합니다. 전체 페이지를 검토합니다. 각 열은 접두사 압축에 대해 평가된 다음 모든 열이 사전 압축에 대해 평가됩니다. 페이지 압축으로 인해 페이지에 추가 행을 위한 충분한 공간이 만들어지면 행이 추가되고 데이터가 행 압축 및 페이지 압축 모두에 추가됩니다. 페이지 압축으로 얻은 공간이 CI 구조에 필요한 공간을 뺀 값이 중요하지 않은 경우 페이지 압축은 해당 페이지에 사용되지 않습니다. 이후 행은 새 페이지에 맞거나, 그렇지 않으면 새 페이지가 테이블에 추가됩니다. 첫 번째 페이지와 마찬가지로 새 페이지는 첫 번째 페이지 압축되지 않습니다.

데이터가 포함된 기존 테이블이 페이지 압축으로 변환되면 각 페이지가 다시 작성되고 평가됩니다. 모든 페이지를 다시 빌드하면 테이블, 인덱스 또는 파티션이 다시 작성됩니다.

다음 단계