채우기 비율을 기반으로 한 인덱스의 데이터 동작


14

기본 채우기 비율이 20 인 데이터베이스가 있다고 가정 해 보겠습니다. 데이터를 삽입 할 때마다 최대 20 %까지 채워진 페이지 만 작성합니까?

내 이해에서, 데이터가 삽입되면 페이지에 대략 20 %의 데이터가있을 것입니다. 그러나 데이터가 업데이트되면 색인을 20 % 이상 확장하여 데이터를 채우고 페이지 분할을 생성 할 수 있습니다.

답변:


16

채우기 비율은 인덱스를 만들거나 다시 작성할 때만 작동합니다. 이러한 조작 중에 채워지는 리프 레벨 페이지의 색인에 대한 소비량입니다. ( 영향을받는 페이지 수준에 대한 자세한 설명은 아래 참고 사항을 참조하십시오 )

데이터에 대한 DML 명령이있을 때 ( INSERT, UPDATE, 및 / 또는 DELETE), 그것은 해당 영향을받는 인덱스에 발생합니다. 즉, 20 % 채워진 페이지가 있고 해당 페이지에 데이터를 삽입하면 페이지에 데이터의 20 % 이상이 포함됩니다 (예를 들어 35 %라고합시다). 다른 인서트를 수행하십시오. 이제 페이지가 64 % 채워졌습니다. 색인을 다시 빌드하면 리프 레벨 페이지에 지정한 공간 백분율 (또는 서버의 기본값)이 상대적으로 포함됩니다.

( 참고 지정하지 않는 경우, PAD_INDEXON, 채우기 비율은 리프 수준 페이지에 적용됩니다.하지만 설정 한 경우 PAD_INDEX = ON, 채우기 비율은 인덱스의 중간 수준 페이지에 대한 고려됩니다. 기본값은OFF )

채우기 비율을 조정하는 이유는 기본 100/0을 사용하는 대신 데이터를 삽입하거나 업데이트 할 때 페이지 분할을 최소화하기 위해서입니다. 그러나 명심하십시오. 무료는 없습니다. 채우기 비율이 낮을수록 일반적으로 더 많은 공간 데이터가 사용됩니다. 인덱스에 대해 80 %의 여유 페이지 공간을 유지하면 비교적 많은 양의 디스크 공간이 소비되어 더 많은 읽기가 발생할 수 있습니다.

내 이해에서, 데이터가 삽입되면 페이지에 대략 20 %의 데이터가있을 것입니다. 그러나 데이터가 업데이트되면 색인을 20 % 이상 확장하여 데이터를 채우고 페이지 분할을 생성 할 수 있습니다.

데이터가 삽입되면 해당 페이지의 해당 인덱스에 삽입됩니다. 이로 인해 페이지 소비량이 채우기 비율보다 높아질 수 있습니다.

새 데이터가 전체 색인 페이지에 추가되면 페이지 분할이 발생합니다. 그런 다음 SQL Server는 페이지를 분할하여 전체 페이지의 데이터 절반을 새 페이지로 나눕니다. 다시 한 번 채우기 비율이 적용되지 않습니다.

채우기 비율을 낮추는 합법적 인 이유는 페이지 분할을 최소화하여 인덱스 페이지 조각화를 최소화하기위한 것입니다.


3
또한 공간을 늘리거나 할당하는 데 필요한 IO 작업을 최소화합니다.
JNK

좋아, 그래서 나는 행동이 어떻게 작동했는지 틀렸다. 자세한 답변을 주셔서 감사합니다!
DForck42

1
@ DForck42 문제 없습니다. 기꺼이 도와 드리겠습니다.
토마스 스트링거

낮은 필 팩터를 설정하면 읽기 속도가 느려지고 (페이지가 더 많음) 인서트 속도가 빠르다는 사실을 요약 할 수 있습니까?
모든 거래의 존

2
@Jon : 높은 fillfactor 인덱스를 사용하면 조각화되고 읽기 속도가 느려집니다. 모든 인덱스에는 최적의 fillfactor가 있습니다. 그 위와 아래에는 쓰기 및 읽기 속도가 느립니다. 최적 성은 사용 패턴 (하루에 몇 개의 인서트가 있는지), 유지 보수 패턴 (재 구축 빈도), 데이터 (키가 고유 한 정도)에 따라 다릅니다. 고유하지 않은 인덱스는 더 많은 여유 공간이 필요합니다 (낮은 채우기 비율).
wqw
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.