SSIS를 통해 많은 양의 데이터를 SQL Server 2008로로드 한 후 실행해야하는 명령 인 DB 성능을 최대화하려면


11

테스트 데이터를 빈 데이터베이스에로드하기 위해 SSIS 패키지를 작성했습니다. 일부 테이블은 매우 큽니다 (약 7 억 행). SSIS 패키지가 완료되면 데이터베이스 성능을 최대화하기 위해 (제자 DBA!로) 실행해야하는 명령이 있습니까?

예를 들어, 나는 실행 EXEC sp_updatestats했지만 인덱스를 업데이트 할 필요가 없다고보고했습니다.

대량의 데이터가로드 된 후에해야 할 일 목록이 있습니까, 아니면 SQL Server 2008이 그 모든 것을 처리합니까?

답변:


8

빈 데이터베이스로로드하는 경우로드 후 추가 유지 관리 단계가 필요하지 않도록 조치를 취해야합니다. 조각화는 적이므로 피하려고하는 것입니다.

  • 로드하기 전에 모든 NC 인덱스를 삭제하십시오.
  • 로드 후 각 테이블에 대해 NC 인덱스를 순서대로 추가하십시오. 즉, 인덱스를 TableA, TableB, TableA에 다시 추가하지 마십시오. 이는 조각화에는 영향을 미치지 않지만 매우 큰 데이터 집합에 인덱스를 추가하는 데 걸리는 시간을 향상시킬 수 있습니다 (버퍼 풀 이탈 감소).
  • 클러스터 된 인덱스 순서로 테이블에 데이터를 삽입 할 수 있으면 클러스터 된 인덱스를 그대로 둡니다. 그렇지 않으면 데이터를 힙에 덤프하고 클러스터 된 인덱스 포스트로드로 다시 빌드하십시오.

복사하여 붙여 넣기 대신, BCP에 대해 질문질문 에 대한 답변을 작성하여 @Marian ETL 최적화에 대한 매우 포괄적 인 참조 목록을 알려 드리겠습니다 . 이 중 많은 부분이 시나리오에 동일하게 적용됩니다.


2
흥미롭게도 SQLCAT 및 SSIS의 비디오 링크에서 NC 인덱스가 삭제 된 것은 아닙니다. 이것이 "의존하는"또 다른 경우 인 것
같습니다

2
@billinkc는이 질문도 참조하는 빈 데이터베이스가 아닌 증분로드가 아니라는 것입니까? 어느 쪽이든, SQLCAT 테스트는 일반적인 조직에서는 거의 볼 수없는 하드웨어 클래스를 포함하는 경향이 있습니다.
Mark Storey-Smith

5

얼마나 많은 창이 있는지에 따라 다르지만 일반적으로 통계를 업데이트하고 인덱스를 다시 작성 / 재구성하는 것이 좋은 단계입니다. 그 외에는 실제로해야 할 일이 없어야합니다.

통계는 쿼리 옵티 마이저에게 조작에 의해 영향을받을 수있는 행 수를 알려주고 쿼리를 실행하기 위해 어떤 접근 방식을 SQL에 지시합니다. 데이터를 삽입하면 분포가 왜곡 될 수 있으며 자동 업데이트 모드에서 통계 업데이트를 트리거하기에 충분한 행을 삽입하지 않은 경우 수동으로 도움이됩니다. 창이 있다면 통계 업데이트 부분을 유지하십시오.

데이터가 추가되면 인덱스가 조각화 될 수 있습니다. 재구성 또는 재구성은이를 줄여 실제로 데이터에 액세스 할 때 성능을 향상시킬 수 있습니다.


4
인덱스 라인과 함께 SQLCAT 의 SSIS 비디오 중 하나에서 데이터 증가율이 100 % 를 초과 하고 단일 NCI가있는 경우이를 삭제하고 다시 생성하는 경험 법칙을 제안합니다. 10 % 이상이고 NCI가 2 이상이면 삭제 및 재생성으로 성능이 향상됩니다.
billinkc

2
Bill의 의견을 명확히하기 위해-그는 Drop Drop을 의미하는 것은 인덱스 삭제를 의미하고 데이터로드를 수행 한 다음 인덱스를 다시 작성하는 것이 좋습니다.로드 중에 인덱스를 남기지 말고 후에 재건하십시오. 어쨌든 그렇게 생각합니다 :-) 그리고 그래, 좋은 지적, 나는 그 의견을 +1합니다.
Mike Walsh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.