온라인 인덱스 작업에 대한 지침Guidelines for Online Index Operations

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)예Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

온라인 인덱스 작업을 수행할 때 다음 지침이 적용됩니다.When you perform online index operations, the following guidelines apply:

  • 기본 테이블에 image, ntexttextLOB(Large Object) 데이터 형식이 포함된 경우 클러스터형 인덱스는 오프라인으로 생성, 다시 작성 또는 삭제해야 합니다.Clustered indexes must be created, rebuilt, or dropped offline when the underlying table contains the following large object (LOB) data types: image, ntext, and text.

  • 테이블에 LOB 데이터 형식이 들어 있는 경우 비고유 비클러스터형 인덱스를 온라인 상태로 만들 수 있지만 이러한 열은 인덱스 정의에 키 또는 키가 아닌 포괄 열로 사용되지 않습니다.Nonunique nonclustered indexes can be created online when the table contains LOB data types but none of these columns are used in the index definition as either key or nonkey (included) columns.

  • 로컬 임시 테이블의 인덱스를 온라인 상태로 만들거나 다시 작성하거나 삭제할 수 없습니다.Indexes on local temp tables cannot be created, rebuilt, or dropped online. 이 제한 사항은 전역 임시 테이블의 인덱스에는 적용되지 않습니다.This restriction does not apply to indexes on global temp tables.

  • 예기치 않은 오류, 데이터베이스 장애 조치(failover) Ehsms PAUSE 명령 실행 후 중지된 위치에서 인덱스를 다시 시작할 수 있습니다.Indexes can be resumed from where it stopped after an unexpected failure, database failover, or a PAUSE command. Alter Index를 참조하세요.See Alter Index. 이 기능은 SQL Server 2017 및 Azure SQL Database에 대한 공용 미리 보기입니다.This feature is in public preview for SQL Server 2017 and Azure SQL Database.
참고

온라인 인덱스 작업은 일부 MicrosoftMicrosoft SQL ServerSQL Server버전에서 사용할 수 있습니다.Online index operations are not available in every edition of MicrosoftMicrosoft SQL ServerSQL Server. SQL ServerSQL Server 버전에서 지원되는 기능 목록은 버전에서 지원하는 기능을 참조하세요.For a list of features that are supported by the editions of SQL ServerSQL Server, see Features supported by editions.

다음 표는 온라인으로 수행할 수 있는 인덱스 작업, 이러한 온라인 작업에서 제외되는 인덱스 및 다시 시작 가능한 인덱스 제한을 보여 줍니다.The following table shows the index operations that can be performed online, the indexes that are excluded from these online operations, and resumable index restrictions. 추가 제한 사항도 포함됩니다.Additional restrictions are also included.

온라인 인덱스 작업Online index operation 제외되는 인덱스Excluded indexes 기타 제한 사항Other restrictions
ALTER INDEX REBUILDALTER INDEX REBUILD 비활성화된 클러스터형 인덱스 또는 비활성화된 인덱싱된 뷰Disabled clustered index or disabled indexed view

XML 인덱스XML index

columnstore 인덱스Columnstore index

로컬 임시 테이블의 인덱스Index on a local temp table
키워드를 ALL로 지정하면 테이블에 제외된 인덱스가 들어 있는 경우 작업이 실패할 수 있습니다.Specifying the keyword ALL may cause the operation to fail when the table contains an excluded index.

비활성 인덱스를 다시 작성하는 작업에 추가 제한 사항이 적용됩니다.Additional restrictions on rebuilding disabled indexes apply. 자세한 내용은 인덱스 및 제약 조건 비활성화를 참조하세요.For more information, see Disable Indexes and Constraints.
CREATE INDEXCREATE INDEX XML 인덱스XML index

뷰의 초기 고유 클러스터형 인덱스Initial unique clustered index on a view

