SQL Server 데이터 압축은 읽기 전용 데이터베이스에 범주 적으로 적합합니까?


11

내가 읽은 SQL Server 데이터 압축에 대한 일부 문헌은 쓰기 비용이 일반적으로 필요한 것의 약 4 배로 증가한다고 말합니다. 또한 이것이 데이터 압축의 주요 단점임을 암시하는 것으로 보이며, 읽기 전용 아카이브 데이터베이스의 경우 100 % 채워진 페이지의 데이터 압축을 사용하면 성능이 향상 될 것입니다 (예외가 거의 없음).

  1. 위의 진술이 사실입니까?
  2. 데이터 압축과 그렇지 않은 것 사이의 주요 "변이"는 무엇입니까 (읽기)

    • "CPU + x %"?
    • "IO -y %"?
    • 페이지 분할 발생?
    • tempdb 사용법?
    • RAM 사용량?
  3. 그리고 글을 위해?

이 질문의 목적으로, 컨텍스트를 큰 (> 1TB) 데이터베이스 의 PAGE 수준 압축으로 제한 할 수 있지만 추가 의견은 언제나 환영합니다.


참고 문헌 :

SQL Server 스토리지 엔진 블로그 (DW 시나리오는 압축이 매우 유리함을 보여줍니다)
데이터 압축 : 전략, 용량 계획 및 모범 사례

압축 대상을 결정하는보다 자세한 방법은 각 테이블 및 인덱스의 워크로드 특성을 분석하는 것입니다. 다음 두 가지 메트릭을 기반으로합니다.

U : 특정 테이블, 인덱스 또는 파티션에서 해당 개체의 전체 작업에 대한 업데이트 작업의 백분율입니다. U 값이 낮을수록 (즉, 테이블, 인덱스 또는 파티션이 자주 업데이트되지 않음) 페이지 압축 후보가 더 좋습니다.
S : 테이블, 인덱스 또는 파티션에서 해당 개체의 전체 작업에 대한 스캔 작업의 백분율입니다. S 값이 높을수록 (즉, 테이블, 인덱스 또는 파티션이 대부분 스캔 됨) 페이지 압축 후보가 더 좋습니다.

위의 두 가지 모두 DW 스타일 데이터베이스에 대한 페이지 압축 권장 (읽기 / 독점, 빅 데이터 작업)을 권장하는 편향되어 있습니다.


구체적으로 어떤 문헌? 압축 / 압축 해제 모두에 대해 항상 CPU 오버 헤드가 발생하지만 읽기와 마찬가지로 더 적은 수의 페이지에도 작성합니다. 실제로 필자는 읽기쪽에 압축 된 페이지가 메모리에 저장되어 있기 때문에 쓰기 쪽이 읽기 쪽보다 더 많은 이점을 얻을 것이라고 생각합니다 (항상 그런 것은 아니지만 데이터 크기와 할당 된 메모리에 따라 가장 좋은 경우).
Aaron Bertrand

3
데이터의 특성과 압축 기능에 전적으로 의존하기 때문에 원하는 측정 항목을 제공하기가 매우 어려울 것입니다 (행과 페이지에 따라 다를 수 있음) ). 어떤 사람들은 최대 90 %의 압축률을보고했는데, 이는 메모리 사용량 (긍정적 인 방식)과 CPU가 그처럼 많은 압축을 수행하는 데 영향을 줄 것이라고보고했습니다. 이 백서는 행 압축의 경우 10 %, 페이지의 경우 CPU 오버 헤드를 방지합니다 . 관찰 한 내용이 상당히 다를 수 있습니다.
Aaron Bertrand

1
읽기 전용 보관 데이터베이스의 경우 메모리에 맞는지 여부는 의문입니다. 메모리에 모두 들어갈 수 있으면 일단 버퍼 풀에로드되면 압축해도 큰 이점이 없습니다. 그러나 메모리에 모두 적용 할 수없는 경우 압축을 해제하는 작업이 수행 되더라도 더 적은 페이지를 캐시 안팎으로 바꾸는 데 여전히 이점이있을 수 있습니다.
Aaron Bertrand

