거대한 테이블에서 클러스터형 인덱스를 만드는 무통 방법?


22

따라서 심각한 성능 저하를 우려하는 고객 사이트가 있습니다. 나는 누군가를 보았고 문제는 분명히 누군가 Elgr (grrrr)이 클러스터 된 인덱스없이 약 2 천만 개 이상의 레코드를 보유하는 테이블을 설계 했기 때문 입니다.

이제 해당 테이블에 클러스터형 인덱스를 만들고 싶습니다. 그러나 테스트 환경에서 내 create index명령이 한 시간 동안 실행되었지만 아직 완료되지 않았습니다. 고객 사이트는 연중 무휴 24 시간 작동하는 작업 현장이며 인덱스를 생성하는 동안 1 시간의 가동 중지 시간을 줄 수 없습니다.

작업을 빨리 끝내거나, 바쁠 때 서버의 성능을 완전히 저하시키지 않는 현명한 방법으로 인덱스를 작성하는 덜 무차별 한 방법이 있습니까?

우리는 SQL Server Enterprise Edition을 사용하고 있습니다.

답변:


26
  • SQL Server가 Enterprise + 에디션이고 테이블에 BLOB 필드가없는 경우- CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • 그렇지 않은 경우-동일한 스키마가있는 테이블을 만들고 모든 INSERT / UPDATE / DELETE 작업 (예 : 트리거 사용)을 포함하여 데이터를 현명하게 전송 한 다음 이전 테이블을 정확하게 삭제하고 이름을 바꾸는 것 외에 다른 방법은 없습니다 이전과 같은 이름을 사용하는 새로운 기능-느리고 서버와 스토리지에 추가로드를 추가합니다


12

고객이 사용중인 SQL Server 버전을 확실하지 않습니다. 엔터프라이즈에서는 (ONLINE = ON)으로 색인을 빌드 할 수 있으므로 색인이 작성 될 때까지 테이블을 사용할 수 있습니다.


8
  • 원본과 동일한 새 테이블을 만듭니다 (분명히 다른 이름이 필요함)
  • 새 테이블에 클러스터형 인덱스 생성
  • 새 테이블에 데이터로드
  • 원본 테이블 삭제
  • 원래 이름을 사용하여 새 테이블 이름 바꾸기

원본에 필요한 권한을 적용했는지 확인하십시오.

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