로컬 임시 테이블의 인덱스Index on a local temp table
CREATE INDEX WITH DROP_EXISTINGCREATE INDEX WITH DROP_EXISTING 비활성화된 클러스터형 인덱스 또는 비활성화된 인덱싱된 뷰Disabled clustered index or disabled indexed view

로컬 임시 테이블의 인덱스Index on a local temp table

XML 인덱스XML index
DROP INDEXDROP INDEX 비활성 인덱스Disabled index

XML 인덱스XML index

비클러스터형 인덱스Nonclustered index

로컬 임시 테이블의 인덱스Index on a local temp table
단일 문에 여러 인덱스를 지정할 수 없습니다.Multiple indexes cannot be specified within a single statement.
ALTER TABLE ADD CONSTRAINT(PRIMARY KEY 또는 UNIQUE)ALTER TABLE ADD CONSTRAINT (PRIMARY KEY or UNIQUE) 로컬 임시 테이블의 인덱스Index on a local temp table

클러스터형 인덱스Clustered index
한 번에 하나의 하위 절만 허용됩니다.Only one subclause is allowed at a time. 예를 들어 동일한 ALTER TABLE 문에서 PRIMARY KEY 또는 UNIQUE 제약 조건을 추가하거나 삭제할 수 없습니다.For example, you cannot add and drop PRIMARY KEY or UNIQUE constraints in the same ALTER TABLE statement.
ALTER TABLE DROP CONSTRAINT(PRIMARY KEY 또는 UNIQUE)ALTER TABLE DROP CONSTRAINT (PRIMARY KEY or UNIQUE) 클러스터형 인덱스Clustered index

온라인 인덱스 작업이 진행되는 동안에는 기본 테이블을 수정하거나 자르거나 삭제할 수 없습니다.The underlying table cannot be modified, truncated, or dropped while an online index operation is in process.

클러스터형 인덱스를 만들거나 삭제할 때 지정한 온라인 옵션 설정(ON 또는 OFF)은 다시 작성해야 하는 모든 비클러스터형 인덱스에 적용됩니다.The online option setting (ON or OFF) specified when you create or drop a clustered index is applied to any nonclustered indexes that must be rebuilt. 예를 들어 클러스터형 인덱스를 CREATE INDEX WITH DROP_EXISTING, ONLINE=ON을 사용하여 온라인 상태에서 작성한 경우 관련된 모든 비클러스터형 인덱스도 온라인 상태로 다시 만들어집니다.For example, if the clustered index is built online by using CREATE INDEX WITH DROP_EXISTING, ONLINE=ON, all associated nonclustered indexes are re-created online also.

UNIQUE 인덱스를 온라인 상태로 만들거나 다시 작성하면 인덱스 작성기 및 동시 사용자 트랜잭션이 동일한 키를 삽입하므로 고유성을 위반하게 됩니다.When you create or rebuild a UNIQUE index online, the index builder and a concurrent user transaction may try to insert the same key, therefore violating uniqueness. 원본 테이블의 원래 행이 대상인 새 인덱스로 옮겨지기 전에 사용자가 입력한 행이 새 인덱스로 삽입되면 온라인 인덱스 작업이 실패합니다.If a row entered by a user is inserted into the new index (target) before the original row from the source table is moved to the new index, the online index operation will fail.

자주 발생하지 않지만 온라인 인덱스 작업이 데이터베이스 업데이트와 상호 작용 시 사용자 또는 응용 프로그램 작업으로 인해 교착 상태가 될 수 있습니다.Although not common, the online index operation can cause a deadlock when it interacts with database updates because of user or application activities. 이러한 경우 SQL Server 데이터베이스 엔진SQL Server Database Engine 에서는 해당 사용자 또는 응용 프로그램 작업을 교착 상태로 선택합니다.In these rare cases, the SQL Server 데이터베이스 엔진SQL Server Database Engine will select the user or application activity as a deadlock victim.

