2011-06-10 2 views
39

인덱스를 다시 작성할 때 ONLINE = OFF 및 ONLINE = ON에 대한 옵션이 있습니다. 나는 온라인 모드가 켜져있을 때 색인의 사본을 만들고이를 활용하는 새로운 검색어를 전환 한 다음 원래 색인을 다시 작성하고 버전 관리를 사용하여 변경 사항을 추적하여 둘 다 수정합니다 (잘못된 경우 수정).SQL Server의 오프라인 인덱스 재 작성과 온라인 인덱스 재 작성의 차이점은 무엇입니까?

그러나 SQL은 오프라인 모드에서 무엇을합니까?

+2

레코드의 경우, 다시 작성할 때뿐만 아니라 새 인덱스를 추가 할 때도 ONLINE = ON 옵션을 사용할 수 있습니다. – datagod

답변

53

온라인 모드에서는 이전 색인에 읽기 및 쓰기 액세스가 가능한 반면 새 색인이 작성됩니다. 이전 색인의 모든 갱신 사항이 새 색인에도 적용됩니다. 반물질 열은 업데이트와 재 작성 간의 가능한 충돌을 추적하는 데 사용됩니다 (즉, 아직 복사되지 않은 행 삭제). Online Index Operations을 참조하십시오. 프로세스가 완료되면 잠시 테이블이 잠기고 새 인덱스가 이전 인덱스를 대체합니다. 인덱스에 LOB 열이 포함되어 있으면 SQL Server 2005/2008/R2에서 ONLINE 작업이 지원되지 않습니다.

OFFLINE 모드에서 테이블은 읽기 또는 쓰기를 위해 먼저 잠긴 다음 테이블에 잠금을 유지하면서 이전 인덱스에서 새 인덱스를 만듭니다. 인덱스를 다시 작성하는 동안 테이블에서 읽기 또는 쓰기 조작이 허용되지 않습니다. 작업이 완료 될 때만 테이블 잠금이 해제되고 읽기 및 쓰기가 다시 허용됩니다.

SQL Server 2012에서 LOB에 대한 제한이 해제되었습니다 (Online Index Operations for indexes containing LOB columns 참조).

+1

"인덱스에 LOB 열이 포함되어 있으면 온라인 작업이 SQL Server 2005/2008/R2에서 지원되지 않습니다." 질문 : REBUILD 작업이 실패하거나 OFFLINE REBUILD로 저하됩니까? – esac

+1

오류 2725와 함께 실패합니다. –

+0

LOB 열을 포함하는 모든 인덱스 또는 클러스터 된 인덱스 만 포함합니까? – esac

6

온라인 인덱스 재 작성은 테이블 잠금에있어 방해가되지 않습니다. 오프라인으로 재 구축하면 테이블이 과도하게 잠기므로 재 구축이 진행되는 동안 데이터베이스에 액세스하려는 작업에 심각한 차단 문제가 발생할 수 있습니다.

"인덱스 재구성 기간 동안 [오프라인 다시 작성 중에] 테이블 잠금이 적용됩니다. 클러스터 된 인덱스, 공간 인덱스 또는 XML 인덱스를 생성, 다시 작성 또는 삭제하거나 클러스터되지 않은 인덱스를 다시 작성하거나 삭제하는 오프라인 인덱스 작업 테이블에 대한 스키마 수정 (Sch-M) 잠금을 가져 오므로 작업 기간 동안 기본 테이블에 대한 모든 사용자 액세스가 금지됩니다. 비 클러스터형 인덱스를 만드는 오프라인 인덱스 작업은 테이블에 대한 공유 (S) 잠금을 가져옵니다 이것은 기본 테이블에 대한 업데이트를 방지하지만 SELECT 문과 같은 읽기 작업을 허용합니다. "

http://msdn.microsoft.com/en-us/library/ms188388(v=sql.110).aspx

또한 온라인 인덱스 재 구축은 기업 (또는 개발자) 버전에만 사용할 수있는 기능입니다.

1

주요 차이점은 다음과

1) 오프라인 인덱스 재구성 ONLINE보다 빠른 재.

2) SQL Server 온라인 인덱스 재 작성 중에 여분의 디스크 공간이 필요합니다.

3) SQL Server 온라인 인덱스 재 작성으로 얻은 SQL Server 잠금.

  • 이 스키마 수정 잠금은 테이블에 대한 다른 모든 동시 액세스를 차단하지만 이전 색인을 삭제하고 통계를 업데이트하는 동안 매우 짧은 기간 동안 만 보관됩니다.
관련 문제