SQL Server에서 인덱스를 다시 작성하고 재구성해야하는 이유 검색 한 후 이유를

인터넷을 검색 한 후 이유를 찾을 수 없습니다

  1. SQL Server에서 인덱스를 다시 작성하고 재구성해야하는 이유는 무엇입니까?

  2. 우리가 재구성하고 재구성 할 때 내부적으로 어떤 일이 발생합니까?

사이트 의 기사 는 다음과 같이 말합니다.

인덱스 조각화가 40 %보다 크면 인덱스를 다시 작성해야합니다. 인덱스 조각화가 10 %-40 % 인 경우 인덱스를 재구성해야합니다. 인덱스 재 구축 프로세스는 더 많은 CPU를 사용하며 데이터베이스 리소스를 잠급니다. SQL Server 개발 버전 및 엔터프라이즈 버전에는 ONLINE 옵션이 있으며, 인덱스를 다시 작성할 때 설정할 수 있습니다. ONLINE 옵션은 재 구축 중에 인덱스를 계속 사용할 수있게합니다.

이해할 수는 WHEN없지만 WHY그렇게하려면 인덱스를 다시 작성하고 재구성해야한다는 것을 알고 싶습니다 .



답변

삽입 업데이트 및 삭제를 수행하면 색인이 내부 및 외부에서 조각화됩니다.

내부 조각화는 인덱스 페이지에 여유 공간이 많기 때문에 인덱스를 검색 할 때 SQL Server에서 더 많은 페이지를 읽어야한다는 의미입니다.

외부 조각화는 인덱스 페이지가 더 이상 순서가없는 경우이므로 SQL Server는 특히 IO 용어로 인덱스를 읽으려면 더 많은 작업을 수행해야합니다.

인덱스가 너무 조각화되면 쿼리 효율성이 떨어지지 만 최악의 경우 SQL Server는 인덱스를 모두 함께 사용하지 않으므로 사실상 모든 쿼리에서 테이블 스캔 또는 클러스터 된 인덱스 스캔을 수행해야합니다. 이렇게하면 성능이 크게 저하됩니다!

인덱스를 재구성하면 SQL Server는 기존 인덱스 페이지를 사용하여 해당 연령대의 데이터를 섞습니다. 이렇게하면 내부 조각화가 완화되고 소량의 외부 조각화가 제거 될 수도 있습니다. 재 구축보다 가벼운 작업이며 항상 온라인 상태입니다.

인덱스를 다시 작성할 때 SQL Server는 실제로 인덱스 데이터를 사용하여 새로운 인덱스 페이지 집합을 사용합니다. 이렇게하면 내부 및 외부 조각화가 모두 완화되지만 더 무거운 작업이 가능하며 SQL Server 버전 및 설정에 따라 온라인 작업으로 수행 할 수 있지만 기본적으로 인덱스가 오프라인 상태가됩니다.

그러나 Rebuild 후에는 조각화가 0이 아닙니다. MAXDOP 쿼리 힌트를 사용하지 않는 한 SQL Server는 다시 작성 작업을 병렬화하고 더 많은 프로세서를 사용하면 각 프로세서 나 코어가 개별적으로 인덱스의 섹션이나 조각을 다시 작성하기 때문에 더 많은 조각화가 발생할 수 있습니다. 서로. 이는 최상의 조각화 수준과 인덱스를 다시 작성하는 데 걸리는 시간 사이의 균형입니다. 거의 0 조각화의 경우 MAXDOP 1을 사용하고 결과를 TempDB에서 정렬하십시오.


답변

데이터베이스 수준 속도 저하 / 장기 실행 쿼리 등의 문제를 일으키는 조각화를 제거하기 위해

조각화 및 인덱스 재구성 및 재구성 (또는 인덱스 페이지 재구성) 작동 방법에 대한 자세한 내용은 아래 링크를 참조하십시오. https://www.idera.com/productssolutions/sqlserver/sqldefragmanager/what-is-fragmentation