대량의 데이터를 빈 데이터베이스로 가져오고 있는데 시작하기 전에 고유하지 않은 비 클러스터형 인덱스를 모두 비활성화하여 가져 오기 성능을 향상시킬 수 있는지 확인했습니다.
이제 색인을 다시 활성화하고 싶습니다.이를 최적화하기 위해 할 수있는 일이 있는지 궁금합니다.
100 개가 넘는 테이블과 거의 2,000 개의 인덱스가 다시 작성됩니다. 데이터베이스 크기는 200GB입니다.
내가 실행중인 스크립트의 핵심 부분은 다음과 같습니다.
declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for
select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild'
from sys.indexes as i
Inner Join sys.objects o
On o.object_id = i.object_id
Where o.is_ms_shipped = 0
And i.index_id >= 1
and i.type > 1
and i.is_disabled = 1
alter index 문에 ONLINE = OFF를 설정하는 것을 고려했지만 인덱스가 비활성화 된 것으로 시작하면이 설정이 효과가 있는지 확신 할 수 없었습니다. 또한 SORT_IN_TEMPDB = ON 설정을 고려했지만 tempdb 파일이 데이터베이스의 .mdf 파일과 동일한 드라이브에 있기 때문에 그로 인한 이점도 없다고 가정했습니다.
재 빌드 스크립트를 실행하는 동안 많은 CXPACKET 대기 유형이 있음을 알았습니다. 나는 그것이 왜 그런지 또는 내가 해결해야 할 문제인지 이해하지 못합니다.
관련이있을 수있는 마지막 한 가지 사항 : 데이터베이스로 데이터를 가져 오는 것 외에 현재 전체 서버가 비활성 상태입니다. 고려하거나 걱정할 다른 사용자 활동은 없습니다. 저의 유일한 관심사는 가능한 가장 짧은 시간에 데이터베이스로 데이터를 가져 오는 것입니다.
CXPACKET
대기 정보 : 인덱스 재 구축 자체는 인덱스 검색 (심지어 재 구축 중인 인덱스도 )하며 이러한 스캔은 병렬 처리를 사용할 수 있습니다. 이러한 대기에 대해 걱정하지 않아도됩니다. 병렬 처리가 도움이 될 수 있습니다.