여러 개의 새 비클러스터형 인덱스를 만들거나 비클러스터형 인덱스를 다시 구성할 때만 동일한 테이블 또는 뷰에서 동시 온라인 인덱스 DDL 작업을 수행할 수 있습니다.You can perform concurrent online index DDL operations on the same table or view only when you are creating multiple new nonclustered indexes, or reorganizing nonclustered indexes. 동시에 수행된 다른 온라인 인덱스 작업이 모두 실패합니다.All other online index operations performed at the same time fail. 예를 들어 동일한 테이블에서 기존 인덱스를 온라인 상태로 다시 작성하는 동안 새 인덱스를 온라인 상태로 만들 수 없습니다.For example, you cannot create a new index online while rebuilding an existing index online on the same table.

인덱스에 큰 개체 유형의 열이 포함되어 있고 동일한 트랜잭션에서 이 온라인 작업 전에 업데이트 작업이 있는 경우 온라인 작업을 수행할 수 없습니다.An online operation cannot be performed when an index contains a column of the large object type, and in the same transaction there are update operations before this online operation. 이 문제를 해결하려면 온라인 작업을 트랜잭션 외부에 배치하거나 트랜잭션 내에서 업데이트 전에 배치합니다.To work around this issue, place the online operation outside the transaction or place it before any updates in the transaction.

디스크 공간 고려 사항Disk Space Considerations

온라인 인덱스 작업에는 오프라인 인덱스 작업보다 더 많은 디스크 공간 요구 사항이 필요합니다.Online index operations require more disk space requirements than offline index operations.

  • 인덱스 만들기 및 인덱스 다시 빌드 작업 동안 빌드(또는 다시 빌드)할 인덱스에 대해 추가 공간이 필요합니다.During index creation and index rebuild operations, additional space is required for the index being built (or rebuilt).
  • 또한 임시 매핑 인덱스에 대해서도 디스크 공간이 필요합니다.In addition, disk space is required for the temporary mapping index. 이 임시 인덱스는 클러스터형 인덱스를 만들거나 다시 작성하거나 삭제하는 온라인 인덱스 작업에 사용됩니다.This temporary index is used in online index operations that create, rebuild, or drop a clustered index.
    • 온라인 상태에서 클러스터형 인덱스를 삭제하는 작업은 온라인 상태에서 클러스터형 인덱스를 만드는 작업(또는 다시 빌드)에 필요한 공간과 동일한 크기가 필요합니다.Dropping a clustered index online requires as much space as creating (or rebuilding) a clustered index online.

자세한 내용은 Disk Space Requirements for Index DDL Operations을 참조하세요.For more information, see Disk Space Requirements for Index DDL Operations.

성능 고려 사항Performance Considerations

온라인 인덱스 작업에서 동시 사용자 업데이트 작업을 할 수 있지만 업데이트 작업이 많은 경우에는 인덱스 작업을 하는 데 많은 시간이 소요됩니다.Although online index operations permit concurrent user update activity, the index operations will take longer if the update activity is very heavy. 일반적으로 온라인 인덱스 작업은 동시 업데이트 작업 수준과 상관없이 같은 양의 오프라인 인덱스 작업보다 느립니다.Typically, online index operations will be slower than equivalent offline index operations regardless of the concurrent update activity level.

온라인 인덱스 작업 동안 원본 및 대상 구조가 유지되므로 트랜잭션을 삽입하고, 업데이트하고, 삭제하는 데 최고 두 배까지 리소스 사용이 증가합니다.Because both the source and target structures are maintained during the online index operation, the resource usage for insert, update, and delete transactions is increased, potentially up to double. 이렇게 되면 인덱스 작업 동안 성능이 저하되며, 특히 CPU 시간 등의 리소스 사용이 증가합니다.This could cause a decrease in performance and greater resource usage, especially CPU time, during the index operation. 온라인 인덱스 작업이 모두 기록됩니다.Online index operations are fully logged.

