거대한 테이블의 성능 조정 (SQL Server 2008 R2)


14

배경 :
UAT 단계에 팩트 테이블이 있습니다. Prod에 5 년 동안의 데이터를로드하는 것을 목표로합니다 (예상 크기 400Mn 레코드). 현재 테스트에는 2 년의 데이터 만 있습니다.

테이블 특징 :

  1. 치수 수 ~ 45
  2. 측정 ~ 30
  3. 비 첨가 측정 및 기타 열 ~ 25
  4. 현재 데이터 크기 ~ 2 억 (2 년 데이터)
  5. 시간보기 : 3 가지 다른 달보기 : 회계 / 캘린더 / 조정
  6. 사용자는 한 번에 하나의보기 만 필요합니다. (즉, 쿼리에 한 달 열만 사용되므로 시간보기에서 파티셔닝을 중지합니다)
  7. 인덱스 : 1 개의 자연 키에 대한 클러스터형 인덱스 (8 개 열) 몇 개의 차원 SK (FK) 및 모든 측정 값을 포함하여 매월 열에 하나씩 비 클러스터형 인덱스를 포함하여 3 개 생성됨.
  8. 이 때문에 인덱스는 엄청납니다 (총 190GB).
  9. 공간이 제한되지 않음 (1TB 할당)
  10. 서버에서 64GB의 RAM을 사용할 수 있습니다.
  11. 테이블 압축도 완료되었습니다.

요구 사항 :
이 팩트 테이블의 쿼리는 30 초 내에 결과를 제공해야합니다 (일반 쿼리는 Dim 값으로 몇 개의 Dim 그룹에 합류하는 sum (계산 값 선택)). 보고서는이 팩트 테이블 위에서 직접 수행됩니다.

문제 :
인덱스에서 사용 가능한 열을 포함하는 쿼리는 정상적으로 작동하지만 include.에 포함되지 않은 다른 열을 포함하면 빠릅니다. 5-10 분 이상 걸립니다. 우리가 선택한 모든 차원 / 열에 잘 작동하는 솔루션을 제안 할 수 있습니까? 이 상황에서 색인보기가 도움이 될 수 있습니까?

답변:


6

SQL Server 2012로 업그레이드하고 columnstores를 사용 하십시오 . 그들은 이러한 요구 사항에서 번성합니다. 평가판을 다운로드하여 사용해보십시오. 모든 인덱스를 삭제하고 클러스터 된 인덱스를 삭제하고 모든 열에 클러스터되지 않은 columnstore 인덱스를 추가하고 소용돌이를 제공하십시오. 나는 당신과 같은 사례를 보았는데, 대부분 세그먼트 제거가 시작되어 실행 시간이 2-3 초로 단축 되었습니다.


0

인덱싱 된 뷰가 문제를 해결합니까? 데이터를 얼마나 최신 상태로 유지해야합니까? 몇 가지 순열에 대한 인덱싱 된 뷰를 만들 수 있습니다. 그러나 그 많은 차원들과 조치들로 인해 당신은 빨리 공간이 부족할 것입니다!

SSD 사용은 어떻습니까?


데이터는 매달 업데이트됩니다. View를 업데이트하는 데 시간이 얼마나 걸립니까?

기존 쿼리에 5-10 분이 걸리면 인덱싱 된 뷰에 5-10 분이 걸립니다. 완료되면 동일한 쿼리를 실행할 때 마치 테이블에서 나오는 것처럼 (즉, 즉시) 다시 나타납니다. 인덱싱 된 뷰는 특정 비트의 SQL을 사전 실행합니다. 일치하는 SQL을 제출하면 다시 실행하지 않고 인덱싱 된 뷰에서 가져옵니다. 인덱싱 된 뷰의 주요 장점은 기존 쿼리를 변경할 필요가 없으며 자동으로 사용한다는 것입니다. 단점은 몇 가지 다른 조합을 위해 하나를 만들어야한다는 것입니다.
Nick.McDermaid

그러나 속도를 높이기 위해 여러 개의 인덱싱 된 뷰를 만들 것을 제안하지는 않습니다. 결국 시간과 디스크 공간이 부족합니다. 무기고에 넣는 것이 한 가지 일 수도 있습니다.
Nick.McDermaid

그리고 제발 ... 제안대로 컬럼 스토어를 살펴보세요!
Nick.McDermaid
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.