채우기 비율

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

채우기 비율 값은 0%에서 100% 사이이며 서버 차원의 기본값은 0입니다. 이 값은 리프 수준 페이지가 꽉 채워짐을 의미합니다.

[!참고]

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

CREATE INDEX 또는 ALTER INDEX 문을 사용하여 각 인덱스에 대한 채우기 비율 값을 설정할 수 있습니다. 서버 차원의 기본값을 수정하려면 sp_configure 시스템 저장 프로시저를 사용합니다. 인덱스의 채우기 비율 값을 보려면 sys.indexes를 사용합니다.

중요 정보중요

채우기 비율 설정은 인덱스를 만들거나 다시 작성할 때만 적용됩니다. SQL Server 데이터베이스 엔진에서는 페이지에 지정된 비율의 빈 공간을 동적으로 유지하지 않습니다. 데이터 페이지에 여분의 공간을 유지하려는 과정에서 채우기 비율의 사용 목적이 어긋날 수 있습니다. 데이터가 입력될 때 데이터베이스 엔진이 각 페이지에서 채우기 비율에 지정된 만큼의 빈 공간을 유지하기 위해 페이지를 분할해야 하는 경우입니다.

성능 고려 사항

페이지 분할

채우기 비율 값을 적절히 선택하여 기본 테이블에 데이터가 추가될 때 인덱스 확장을 위한 충분한 공간을 제공함으로써 페이지 분할 가능성을 줄일 수 있습니다. 가득 찬 인덱스 페이지에 새 행이 추가되면 데이터베이스 엔진에서 행의 절반 정도를 새 페이지로 옮겨 새 행을 위한 공간을 만듭니다. 이러한 재구성을 페이지 분할이라고 합니다. 페이지 분할은 새 레코드를 위한 공간을 만들지만 수행하는 데 시간이 걸리고 리소스를 많이 사용하는 작업입니다. 또한 I/O 작업을 늘리는 조각화의 원인이 되기도 합니다. 페이지가 자주 분할되면 새 채우기 비율 값이나 기존 채우기 비율 값으로 데이터를 재배포하여 인덱스를 다시 작성할 수 있습니다. 자세한 내용은 인덱스 다시 구성 및 다시 작성을 참조하십시오.

채우기 비율 값을 0이 아닌 낮은 값으로 설정하면 인덱스 증가에 따른 페이지 분할을 줄일 수 있지만 인덱스에 더 많은 저장 공간이 필요하게 되고 읽기 성능이 저하될 수 있습니다. 삽입 및 업데이트 작업이 많은 응용 프로그램에서도 대개 데이터베이스 읽기 횟수가 데이터베이스 쓰기 횟수보다 10 대 5 정도로 훨씬 많습니다. 따라서 기본값 이외의 채우기 비율을 지정하면 채우기 비율 설정에 반비례하는 양만큼 데이터베이스 읽기 성능이 저하됩니다. 예를 들어 채우기 비율 값을 50으로 지정하면 데이터베이스 읽기 성능이 두 배 떨어집니다. 인덱스에 더 많은 페이지가 포함되므로 읽기 성능이 저하되어 데이터 검색에 필요한 디스크 IO 작업이 늘어납니다.

테이블 끝에 데이터 추가

새 데이터가 테이블에 균일하게 분포된 경우 0이나 100이 아닌 채우기 비율을 지정하면 성능이 향상될 수 있습니다. 그러나 모든 데이터를 테이블 끝에 추가한 경우 인덱스 페이지의 빈 공간이 꽉 채워지지 않습니다. 예를 들어 인덱스 키 열이 IDENTITY 열이면 새 행의 키는 항상 증가하며 인덱스 행은 인덱스 끝에 논리적으로 추가됩니다. 행의 크기를 늘리는 데이터로 기존 행을 업데이트하려는 경우 100 미만의 채우기 비율을 사용합니다. 각 페이지에 추가 바이트를 설정하면 길어지는 행으로 인해 발생하는 페이지 분할을 최소화하는 데 도움이 됩니다.