추가 한 링크 중 어느 것도이 4 배의 페널티에 대해 언급하지 않는 것 같습니다. 어디서 픽업했는지 기억하십니까? 상황을보고 싶습니다.
Aaron Bertrand

1
글쎄, 그 시나리오보다 데이터를 메모리에 맞출 수 없다면, 그다지 무섭지 않습니까? :-)
Aaron Bertrand

답변:


6

1-2 년 된 하드웨어에 대한 내 자신의 실험에서 나온 2 센트 :

페이지 압축 테이블 (~ 80 행 / 페이지)에 대한 읽기 전용 작업 (DW 스타일 스캔, 정렬 등) ~ 3 배의 압축 크기 감소에서조차조차없는 것으로 나타났습니다.

즉, 테이블이 메모리에 맞으면 페이지 크기가 데이터 크기가 3 배 이상 줄어든 경우에만 페이지 압축으로 성능이 향상됩니다. 메모리에서 더 적은 페이지를 스캔하지만 각 페이지를 스캔하는 데 시간이 더 걸립니다.

나는 생각 계획이 중첩 된 루프를하고 추구-무거운 경우 마일리지는 다를 수 있습니다. 그 중에서도 하드웨어에 따라 다릅니다 (외국 NUMA 노드 액세스 페널티, 메모리 속도 등).

위의 내용은 자체 하드웨어 (Dell Poweredge 910 이하)에서 자체 쿼리를 사용하여 자체 테스트를 수행 한 결과를 따르는 대략적인 규칙입니다. 복음이 아닙니다!

편집 : 어제 Thomas Kejser의 우수한 SQLBits XI 프레젠테이션이 비디오로 제공되었습니다. 이 논의와 관련하여 페이지 압축에 대한 CPU 비용의 '못생긴'얼굴을 보여줍니다.

그러나 Thomas는 FusionIO 스토리지를 사용하고 있으며 페이지 압축에 적합한 '테이블'만 선택했습니다. 스토리지가 일반적인 SAN에 있고 데이터에 압축 된 3x-4x가 사용 된 경우 그림의 성능이 떨어질 수 있습니다.


1
이것이 오래된 하드웨어 일 수 있습니까? 새로운 하드웨어, 베어 SSD 스토리지를 위해 코어가 디스크를 쉽게 따라 잡을 수 없다는 것을 알게되었습니다. 나는 그 혜택이 훨씬 더 쉬울 것이라고 움켜 쥐었다. IO를 50 % 줄이면 많은 변화를 겪지 않을 때 그만한 가치가있다.
TomTom

TomTom, Storage는 이러한 수치에 적합하지 않습니다. 비 압축 테이블 메모리와 압축 테이블 메모리 사이의 비교입니다.
John Alan

메모리에 충분한 DWH를 본 적이 없습니다. 진심으로. 다시 디스크로 넘어갑니다.
TomTom

1
물론 당신은 때때로 디스크로 넘어갈 것입니다-디스크에서 읽는 것은 페이지 압축이 거의 항상 가장자리를 차지하는 곳입니다 (데이터가 충분히 압축 가능하다고 가정)! 그러나 워크로드가 디스크에서 한 번로드 된 다음 하루의 나머지 시간 동안 메모리의 모든 것을 조작하는 경우, 디스크 읽기에 얼마나 많은 무게를주고 메모리 내 작업에 얼마나 많은 양을 줄까요?
John Alan

1
그냥 토마스 Kejser에 의해 SQLBits 2013 년 관련 프리젠 테이션 slidedeck 건너 온 : slideshare.net/fusionio/...
존 앨런

0

내 Data Warehouse 환경에서 몇 마디 만 추가 할 수 있습니다.

30 밀리언 행 (18GB)의 테스트 테이블에서 압축 (내 경우에는 PAGE)을 구현하면 테이블 크기가 18GB에서 3GB로 줄어 듭니다! (스토리지 효율성)로드 시간 (쓰기)을 22 분에서 36 분으로 늘립니다.

따라서 데이터를 읽거나 읽고 메모리에 저장하면 좋은 솔루션이 될 수 있지만 매일 데이터를로드하면 성능이 저하 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.