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

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

이 항목에서는 SQL Server 2017SQL Server 2017 에서 SQL Server Management StudioSQL Server Management Studio 또는 Transact-SQLTransact-SQL을 사용하여 온라인으로 인덱스를 만들거나, 다시 작성하거나, 삭제하는 방법에 대해 설명합니다.This topic describes how to create, rebuild, or drop indexes online in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL. ONLINE 옵션을 사용하면 여러 사용자가 인덱스 작업 동안 기본 테이블이나 클러스터형 인덱스 데이터 및 모든 관련 비클러스터형 인덱스에 동시에 액세스할 수 있습니다.The ONLINE option allows concurrent user access to the underlying table or clustered index data and any associated nonclustered indexes during these index operations. 예를 들어 특정 사용자가 클러스터형 인덱스를 다시 작성하는 동안 해당 사용자와 다른 사용자가 계속해서 기본 데이터를 업데이트하고 쿼리할 수 있습니다.For example, while a clustered index is being rebuilt by one user, that user and others can continue to update and query the underlying data. 클러스터형 인덱스 작성 또는 다시 작성 등의 DDL(데이터 정의 언어) 작업을 오프라인으로 수행할 때 이러한 작업은 기본 데이터와 관련 인덱스에 대해 배타적 잠금을 보유합니다.When you perform data definition language (DDL) operations offline, such as building or rebuilding a clustered index; these operations hold exclusive locks on the underlying data and associated indexes. 이로 인해 해당 인덱스 작업이 완료될 때까지 기본 데이터를 수정하거나 쿼리할 수 없습니다.This prevents modifications and queries to the underlying data until the index operation is complete.

참고

온라인 인덱스 작업은 일부 SQL ServerSQL Server 버전에서만 사용할 수 있습니다.Online index operations are not available in every SQL ServerSQL Server edition. 자세한 내용은 SQL Server 2016 버전에서 지원하는 기능을 참조하세요.For more information, see Features Supported by the Editions of SQL Server 2016.

항목 내용In This Topic

시작하기 전 주의 사항Before You Begin

제한 사항Limitations and Restrictions

  • 온라인 인덱스 작업은 인덱스 작업 동안 동시 사용자 작업이 필수적인 1년 365일, 하루 24시간 운영되는 비즈니스 환경에 적합합니다.We recommend performing online index operations for business environments that operate 24 hours a day, seven days a week, in which the need for concurrent user activity during index operations is vital.

  • 다음 Transact-SQLTransact-SQL 문에서 ONLINE 옵션을 사용할 수 있습니다.The ONLINE option is available in the following Transact-SQLTransact-SQL statements.

  • 온라인으로 인덱스를 만들거나, 다시 작성하거나, 삭제하는 작업과 관련된 제한 사항은 온라인 인덱스 작업에 대한 지침을 참조하세요.For more limitations and restrictions concerning creating, rebuilding, or dropping indexes online, see Guidelines for Online Index Operations.

보안Security

사용 권한Permissions

테이블이나 뷰에 대한 ALTER 권한이 필요합니다.Requires ALTER permission on the table or view.

SQL Server Management Studio 사용Using SQL Server Management Studio

온라인으로 인덱스를 다시 작성하려면To rebuild an index online

  1. 개체 탐색기에서 더하기 기호를 클릭하여 온라인으로 인덱스를 다시 작성할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to rebuild an index online.

  2. 테이블 폴더를 확장합니다.Expand the Tables folder.

  3. 더하기 기호를 클릭하여 온라인으로 인덱스를 다시 작성할 테이블을 확장합니다.Click the plus sign to expand the table on which you want to rebuild an index online.

  4. 인덱스 폴더를 확장합니다.Expand the Indexes folder.

  5. 온라인으로 다시 작성할 인덱스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.Right-click the index that you want to rebuild online and select Properties.

  6. 페이지 선택아래에서 옵션을 선택합니다.Under Select a page, select Options.

  7. 온라인 DML 처리 허용을 선택한 다음 목록에서 True 를 선택합니다.Select Allow online DML processing, and then select True from the list.

  8. 확인을 클릭합니다.Click OK.

  9. 온라인으로 다시 작성할 인덱스를 마우스 오른쪽 단추로 클릭하고 다시 작성을 선택합니다.Right-click the index that you want to rebuild online and select Rebuild.

  10. 인덱스 다시 작성 대화 상자에서 다시 작성할 인덱스 표에 올바른 인덱스가 있는지 확인한 다음 확인을 클릭합니다.In the Rebuild Indexes dialog box, verify that the correct index is in the Indexes to rebuild grid and click OK.

