2010-02-16 3 views

답변

32

이 당신이 바로 인덱스 조각화가 5 개 이상 (때로는 10 %)에 도달로 인덱스를 ("조각 모음") 재구성한다 일반적인 합의, 그리고이 30 %를 넘어 완전히 때 (을 재건한다 적어도 그것은 많은 장소에서지지하는 것으로 들었던 숫자입니다).

Michelle Ufford (a.k.a. "SQL Fool")에는 automated index defrag script이 있으며 인덱스를 재구성하거나 다시 작성할시기를 결정하는 정확한 한계를 사용합니다.

인덱스 재구성을 처리하는 방법에 대한 좋은 생각과 팁을 가지고 Brad McGehee's tips on rebuild indexes을 참조하십시오. 내가 여기에이 스크립트를 사용


(나는에서이 왔을 때 기억이 안나요 - 그것이 누구! 많은 덕분에 정말 도움이 물건을) 지정된 데이터베이스에있는 모든 인덱스에서 인덱스 조각화를 표시 :

SELECT 
    t.NAME 'Table name', 
    i.NAME 'Index name', 
    ips.index_type_desc, 
    ips.alloc_unit_type_desc, 
    ips.index_depth, 
    ips.index_level, 
    ips.avg_fragmentation_in_percent, 
    ips.fragment_count, 
    ips.avg_fragment_size_in_pages, 
    ips.page_count, 
    ips.avg_page_space_used_in_percent, 
    ips.record_count, 
    ips.ghost_record_count, 
    ips.Version_ghost_record_count, 
    ips.min_record_size_in_bytes, 
    ips.max_record_size_in_bytes, 
    ips.avg_record_size_in_bytes, 
    ips.forwarded_record_count 
FROM 
    sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') ips 
INNER JOIN 
    sys.tables t ON ips.OBJECT_ID = t.Object_ID 
INNER JOIN 
    sys.indexes i ON ips.index_id = i.index_id AND ips.OBJECT_ID = i.object_id 
WHERE 
    AVG_FRAGMENTATION_IN_PERCENT > 0.0 
ORDER BY 
    AVG_FRAGMENTATION_IN_PERCENT, fragment_count 
+0

Brad McGhee의 팁에 대한 링크가 깨졌습니다. 어쩌면 이것이 올바른 링크 일 것입니다. http://www.sql-server-performance.com/2007/rebuilding-indexes/ –

1

데이터베이스의 크기가 주어지면 한 달에 한 번 색인을 쉽게 다시 작성할 수 있습니다. 그러나 크기가 증가함에 따라 약 500GB로, 한 달에 두 번 할 수 있습니다.

+1

오픈 트랜잭션의 수, 유형 및 수명에 따라 다릅니다.이것은 매우 활동적인 10GB 데이터베이스 일 수 있습니다. – NTDLS

4

"필요한 경우"및 "가능한 경우"! 예를 들어

...

  • 첫 조각에 대한 테스트 및 아무것도 재구성을 수행하거나 재 구축 할 것인지 여부를 결정합니다. SQL Fool's script does this 예를 들어, 주말 @minFragmentation@rebuildThreshold 매개 변수

    매일
  • 마 통계, 말, 그러나 인덱스가 있습니다. 유지 관리 창은 무엇입니까?

1

인덱스 저하로 인해 제품이 악영향을받지 않도록 인덱스를 자주 다시 작성해야합니다. 나는 이것이 모호하게 보인다는 것을 이해한다. 그러나 모든 데이터베이스는 다르고 다른 방식으로 사용된다. 쓰기 작업 (삽입/업데이트)이 발생하는 인덱스는 정기적으로 다시 작성/조각 모음해야합니다. 정적 또는 주로 읽기 전용 테이블은 많이 다시 색인 할 필요가 없습니다.

색인의 조각화 수준을 확인하고 조각화되는 빈도 및 조각화의 실제 수준을 결정하려면 dbcc showcontig([Table])을 사용해야합니다.

인덱스가 너무 단편화되어 (20 % -30 % 이상) 색인이 완전히 다시 작성되지만 충분히 큰 중단 시간 창을 찾을 수없고 조각화 수준이 상대적으로 낮 으면 (1 % -25 %) 색인을 완전히 다시 작성하십시오. dbcc indexdefrag([Database], [Table], [Index])을 사용하여 "온라인"fassion에서 색인을 조각 모음해야합니다. 또한 인덱스 조각 모음 작업을 중지하고 나중에 작업을 손실하지 않고 다시 시작할 수 있음을 명심하십시오.

데이터베이스와 해당 색인을 "조정"상태로 유지하면 약간의 모니터링을 통해 언제 다시 색인 할 지에 대한 느낌을 얻습니다.

+1

SQL Server 2005에서이 3 가지 DBCC 명령 중 아무 것도 사용하지 않을 것입니다. – gbn

+0

나는 오래 전부터, 학교 SQL 사람. 좀 자세히 알려주세요 .... 계몽 해주세요. – NTDLS

+1

SQL Server 2005부터는 사용되지 않는 것으로 표시되어 이후 버전에서는 제거 될 예정입니다. 다음을 언급하는 URL은 다음과 같습니다. http://weblogs.sqlteam.com/tarad/archive/2007/02/26/60121.aspx & http://www.mssqltips.com/tip.asp?tip=1352 및 여기에 지혜의 공식 단어가 있습니다. http://msdn.microsoft.com/en-us/library/ms143729.aspx –

관련 문제