인덱스의 채우기 비율 지정Specify Fill Factor for an Index

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

이 항목에서는 채우기 비율의 역할에 대해 설명하고 SQL Server 2016SQL Server 2016 또는 SQL Server Management StudioSQL Server Management Studio 을 사용하여 Transact-SQLTransact-SQL에서 인덱스의 채우기 비율 값을 지정하는 방법에 대해 설명합니다.This topic describes what fill factor is and how to specify a fill factor value on an index in SQL Server 2016SQL Server 2016 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

채우기 비율 옵션은 미세 조정 인덱스 데이터 저장소와 성능을 위해 제공됩니다.The fill-factor option is provided for fine-tuning index data storage and performance. 인덱스를 만들거나 다시 작성할 때 채우기 비율에 따라 각 리프 수준 페이지에서 데이터로 채울 공간 비율이 결정되므로 각 페이지에서 나머지 부분을 이후 인덱스 증가에 대비한 여유 공간으로 확보할 수 있습니다.When an index is created or rebuilt, the fill-factor value determines the percentage of space on each leaf-level page to be filled with data, reserving the remainder on each page as free space for future growth. 예를 들어 채우기 비율 값을 80으로 지정하면 기본 테이블의 데이터 추가에 따른 인덱스 확장을 위해 각 리프 수준 페이지의 20%가 비게 됩니다.For example, specifying a fill-factor value of 80 means that 20 percent of each leaf-level page will be left empty, providing space for index expansion as data is added to the underlying table. 빈 공간은 인덱스의 끝이 아닌 인덱스 행 간에 예약됩니다.The empty space is reserved between the index rows rather than at the end of the index.

채우기 비율 값은 0%에서 100% 사이이며 서버 차원의 기본값은 0입니다. 이 값은 리프 수준 페이지가 꽉 채워짐을 의미합니다.The fill-factor value is a percentage from 1 to 100, and the server-wide default is 0 which means that the leaf-level pages are filled to capacity.

참고

채우기 비율 값 0과 100은 모든 면에서 동일합니다.Fill-factor values 0 and 100 are the same in all respects.

항목 내용In This Topic

시작하기 전에 Before You Begin

성능 고려 사항 Performance Considerations

페이지 분할Page Splits

채우기 비율 값을 적절히 선택하여 기본 테이블에 데이터가 추가될 때 인덱스 확장을 위한 충분한 공간을 제공함으로써 페이지 분할 가능성을 줄일 수 있습니다. 가득찬 인덱스 페이지에 새 행이 추가되면 데이터베이스 엔진Database Engine 에서 행의 절반 정도를 새 페이지로 옮겨 새 행을 위한 공간을 만듭니다.A correctly chosen fill-factor value can reduce potential page splits by providing enough space for index expansion as data is added to the underlying table.When a new row is added to a full index page, the 데이터베이스 엔진Database Engine moves approximately half the rows to a new page to make room for the new row. 이러한 재구성을 페이지 분할이라고 합니다.This reorganization is known as a page split. 페이지 분할은 새 레코드를 위한 공간을 만들지만 수행하는 데 시간이 걸리고 리소스를 많이 사용하는 작업입니다.A page split makes room for new records, but can take time to perform and is a resource intensive operation. 또한 I/O 작업을 늘리는 조각화의 원인이 되기도 합니다.Also, it can cause fragmentation that causes increased I/O operations. 페이지가 자주 분할되면 새 채우기 비율 값이나 기존 채우기 비율 값으로 데이터를 재배포하여 인덱스를 다시 작성할 수 있습니다.When frequent page splits occur, the index can be rebuilt by using a new or existing fill-factor value to redistribute the data. 자세한 내용은 인덱스 다시 구성 및 다시 작성을 참조하세요.For more information, see Reorganize and Rebuild Indexes.

채우기 비율 값을 0이 아닌 낮은 값으로 설정하면 인덱스 증가에 따른 페이지 분할을 줄일 수 있지만 인덱스에 더 많은 저장 공간이 필요하게 되고 읽기 성능이 저하될 수 있습니다.Although a low, nonzero fill-factor value may reduce the requirement to split pages as the index grows, the index will require more storage space and can decrease read performance. 삽입 및 업데이트 작업이 많은 응용 프로그램에서도 대개 데이터베이스 읽기 횟수가 데이터베이스 쓰기 횟수보다 10 대 5 정도로 훨씬 많습니다.Even for an application oriented for many insert and update operations, the number of database reads typically outnumber database writes by a factor of 5 to 10. 따라서 기본값 이외의 채우기 비율을 지정하면 채우기 비율 설정에 반비례하는 양만큼 데이터베이스 읽기 성능이 저하됩니다.Therefore, specifying a fill factor other than the default can decrease database read performance by an amount inversely proportional to the fill-factor setting. 예를 들어 채우기 비율 값을 50으로 지정하면 데이터베이스 읽기 성능이 두 배 떨어집니다.For example, a fill-factor value of 50 can cause database read performance to decrease by two times. 인덱스에 더 많은 페이지가 포함되므로 읽기 성능이 저하되어 데이터 검색에 필요한 디스크 IO 작업이 늘어납니다.Read performance is decreased because the index contains more pages, therefore increasing the disk IO operations required to retrieve the data.