온라인 작업을 권장하지만 사용 환경 및 특정 요구 사항도 고려해야 합니다.Although we recommend online operations, you should evaluate your environment and specific requirements. 인덱스 작업을 오프라인 상태에서 실행하는 것이 가장 좋을 수도 있습니다.It may be optimal to run index operations offline. 이 경우 사용자가 작업 수행 동안 데이터 액세스를 제한하지만 작업은 더욱 빨리 끝나고 보다 적은 리소스를 사용합니다.In doing this, users have restricted access to the data during the operation, but the operation finishes faster and uses fewer resources.

SQL Server 2016을 실행하는 다중 프로세서 컴퓨터에서는 다른 쿼리와 마찬가지로 인덱스 문이 추가 프로세서를 사용하여 인덱스 문과 관련된 검색 및 정렬 작업을 수행할 수 있습니다.On multiprocessor computers that are running SQL Server 2016, index statements may use more processors to perform the scan and sort operations associated with the index statement just like other queries do. MAXDOP 인덱스 옵션을 사용하여 온라인 인덱스 작업에만 사용되는 프로세서 수를 제어할 수 있습니다.You can use the MAXDOP index option to control the number of processors dedicated to the online index operation. 이 방법으로 인덱스 작업에서 사용하는 리소스와 동시 사용자가 사용하는 리소스의 균형을 맞출 수 있습니다.In this way, you can balance the resources that are used by index operation with those of the concurrent users. 자세한 내용은 병렬 인덱스 작업 구성을 참조하세요.For more information, see Configure Parallel Index Operations. 병렬 인덱스 작업을 지원하는 SQL Server에 대한 자세한 내용은 버전에서 지원하는 기능을 참조하세요.For more information about the editions of SQL Server that support Parallel indexed operations, see Features Supported by editions.

인덱스 작업의 마지막 단계에 S 잠금 또는 Sch-M 잠금이 보유되므로 BEGIN TRANSACTION...COMMIT 블록 등의 명시적 사용자 트랜잭션 내에서 온라인 인덱스 작업을 실행할 때는 주의해야 합니다.Because an S-lock or Sch-M lock is held in the final phase of the index operation, be careful when you run an online index operation inside an explicit user transaction, such as BEGIN TRANSACTION...COMMIT block. 이 작업을 실행하면 트랜잭션이 끝날 때까지 잠금이 보유되어 사용자 동시성을 방해할 수 있습니다.Doing this causes the lock to be held until the end of the transaction, therefore impeding user concurrency.

MAX DOP > 1ALLOW_PAGE_LOCKS = OFF 옵션과 함께 실행할 수 있도록 허용된 경우 온라인 인덱스를 다시 빌드하면 조각이 늘어날 수 있습니다.Online index rebuilding may increase fragmentation when it is allowed to run with MAX DOP > 1 and ALLOW_PAGE_LOCKS = OFF options. 자세한 내용은 작동 방법: 온라인 인덱스 다시 빌드 - 조각이 늘어날 수 있음을 참조하세요.For more information, see How It Works: Online Index Rebuild - Can Cause Increased Fragmentation.

트랜잭션 로그 고려 사항Transaction Log Considerations

오프라인 상태 또는 온라인 상태에서 수행되는 대규모 인덱스 작업은 트랜잭션 로그를 빨리 채워 대용량 데이터 로드를 생성할 수 있습니다.Large-scale index operations, performed offline or online, can generate large data loads that can cause the transaction log to quickly fill. 인덱스 작업을 확실히 롤백하려면 인덱스 작업이 완료될 때까지 트랜잭션 로그를 자를 수 없지만, 인덱스 작업 중에 이 로그를 백업할 수 있습니다.To make sure that the index operation can be rolled back, the transaction log cannot be truncated until the index operation has been completed; however, the log can be backed up during the index operation. 따라서 트랜잭션 로그에는 인덱스 작업을 수행하는 동안 인덱스 작업 트랜잭션 및 동시 사용자 트랜잭션을 모두 저장할 수 있는 충분한 공간이 있어야 합니다.Therefore, the transaction log must have sufficient space to store both the index operation transactions and any concurrent user transactions for the duration of the index operation. 자세한 내용은 Transaction Log Disk Space for Index Operations을 참조하세요.For more information, see Transaction Log Disk Space for Index Operations.