Transact-SQL 사용Using Transact-SQL

온라인으로 인덱스를 만들거나, 다시 작성하거나, 삭제하려면To create, rebuild, or drop an index online

  1. 개체 탐색기에서 데이터베이스 엔진Database Engine인스턴스에 연결합니다.In Object Explorer, connect to an instance of 데이터베이스 엔진Database Engine.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.On the Standard bar, click New Query.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.Copy and paste the following example into the query window and click Execute. 이 예에서는 기존 인덱스를 온라인으로 다시 작성합니다.The example rebuilds an existing online

    USE AdventureWorks2012;  
    GO  
    ALTER INDEX AK_Employee_NationalIDNumber ON HumanResources.Employee  
    REBUILD WITH (ONLINE = ON);  
    GO  
    

    다음 예에서는 NewGroup 절을 사용하여 온라인으로 클러스터형 인덱스를 삭제하고 결과 테이블을 MOVE TO 파일 그룹으로 옮깁니다.The following example deletes a clustered index online and moves the resulting table (heap) to the filegroup NewGroup by using the MOVE TO clause. 테이블을 이동하기 전과 이동한 후에 파일 그룹에서의 인덱스 및 테이블 배치를 확인하기 위해 sys.indexes, sys.tablessys.filegroups 카탈로그 뷰를 쿼리합니다.The sys.indexes, sys.tables, and sys.filegroups catalog views are queried to verify the index and table placement in the filegroups before and after the move.

    USE AdventureWorks2012;
    GO
    --Create a clustered index on the PRIMARY filegroup if the index does not exist.
    IF NOT EXISTS (SELECT name FROM sys.indexes WHERE name = 
                N'AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate')
        CREATE UNIQUE CLUSTERED INDEX
            AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
        ON Production.BillOfMaterials (ProductAssemblyID, ComponentID, 
            StartDate)
        ON 'PRIMARY';
    GO
    -- Verify filegroup location of the clustered index.
    SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
        i.data_space_id, f.name AS [Filegroup Name]
    FROM sys.indexes AS i
        JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
        JOIN sys.tables as t ON i.object_id = t.object_id
            AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U')
    GO
    --Create filegroup NewGroup if it does not exist.
    IF NOT EXISTS (SELECT name FROM sys.filegroups
                    WHERE name = N'NewGroup')
        BEGIN
        ALTER DATABASE AdventureWorks2012
            ADD FILEGROUP NewGroup;
        ALTER DATABASE AdventureWorks2012
            ADD FILE (NAME = File1,
                FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\File1.ndf')
            TO FILEGROUP NewGroup;
        END
    GO
    --Verify new filegroup
    SELECT * from sys.filegroups;
    GO
    -- Drop the clustered index and move the BillOfMaterials table to
    -- the Newgroup filegroup.
    -- Set ONLINE = OFF to execute this example on editions other than Enterprise Edition.
    DROP INDEX AK_BillOfMaterials_ProductAssemblyID_ComponentID_StartDate 
        ON Production.BillOfMaterials 
        WITH (ONLINE = ON, MOVE TO NewGroup);
    GO
    -- Verify filegroup location of the moved table.
    SELECT t.name AS [Table Name], i.name AS [Index Name], i.type_desc,
        i.data_space_id, f.name AS [Filegroup Name]
    FROM sys.indexes AS i
        JOIN sys.filegroups AS f ON i.data_space_id = f.data_space_id
        JOIN sys.tables as t ON i.object_id = t.object_id
            AND i.object_id = OBJECT_ID(N'Production.BillOfMaterials','U');
    GO
    

    자세한 내용은 ALTER INDEX(Transact-SQL)를 참조하세요.For more information, see ALTER INDEX (Transact-SQL).