온라인 인덱스 작업을 수행할 때 다음 지침이 적용됩니다.
기본 테이블이 대량의 LOB 데이터 형식
image, ntext,text을 포함하는 경우, 클러스터형 인덱스를 오프라인으로 생성, 재구성 또는 삭제해야 합니다.로컬 임시 테이블의 인덱스는 온라인으로 만들거나 다시 작성하거나 삭제할 수 없습니다. 이 제한은 전역 임시 테이블의 인덱스에는 적용되지 않습니다.
비고
온라인 인덱스 작업은 MicrosoftSQL Server의 모든 버전에서 사용할 수 없습니다. SQL Server 버전에서 지원하는 기능 목록은 SQL Server 2014 버전에서 지원하는 기능을 참조하세요.
다음 표에서는 온라인으로 수행할 수 있는 인덱스 작업과 이러한 온라인 작업에서 제외된 인덱스를 보여 줍니다. 추가 제한 사항도 포함됩니다.
| 온라인 인덱스 작업 | 제외된 인덱스 | 기타 제한 사항 |
|---|---|---|
| ALTER INDEX REBUILD (인덱스 재구성) | 비활성화된 클러스터형 인덱스 또는 비활성화된 인덱싱 뷰 XML 인덱스 Columnstore 인덱스 로컬 임시 테이블의 인덱스 |
ALL 키워드를 지정하면 테이블에 제외된 인덱스가 포함될 때 작업이 실패할 수 있습니다. 비활성 인덱스 다시 작성에 대한 추가 제한이 적용됩니다. 자세한 내용은 인덱스 및 제약 조건 비활성화를 참조하세요. |
| 인덱스 생성 | XML 인덱스 뷰의 초기 고유 클러스터형 인덱스 로컬 임시 테이블의 인덱스 |
|
| DROP_EXISTING 사용하여 인덱스 만들기 | 비활성화된 클러스터형 인덱스 또는 비활성화된 인덱싱 뷰 로컬 임시 테이블의 인덱스 XML 인덱스 |
|
| DROP INDEX (인덱스 제거) | 비활성 인덱스 XML 인덱스 비클러스터형 인덱스 로컬 임시 테이블의 인덱스 |
단일 문 내에서 여러 인덱스를 지정할 수 없습니다. |
| 테이블 변경 추가 제약 조건 (기본 키 또는 유니크) | 로컬 임시 테이블의 인덱스 클러스터형 인덱스 |
한 번에 하나의 하위 절만 허용됩니다. 예를 들어 동일한 ALTER TABLE 문에 PRIMARY KEY 또는 UNIQUE 제약 조건을 추가하고 삭제할 수 없습니다. |
온라인 인덱스 작업이 진행되는 동안에는 기본 테이블을 수정, 잘라내기 또는 삭제할 수 없습니다.
클러스터형 인덱스를 만들거나 삭제할 때 지정된 온라인 옵션 설정(ON 또는 OFF)은 다시 작성해야 하는 비클러스터형 인덱스에 적용됩니다. 예를 들어 CREATE INDEX WITH DROP_EXISTING ONLINE=ON을 사용하여 클러스터형 인덱스를 온라인으로 빌드하는 경우 연결된 모든 비클러스터형 인덱스도 온라인으로 다시 만들어집니다.
온라인에서 UNIQUE 인덱스 만들기 또는 다시 작성 시 인덱스 작성기와 동시 사용자 트랜잭션이 동일한 키를 삽입하려고 시도하여 고유성을 위반할 수 있습니다. 원본 테이블의 원래 행을 새 인덱스로 이동하기 전에 사용자가 입력한 행을 새 인덱스(대상)에 삽입하면 온라인 인덱스 작업이 실패합니다.
일반적이지는 않지만 온라인 인덱스 작업으로 인해 사용자 또는 애플리케이션 활동으로 인해 데이터베이스 업데이트와 상호 작용할 때 교착 상태가 발생할 수 있습니다. 이러한 드문 경우에서 SQL Server 데이터베이스 엔진은 사용자 또는 애플리케이션 작업을 교착 상태의 희생자로 선택합니다.
여러 개의 비클러스터형 인덱스를 만들거나 비클러스터형 인덱스를 다시 구성하는 경우에만 동일한 테이블 또는 뷰에서 동시 온라인 인덱스 DDL 작업을 수행할 수 있습니다. 동시에 수행된 다른 온라인 인덱스 작업이 모두 실패합니다. 예를 들어 동일한 테이블에서 기존 인덱스 온라인을 다시 작성하는 동안에는 온라인으로 새 인덱을 만들 수 없습니다.
인덱스에 큰 개체 형식의 열이 포함되어 있고 동일한 트랜잭션에 이 온라인 작업 전에 업데이트 작업이 있는 경우 온라인 작업을 수행할 수 없습니다. 이 문제를 해결하려면 트랜잭션 외부에 온라인 작업을 배치하거나 트랜잭션의 업데이트 앞에 배치합니다.
디스크 공간 고려 사항
일반적으로 디스크 공간 요구 사항은 온라인 및 오프라인 인덱스 작업에 대해 동일합니다. 예외는 임시 매핑 인덱스가 필요한 추가 디스크 공간입니다. 이 임시 인덱스는 클러스터형 인덱스를 만들거나 다시 작성하거나 삭제하는 온라인 인덱스 작업에 사용됩니다. 클러스터형 인덱스를 온라인으로 삭제하려면 클러스터형 인덱스를 온라인으로 만드는 만큼의 공간이 필요합니다. 자세한 내용은 인덱스 DDL 작업에 필요한 디스크 공간 요구 사항을 참조하세요.
성능 고려 사항
온라인 인덱스 작업은 동시 사용자 업데이트 작업을 허용하지만 업데이트 작업이 매우 많은 경우 인덱스 작업이 더 오래 걸립니다. 일반적으로 온라인 인덱스 작업은 동시 업데이트 작업 수준에 관계없이 동일한 오프라인 인덱스 작업보다 느립니다.
원본 구조와 대상 구조는 모두 온라인 인덱스 작업 중에 유지 관리되므로 삽입, 업데이트 및 삭제 트랜잭션에 대한 리소스 사용량이 증가하여 최대 두 배까지 증가할 수 있습니다. 이로 인해 인덱스 작업 중에 성능이 저하되고 리소스 사용량, 특히 CPU 시간이 늘어나게 될 수 있습니다. 온라인 인덱스 작업은 완전히 기록됩니다.
온라인 작업을 권장하지만 환경 및 특정 요구 사항을 평가해야 합니다. 인덱스 작업을 오프라인으로 실행하는 것이 최적일 수 있습니다. 이렇게 하면 작업 중에 데이터에 대한 액세스가 제한되었지만 작업이 더 빠르게 완료되고 리소스가 더 적게 사용됩니다.
SQL Server 2014를 실행하는 다중 프로세서 컴퓨터에서 인덱스 문은 다른 쿼리와 마찬가지로 인덱스 문과 연결된 검색 및 정렬 작업을 수행하기 위해 더 많은 프로세서를 사용할 수 있습니다. MAXDOP 인덱스 옵션을 사용하여 온라인 인덱스 작업에 전용 프로세서 수를 제어할 수 있습니다. 이러한 방식으로 인덱스 작업에서 사용하는 리소스와 동시 사용자의 리소스의 균형을 맞출 수 있습니다. 자세한 내용은 병렬 인덱스 작업 구성을 참조하세요. 병렬 인덱싱된 작업을 지원하는 SQL Server 버전에 대한 자세한 내용은 SQL Server 2014 버전에서 지원하는 기능을 참조하세요.
인덱스 작업의 마지막 단계에서 S-lock 또는 Sch-M 잠금이 유지되므로 BEGIN TRANSACTION과 같은 명시적 사용자 트랜잭션 내에서 온라인 인덱스 작업을 실행할 때는 주의해야 합니다. COMMIT 블록입니다. 이 작업을 실행하면 트랜잭션이 끝날 때까지 잠금이 보유되어 사용자 동시성을 방해할 수 있습니다.
온라인 인덱스를 다시 작성할 때 MAX DOP > 1와 ALLOW_PAGE_LOCKS = OFF 옵션을 사용하면 조각화가 증가할 수 있습니다. 자세한 내용은 작동 방법: 온라인 인덱스 다시 빌드 - 조각이 늘어날 수 있음을 참조하세요.
트랜잭션 로그 고려 사항
오프라인 상태 또는 온라인 상태에서 수행되는 대규모 인덱스 작업은 트랜잭션 로그를 빨리 채워 대용량 데이터 로드를 생성할 수 있습니다. 인덱스 작업을 롤백할 수 있도록 하려면 인덱스 작업이 완료될 때까지 트랜잭션 로그를 잘라낼 수 없습니다. 그러나 인덱스 작업 중에 로그를 백업할 수 있습니다. 따라서 트랜잭션 로그에는 인덱스 작업을 수행하는 동안 인덱스 작업 트랜잭션 및 동시 사용자 트랜잭션을 모두 저장할 수 있는 충분한 공간이 있어야 합니다. 자세한 내용은 인덱스 작업에 대한 트랜잭션 로그 디스크 공간을 참조하세요.