다시 시작 가능한 인덱스 다시 작성 시 고려 사항Resumable Index Rebuild Considerations

참고

Alter Index를 참조하세요.See Alter Index. 이 기능은 SQL Server 2017 및 Azure SQL Database에 대한 공용 미리 보기입니다.This feature is in public preview for SQL Server 2017 and Azure SQL Database.

다시 시작 가능한 온라인 인덱스 다시 작성을 수행할 때 다음 지침이 적용됩니다.When you perform resumable online index rebuild the following guidelines apply:

  • 인덱스 유지 관리 기간 관리, 계획 및 확장.Managing, planning and extending of index maintenance windows. 유지 관리 기간에 맞게 인덱스 다시 작성 작업을 여러 번 일시 중지 및 다시 시작할 수 있습니다.You can pause and restart an index rebuild operation multiple times to fit your maintenance windows.
  • 인덱스 다시 작성 오류 (예: 데이터베이스 장애 조치(failover)나 디스크 공간 부족)에서 복구Recovering from index rebuild failures (such as database failovers or running out of disk space).
  • 인덱스 작업이 일시 중지된 경우 원래 인덱스와 새로 만든 인덱스 모두 저장할 디스크 공간이 필요하고 DML 작업 중 업데이트해야 합니다.When an index operation is paused, both the original index and the the newly created one require disk space and need to be updated during DML operations.

  • 인덱스 다시 작성 작업 중 잘림 로그의 잘림 지원(일반 온라인 인덱스 작업에서는 이 작업을 수행할 수 없음)Enables truncation of truncation logs during an index rebuild operation (this operation cannot be performed for a regular online index operation).

  • SORT_IN_TEMPDB=ON 옵션이 지원되지 않음SORT_IN_TEMPDB=ON option is not supported
중요

다시 시작 가능한 다시 작성에서는 오래 실행되는 잘림을 계속 열어둘 필요가 없으므로 이 작업 중 로그 잘림이 허용되고 로그 공간을 더 효율적으로 관리할 수 있습니다.Resumable rebuild does not require you to keep open a long running truncation, allowing log truncation during this operation and a better log space management. 새로운 디자인에서는 다시 시작 가능한 작업을 다시 시작하는 데 필요한 모든 참조와 함께 필요한 데이터를 하나의 데이터베이스에 유지할 수 있도록 했습니다.With the new design, we managed to keep necessary data in a database together with all references required to restart the resumable operation.

일반적으로 온라인 인덱스 다시 작성 시 다시 시작 가능 여부에 따른 성능 차이는 없습니다.Generally, there is no performance difference between resumable and non-resumable online index rebuild. 다시 시작 가능한 인덱스를 업데이트할 때 인덱스 다시 작성 작업이 일시 중지되는 경우 다음과 같습니다.When you update a resumable index while an index rebuild operation is paused:

  • 읽기가 대부분인 작업의 경우 성능에 미치는 영향이 크지 않습니다.For read-mostly workloads, the performance impact is insignificant.
  • 업데이트가 많은 작업의 경우 약간의 처리량 저하가 발생할 수 있습니다(테스트에 따르면 10% 미만의 저하가 나타남).For update-heavy workloads, you may experience some throughput degradation (our testing shows less than 10% degradation).

일반적으로 온라인 인덱스 다시 작성 시 다시 시작 가능 여부에 따른 조각 모음 품질 차이는 없습니다.Generally, there is no difference in defragmentation quality between resumable and non-resumable online index rebuild.

온라인 인덱스 작업 작동 방식How Online Index Operations Work

온라인으로 인덱스 작업 수행Perform Index Operations Online

ALTER INDEX(Transact-SQL)ALTER INDEX (Transact-SQL)

CREATE INDEX(Transact-SQL)CREATE INDEX (Transact-SQL)