인덱스의 채우기 비율 지정

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

이 항목에서는 채우기 비율의 정의에 대해 설명하고 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 인덱스의 채우기 비율 값을 지정하는 방법에 대해 설명합니다.

채우기 비율 옵션은 인덱스 데이터 스토리지 및 성능을 미세 조정하기 위해 제공됩니다. 인덱스를 만들거나 다시 작성할 때 채우기 비율 값은 데이터로 채울 각 리프 수준 페이지의 공간 백분율을 결정하고 각 페이지의 나머지를 향후 증가를 위한 여유 공간으로 예약합니다. 예를 들어 채우기 비율 값을 80으로 지정하면 각 리프 수준 페이지의 20%가 비어 있으므로 데이터가 기본 테이블에 추가될 때 인덱스 확장을 위한 공간을 제공합니다. 빈 공간은 인덱스의 끝이 아닌 인덱스 행 간에 예약됩니다.

채우기 비율 값은 1에서 100까지의 백분율이며 서버 전체 기본값은 0입니다. 즉, 리프 수준 페이지가 용량으로 채워집니다.

참고 항목

채우기 비율 값 0과 100은 모든 면에서 동일합니다.

항목 내용

시작하기 전에

성능 고려 사항

페이지 분할

올바르게 선택된 채우기 비율 값은 데이터가 기본 테이블에 추가될 때 인덱스 확장을 위한 충분한 공간을 제공하여 잠재적인 페이지 분할을 줄일 수 있습니다. 새 행이 전체 인덱스 페이지에 추가되면 데이터베이스 엔진은 행의 약 절반을 새 페이지로 이동하여 새 행을 위한 공간을 만듭니다. 이 재구성을 페이지 분할이라고 합니다. 페이지 분할은 새 레코드를 위한 공간을 만들지만 수행하는 데 시간이 걸릴 수 있으며 리소스를 많이 사용하는 작업입니다. 또한 I/O 작업을 늘리는 조각화의 원인이 되기도 합니다. 페이지가 자주 분할되면 새 채우기 비율 값이나 기존 채우기 비율 값으로 데이터를 재배포하여 인덱스를 다시 작성할 수 있습니다. 자세한 내용은 인덱스 다시 구성 및 다시 작성을 참조하세요.

0이 아닌 낮음 채우기 비율 값은 인덱스가 증가함에 따라 페이지 분할 요구 사항을 줄일 수 있지만 인덱스에는 더 많은 스토리지 공간이 필요하고 읽기 성능이 저하될 수 있습니다. 많은 삽입 및 업데이트 작업을 지향하는 애플리케이션의 경우에도 데이터베이스 읽기 수는 일반적으로 5에서 10까지 데이터베이스 쓰기 수를 능가합니다. 따라서 기본값이 아닌 채우기 인수를 지정하면 채우기 비율 설정에 반비례하는 양만큼 데이터베이스 읽기 성능이 저하됩니다. 예를 들어 채우기 비율 값이 50이면 데이터베이스 읽기 성능이 2배 감소할 수 있습니다. 인덱스에 더 많은 페이지가 포함되므로 읽기 성능이 저하되므로 데이터를 검색하는 데 필요한 디스크 IO 작업이 증가합니다.

테이블의 끝에 데이터 추가

새 데이터가 테이블 전체에 균등하게 분산되는 경우 0 또는 100 이외의 0이 아닌 채우기 인수는 성능에 적합할 수 있습니다. 그러나 모든 데이터가 테이블의 끝에 추가되면 인덱스 페이지의 빈 공간이 채워지지 않습니다. 예를 들어 인덱스 키 열이 IDENTITY 열인 경우 새 행의 키가 항상 증가하고 인덱스 행이 인덱스 끝에 논리적으로 추가됩니다. 기존 행이 행 크기를 연장하는 데이터로 업데이트되는 경우 채우기 비율은 100 미만입니다. 각 페이지의 추가 바이트는 행의 추가 길이로 인한 페이지 분할을 최소화하는 데 도움이 됩니다.

보안

사용 권한

테이블이나 뷰에 대한 ALTER 권한이 필요합니다. 사용자는 sysadmin 고정 서버 역할의 멤버 또는 db_ddladmindb_owner 고정 데이터베이스 역할의 멤버여야 합니다.

SQL Server Management Studio 사용

테이블 디자이너를 사용하여 채우기 비율을 지정하려면

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스의 채우기 비율을 지정할 테이블이 포함된 데이터베이스를 확장합니다.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다 .

  3. 인덱스의 채우기 비율을 지정할 테이블을 마우스 오른쪽 단추로 클릭하고 디자인을 선택합니다.

  4. 테이블 디자이너 메뉴에서 인덱스/키를 클릭합니다.

  5. 지정하려는 채우기 인수가 있는 인덱스 선택

  6. 채우기 사양을 확장하고 채우기 비율 행을 선택하고 행에 원하는 채우기 요소를 입력합니다.

  7. 닫기를 클릭합니다.

  8. 파일 메뉴에서 table_name 저장을 선택합니다.

개체 탐색기를 사용하여 인덱스의 채우기 비율을 지정하려면

  1. 개체 탐색기에서 더하기 기호를 클릭하여 인덱스의 채우기 비율을 지정할 테이블이 포함된 데이터베이스를 확장합니다.

  2. 더하기 기호를 클릭하여 테이블 폴더를 확장합니다 .

  3. 더하기 기호를 클릭하여 인덱스의 채우기 비율을 지정할 테이블을 확장합니다.

  4. 더하기 기호를 클릭하여 Indexes 폴더를 확장합니다 .

  5. 지정하려는 채우기 인수가 있는 인덱스 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  6. 페이지 선택아래에서 옵션을 선택합니다.

  7. 채우기 비율 행에 원하는 채우기 비율을 입력합니다.

  8. 확인을 클릭합니다.

Transact-SQL 사용

기존 인덱스의 채우기 비율을 지정하려면

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다. 이 예에서는 기존 인덱스를 다시 작성하고 다시 작성하는 동안 지정한 채우기 비율을 적용합니다.

    USE AdventureWorks2022;  
    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  
    

인덱스의 채우기 비율을 지정하는 또 다른 방법

  1. 개체 탐색기에서 데이터베이스 엔진인스턴스에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 클릭합니다.

  3. 다음 예를 복사하여 쿼리 창에 붙여 넣고 실행을 클릭합니다.

    USE AdventureWorks2022;  
    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)를 참조하세요.