테이블 끝에 데이터 추가Adding Data to the End of the Table

새 데이터가 테이블에 균일하게 분포된 경우 0이나 100이 아닌 채우기 비율을 지정하면 성능이 향상될 수 있습니다.A nonzero fill factor other than 0 or 100 can be good for performance if the new data is evenly distributed throughout the table. 그러나 모든 데이터를 테이블 끝에 추가한 경우 인덱스 페이지의 빈 공간이 꽉 채워지지 않습니다.However, if all the data is added to the end of the table, the empty space in the index pages will not be filled. 예를 들어 인덱스 키 열이 IDENTITY 열이면 새 행의 키는 항상 증가하며 인덱스 행은 인덱스 끝에 논리적으로 추가됩니다.For example, if the index key column is an IDENTITY column, the key for new rows is always increasing and the index rows are logically added to the end of the index. 행의 크기를 늘리는 데이터로 기존 행을 업데이트하려는 경우 100 미만의 채우기 비율을 사용합니다.If existing rows will be updated with data that lengthens the size of the rows, use a fill factor of less than 100. 각 페이지에 추가 바이트를 설정하면 길어지는 행으로 인해 발생하는 페이지 분할을 최소화하는 데 도움이 됩니다.The extra bytes on each page will help to minimize page splits caused by extra length in the rows.

보안 Security

사용 권한 Permissions

테이블이나 뷰에 대한 ALTER 권한이 필요합니다.Requires ALTER permission on the table or view. 사용자는 sysadmin 고정 서버 역할의 멤버 또는 db_ddladmindb_owner 고정 데이터베이스 역할의 멤버여야 합니다.User must be a member of the sysadmin fixed server role or the db_ddladmin and db_owner fixed database roles.

SQL Server Management Studio 사용 Using SQL Server Management Studio

테이블 디자이너를 사용하여 채우기 비율을 지정하려면To specify a fill factor by using Table Designer

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스의 채우기 비율을 지정할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to specify an index’s fill factor.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다.Click the plus sign to expand the Tables folder.

  3. 인덱스의 채우기 비율을 지정할 테이블을 마우스 오른쪽 단추로 클릭하고 디자인을 선택합니다.Right-click the table on which you want to specify an index’s fill factor and select Design.

  4. 테이블 디자이너 메뉴에서 인덱스/키를 클릭합니다.On the Table Designer menu, click Indexes/Keys.

  5. 채우기 비율을 지정할 인덱스를 선택합니다.Select the index with the fill factor that you want to specify.

  6. 채우기 사양을 확장하고 채우기 비율 행을 선택한 다음 원하는 채우기 비율을 입력합니다.Expand Fill Specification, select the Fill Factor row and enter the fill factor you want in the row.

  7. 닫기를 클릭합니다.Click Close.

  8. 파일 메뉴에서 table_name 저장을 선택합니다.On the File menu, select Savetable_name.

개체 탐색기를 사용하여 인덱스의 채우기 비율을 지정하려면To specify a fill factor in an index by using Object Explorer

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스의 채우기 비율을 지정할 테이블이 포함된 데이터베이스를 확장합니다.In Object Explorer, click the plus sign to expand the database that contains the table on which you want to specify an index’s fill factor.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다.Click the plus sign to expand the Tables folder.

  3. 더하기 기호를 클릭하여 인덱스의 채우기 비율을 지정할 테이블을 확장합니다.Click the plus sign to expand the table on which you want to specify an index’s fill factor.

  4. 더하기 기호를 클릭하여 인덱스 폴더를 확장합니다.Click the plus sign to expand the Indexes folder.

  5. 채우기 비율을 지정할 인덱스를 마우스 오른쪽 단추로 클릭한 다음 속성을 선택합니다.Right-click the index with the fill factor that you want to specify and select Properties.

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

  7. 채우기 비율 행에 원하는 채우기 비율을 입력합니다.In the Fill factor row, enter the fill factor that you want.

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

Transact-SQL 사용 Using Transact-SQL

기존 인덱스의 채우기 비율을 지정하려면To specify a fill factor in an existing index

  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 index and applies the specified fill factor during the rebuild operation.

    USE AdventureWorks2012;  
    GO  
    -- Rebuilds the IX_Employee_OrganizationLevel_OrganizationNode index   
    -- with a fill factor of 80 on the HumanResources.Employee table.  
    
    ALTER INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
    REBUILD WITH (FILLFACTOR = 80);   
    GO  
    

인덱스의 채우기 비율을 지정하는 다른 방법Another way to specify a fill factor in an index

  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.

    USE AdventureWorks2012;  
    GO  
    /* Drops and re-creates the IX_Employee_OrganizationLevel_OrganizationNode index on the HumanResources.Employee table with a fill factor of 80.  
    */  
    
    CREATE INDEX IX_Employee_OrganizationLevel_OrganizationNode ON HumanResources.Employee  
       (OrganizationLevel, OrganizationNode)   
    WITH (DROP_EXISTING = ON, FILLFACTOR = 80);   
    GO  
    

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