채우기 비율
채우기 비율 옵션은 미세 조정 인덱스 데이터 저장소와 성능을 위해 제공됩니다. 인덱스를 만들거나 다시 작성할 때 채우기 비율에 따라 각 리프 수준 페이지에서 데이터로 채울 공간 비율이 결정되므로 이후 인덱스 증가를 위한 여유 공간을 확보할 수 있습니다. 예를 들어 채우기 비율 값을 80으로 지정하면 기본 테이블의 데이터 추가에 따른 인덱스 확장을 위해 각 리프 수준 페이지의 20%가 비게 됩니다. 빈 공간은 페이지의 끝이 아닌 각 페이지의 인덱스 행 사이에 예약됩니다.
채우기 비율 값은 1%부터 100%까지입니다. 대부분의 경우 서버 차원의 기본값인 0을 사용하는 것이 가장 좋습니다. 채우기 비율을 0으로 설정하면 리프 수준이 꽉 채워집니다.
[!참고] 채우기 비율 값 0과 100은 모든 면에서 동일합니다.
CREATE INDEX 또는 ALTER INDEX 문을 사용하여 각 인덱스에 대한 채우기 비율 값을 설정할 수 있습니다. 서버 차원의 기본값을 수정하려면 sp_configure 시스템 저장 프로시저를 사용합니다. 인덱스의 채우기 비율 값을 보려면 sys.indexes 카탈로그 뷰를 사용합니다.
중요: |
---|
채우기 비율 설정은 인덱스를 만들거나 다시 작성할 때만 적용됩니다. SQL Server 2005 데이터베이스 엔진에서는 페이지에 지정된 비율의 빈 공간을 동적으로 유지하지 않습니다. 데이터 페이지에 여분의 공간을 유지하려는 과정에서 채우기 비율의 사용 목적이 어긋날 수 있습니다. 데이터가 입력될 때 데이터베이스 엔진이 각 페이지에서 채우기 비율에 지정된 만큼의 빈 공간을 유지하기 위해 페이지를 분할해야 하는 경우입니다. |
성능 고려 사항
페이지 분할
채우기 비율 값을 적절히 선택하여 기본 테이블에 데이터가 추가될 때 인덱스 확장을 위한 충분한 공간을 제공함으로써 페이지 분할 가능성을 줄일 수 있습니다.
가득 찬 인덱스 페이지에 새 행이 추가되면 데이터베이스 엔진에서 행의 절반 정도를 새 페이지로 옮겨 새 행을 위한 공간을 만듭니다. 이러한 재구성을 페이지 분할이라고 합니다. 페이지 분할은 새 레코드를 위한 공간을 만들지만 수행하는 데 시간이 걸리고 리소스를 많이 사용하는 작업입니다. 또한 I/O 작업을 늘리는 조각화의 원인이 되기도 합니다. 페이지가 자주 분할되면 새 채우기 비율 값이나 기존 채우기 비율 값으로 데이터를 재배포하여 인덱스를 다시 작성할 수 있습니다. 자세한 내용은 인덱스 다시 구성 및 다시 작성을 참조하십시오.
채우기 비율 값을 0이 아닌 낮은 값으로 설정하면 인덱스 증가에 따른 페이지 분할을 줄일 수 있지만 인덱스에 더 많은 저장 공간이 필요하게 되고 읽기 성능이 저하될 수 있습니다. 삽입 및 업데이트 작업이 많은 응용 프로그램에서도 대개 데이터베이스 읽기 횟수가 데이터베이스 쓰기 횟수보다 10 대 5 정도로 훨씬 많습니다. 따라서 기본값 이외의 채우기 비율을 지정하면 채우기 비율 설정에 반비례하는 양만큼 데이터베이스 읽기 성능이 저하됩니다. 예를 들어 채우기 비율 값을 50으로 지정하면 데이터베이스 읽기 성능이 두 배 떨어집니다. 인덱스에 더 많은 페이지가 포함되므로 읽기 성능이 저하되어 데이터 검색에 필요한 디스크 IO 작업이 늘어납니다.
테이블 끝에 데이터 추가
새 데이터가 테이블에 고르게 분포되어 있는 경우 0이 아닌 채우기 비율을 사용하면 성능이 향상됩니다. 하지만 모든 데이터가 테이블의 끝에 추가된 경우에는 빈 공간이 채워지지 않습니다. 예를 들어 인덱스 키 열이 IDENTITY 열이면 새 행의 키가 항상 증가하기 때문에 논리적으로 테이블의 끝에 행이 추가됩니다. 이 경우에는 페이지 분할로 인한 성능 저하가 발생하지 않습니다. 리프 수준이 채워지도록 기본 채우기 비율인 0을 사용하거나 채우기 비율을 100으로 지정해야 합니다.
참고 항목
개념
인덱스 만들기(데이터베이스 엔진)
fill factor 옵션
관련 자료
ALTER INDEX(Transact-SQL)
CREATE INDEX(Transact-SQL)
sys.indexes(Transact-SQL)
sp_configure(Transact-SQL)