Yeniden düzenleme ve dizinler yeniden oluşturma

Bu konu yeniden düzenlemek veya parçalanmış bir dizin yeniden oluşturma açıklar SQL Server 2012kullanarak SQL Server Management Studioya Transact-SQL. SQL Server Veritabanı AltyapısıTemel veri ekleme, güncelleştirme veya silme işlemleri yapıldığında dizinler otomatik olarak korur. Zamanla bu değişiklikleri (parçalara) veritabanında dağınık olmak üzere dizin bilgileri neden olabilir. Parçalanma var dizinler içinde mantıksal, anahtar değerine göre sıralama eşleşmiyor fiziksel sayfaları olduğunda veri dosyası içinde sipariş. Ağır parçalanmış dizinler, sorgu performansı düşebilir ve uygulamanız yavaş yanıt vermesine neden olabilir.

Yeniden düzenleme veya bir dizin yeniden dizin parçalanma çare olabilir. Bölümlenmiş dizinler için bir bölüm düzeni inşa edilmiş, sen-ebilmek kullanma ya da bu yöntemlerin tam bir dizin veya dizin tek bir bölüm. Bir dizini yeniden oluşturmak, dizini bırakıp yeniden oluşturur. Bu, parçalanmayı ortadan kaldırır, sayfaları belirtilen veya var olan doldurma faktörü ayarına göre sıkıştırarak disk alanı kazandırır ve dizin satırlarını art arda sayfalar olarak yeniden sıralar. ALL belirtildiğinde, tablodaki tüm dizinler, tek bir işlemde bırakılır ve yeniden oluşturulur. Bir dizini yeniden düzenleme, çok az sistem kaynağı kullanır. Yaprak düzeyi sayfaları yaprak düğümlerinin mantıksal, soldan sağa sıralamasını fiziksel olarak yeniden yaparak tablo ve görünümlerdeki kümelenmiş ve kümelenmemiş dizinleri birleştirir. Yeniden düzenleme ayrıca dizin sayfalarını da sıkıştırır. Sıkıştırma var olan doldurma faktörü değerine dayanır.

Bu Konuda

  • Başlamadan Önce

    Parçalanma algılama

    Sınırlamalar ve Kısıtlamalar

    Güvenlik

  • Bir dizin parçalanma denetlemek için kullanma:

    SQL Server Management Studio

    Transact-SQL

  • Yeniden düzenlemek veya bir dizin yeniden kullanma:

    SQL Server Management Studio

    Transact-SQL

Başlamadan Önce

Parçalanma algılama

Karar vermek için kullanılacak birleştirme yöntemi ilk adımı, dizin parçalanma derecesini belirlemek için analiz etmektir. Sistem işlevi kullanılarak sys.dm_db_index_physical_stats, belirli bir dizin, bir tablo veya dizin oluşturulmuş görünüm tüm dizinler, bir veritabanındaki tüm dizinleri veya tüm veritabanlarındaki tüm dizinler parçalanma algılayabilir. Bölümlenmiş dizinler, desteklenirsys.dm_db_index_physical_stats parçalanma bilgilerini her bölüm için de sağlar.

Tarafından döndürülen sonuç kümesi sys.dm_db_index_physical_stats işlevi aşağıdaki sütunları içerir.

Sütun

Açıklama

avg_fragmentation_in_percent

Mantıksal parçalanma (dizin sırası sayfalarında) yüzdesi.

fragment_count

Parça (fiziksel olarak ardışık yaprak sayfaları) dizin sayısı.

avg_fragment_size_in_pages

Bir dizindeki bir parçası sayfa ortalama sayısı.

Parçalanma derecesini bilinen sonra parçalanma düzeltmek için en iyi yöntemi belirlemek için aşağıdaki tabloyu kullanın.

avg_fragmentation_in_percent değer

Düzeltici deyimi

>% 5'i ve < = %30

ALTER DİZİN YENİDEN DÜZENLE

> 30%

ALTER DİZİN YENİDEN OLUŞTURMA İLE (ÇEVRİMİÇİ AÇIK =) *

* Bir dizini yeniden oluşturuluyor, çevrimiçi veya çevrimdışı çalıştırılabilir. Bir dizini yeniden düzenleme her zaman çevrimiçi yürütülür. Kullanılabilirlik yeniden Düzenle seçeneğine benzer elde etmek için çevrimiçi dizinler yeniden oluşturmalısınız.

Bu değerler, hangi alter dizin yeniden düzenlemek ve alter DIZINI YENIDEN arasında geçiş noktayı belirlemek için kaba bir kılavuz sağlar. Ancak, gerçek değerleri durumda durum değişebilir. Ortamınız için en iyi eşik belirlemek için deneme önemlidir. Böyle küçük bir miktar parçalanma kaldırmayı yararlı hemen hemen her zaman büyük ölçüde yeniden düzenleyerek veya dizini yeniden oluşturuluyor maliyetini tarafından outweighed çünkü çok düşük düzeyde parçalanma (yüzde 5'den az) aşağıdaki komutlardan birini ele alınması gereken değil.

[!NOT]

Genel olarak, parçalanma küçük dizinler üzerinde kontrol edilebilir değildir ve çoğu zaman. Küçük dizinlerin sayfaları karışık uzantılarda depolanır. Küçük bir index Parçalanmanın yeniden düzenleyerek veya dizini yeniden oluşturuluyor sonra azalabilir değil çok karışık kapsamlarını sekiz nesneler tarafından paylaşılır.

Sınırlamalar ve Kısıtlamalar

  • İle fazla 128 kapsamlarını dizinler yeniden iki ayrı bölüm halinde: mantıksal ve fiziksel. Mantıksal aşamasında, dizin tarafından kullanılan varolan ayırma birimleri kaldırma için işaretlenir, veri satırlarını kopyalanır ve sıralama ve sonra saklamak için oluşturulan yeni ayırma birimleri yeniden dizin taşındı. Fiziksel aşamasında, kaldırma için önceden işaretlenmiş ayırma birimleri fiziksel kısa arka planda olur ve birçok kilitleri gerektirmeyen işlemler bırakılır.

  • Dizin seçeneklerini, ne zaman bir dizin yeniden düzenleme belirtilemez.

Güvenlik

İzinler

Tablo veya görünümde ALTER izni gerektirir. Kullanıcı-meli var olmak a üye sysadmin sabit sunucu rolü veya db_ddladmin ve db_owner veritabanı rolleri sabit.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

SQL Server Management Studio Kullanarak

Dizin parçalanma denetlemek için

  1. Nesne Explorer'da dizin'ın parçalanma denetlemek istediğiniz tabloyu içeren veritabanı genişletin.

  2. Genişletme tablo ağıl.

  3. Dizin'ın parçalanma denetlemek istediğiniz tablo genişletin.

  4. Genişletme Dizinler ağıl.

  5. Parçalanma ve seçmek istediğiniz dizini sağ Özellikler.

  6. Altında sayfaseçin parçalanma.

    Aşağıdaki bilgileri kullanılabilir parçalanma sayfa:

    • Sayfa fullness
      Dizin sayfaları ortalama doluluk yüzdesi olarak gösterir. % 100 dizin sayfaları tamamen dolu olduğu anlamına gelir. % 50, ortalama olarak, her dizin sayfasının yarısı dolu olduğu anlamına gelir.

    • Toplam parçalanma
      Mantıksal parçalanma yüzdesi. Bu sırada saklanmazlar sayfalarında dizin sayısını gösterir.

    • Ortalama satır boyutu
      Yaprak düzeyi satır ortalama boyutu.

    • Derinlik
      Yaprak düzeyi de dahil olmak üzere dizin düzeylerin sayısı.

    • Iletilen kayıtları
      İleriye doğru işaretçiler verileri başka bir konuma sahip bir yığın kayıt sayısı. (Yeni satır özgün konumda depolamak için yeterli yer olmadığında bu durumu bir güncelleştirme sırasında oluşur.)

    • Hayalet satırları
      Olarak işaretlenen satır silindi ama henüz kaldırılır. Sunucu meşgul olduğunda bu satırlar bir temizleme iş parçacığı tarafından kaldırılır. Bu değer, bir olağanüstü anlık yalıtım hareket nedeniyle saklanmayan bir satır yoktur.

    • Dizin türü
      Dizin türü. Olası değerler Kümelenmiş dizin, kümelendirilmemiş dizin, ve Birincil xml. Tabloları (dizinler) olmadan bir yığın olarak da saklanabilir, ancak daha sonra bu dizin özellikleri sayfası açılamıyor.

    • Yaprak düzeyi satır
      Yaprak düzeyi satır sayısı.

    • En büyük satır boyutunu
      En büyük yaprak düzeyi satır boyutu.

    • En küçük satır boyutu
      En az yaprak düzeyi satır boyutu.

    • Sayfaları
      Veri sayfaları toplam sayısı.

    • Bölüm Kimliği
      B-ağaç dizini içeren bölüm Kımlığı.

    • Sürüm hayalet satırları
      Bir olağanüstü anlık yalıtım hareket nedeniyle korunur hayalet kayıt sayısı.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

Transact-SQL'i Kullanma

Dizin parçalanma denetlemek için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute.

    USE AdventureWorks2012;
    GO
    -- Find the average fragmentation percentage of all indexes
    -- in the HumanResources.Employee table. 
    SELECT a.index_id, name, avg_fragmentation_in_percent
    FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureWorks2012'), OBJECT_ID(N'HumanResources.Employee'), NULL, NULL, NULL) AS a
        JOIN sys.indexes AS b ON a.object_id = b.object_id AND a.index_id = b.index_id; 
    GO
    

    Yukarıdaki ifade, bir sonuç kümesi benzer döndürebilir.

    index_id    name                                                  avg_fragmentation_in_percent
    ----------- ----------------------------------------------------- ----------------------------
    1           PK_Employee_BusinessEntityID                          0
    2           IX_Employee_OrganizationalNode                        0
    3           IX_Employee_OrganizationalLevel_OrganizationalNode    0
    5           AK_Employee_LoginID                                   66.6666666666667
    6           AK_Employee_NationalIDNumber                          50
    7           AK_Employee_rowguid                                   0
    
    (6 row(s) affected)
    

Daha fazla bilgi için bkz: sys.dm_db_index_physical_stats (Transact-sql).

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

SQL Server Management Studio Kullanarak

Yeniden düzenlemek veya bir dizin yeniden oluşturma

  1. Nesne Explorer'da, bir dizin yeniden düzenlemek istediğiniz tabloyu içeren veritabanı genişletin.

  2. Genişletme tablo ağıl.

  3. Bir dizin yeniden düzenlemek istediğiniz tablo genişletin.

  4. Genişletme Dizinler ağıl.

  5. Yeniden düzenlemek ve seçmek için istediğiniz dizini sağ yeniden.

  6. İçinde Dizinler yeniden iletişim kutusunda, doğru dizin içinde olduğundan emin olun yeniden organize için dizinler ızgara ve tıklayın Tamam.

  7. Seçin sütun veri Compact büyük nesne büyük nesne (lob) veri içeren tüm sayfaları da kurtulmak belirtmek için onay kutusu.

  8. Tıklayın Tamam.

Bir tabloda tüm dizinler yeniden düzenlemek için

  1. Nesne Explorer'da dizinler yeniden düzenlemek istediğiniz tabloyu içeren veritabanı genişletin.

  2. Genişletme tablo ağıl.

  3. Dizinler yeniden düzenlemek istediğiniz tablo genişletin.

  4. Sağ Dizinler ağıl ve seçme Yeniden düzenleme tüm.

  5. İçinde Dizinler yeniden iletişim kutusunda, doğru dizinler içinde olduğundan emin olun dizinler reorganized. Bir dizinden kaldırmak için yeniden organize için dizinler kılavuz dizini seçin ve sonra Delete tuşuna basın.

  6. Seçin sütun veri Compact büyük nesne büyük nesne (lob) veri içeren tüm sayfaları da kurtulmak belirtmek için onay kutusu.

  7. Tıklayın Tamam.

Bir dizini yeniden oluşturmak için

  1. Nesne Explorer'da, bir dizin yeniden düzenlemek istediğiniz tabloyu içeren veritabanı genişletin.

  2. Genişletme tablo ağıl.

  3. Bir dizin yeniden düzenlemek istediğiniz tablo genişletin.

  4. Genişletme Dizinler ağıl.

  5. Yeniden düzenlemek ve seçmek için istediğiniz dizini sağ yeniden.

  6. İçinde Dizinler yeniden iletişim kutusunda, doğru dizin içinde olduğundan emin olun oluşturulması için dizinler ızgara ve tıklayın Tamam.

  7. Seçin sütun veri Compact büyük nesne büyük nesne (lob) veri içeren tüm sayfaları da kurtulmak belirtmek için onay kutusu.

  8. Tıklayın Tamam.

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

Transact-SQL'i Kullanma

Birleştirilmiş bir dizin yeniden düzenlemek için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute.

    USE AdventureWorks2012; 
    GO
    -- Reorganize the IX_Employee_OrganizationalLevel_OrganizationalNode index on the HumanResources.Employee table. 
    
    ALTER INDEX IX_Employee_OrganizationalLevel_OrganizationalNode ON HumanResources.Employee
    REORGANIZE ; 
    GO
    

Bir tabloda tüm dizinler yeniden düzenlemek için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute.

    USE AdventureWorks2012; 
    GO
    -- Reorganize all indexes on the HumanResources.Employee table.
    ALTER INDEX ALL ON HumanResources.Employee
    REORGANIZE ; 
    GO
    

Birleştirilmiş bir dizini yeniden oluşturmak için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Kopyalama ve aşağıdaki örnek sorgu penceresine yapıştırın ve tıkırtı Execute. Örnek üzerinde tek bir dizin yeniden oluşturur Employeetablosu.

    USE AdventureWorks2012;
    GO
    ALTER INDEX PK_Employee_BusinessEntityID ON HumanResources.Employee
    REBUILD;
    GO
    

Bir tablodaki tüm dizinleri yeniden oluşturmak için

  1. İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.

  2. Standart çubuğunda Yeni sorgu.

  3. Aşağıdaki örnek örneği belirttiği anahtar sözcük sorgu kopyalayıp ALL. Bu, tablo ile ilişkili tüm dizinleri yeniden oluşturur. Üç seçenek belirtilir.

    USE AdventureWorks2012;
    GO
    ALTER INDEX ALL ON Production.Product
    REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
                  STATISTICS_NORECOMPUTE = ON);
    GO
    

Daha fazla bilgi için, bkz. ALTER INDEX (Transact-SQL).

Başa Dön bağlantısıyla kullanılan ok simgesi[Top]

Ayrıca bkz.

Diğer Kaynaklar

Microsoft SQL Server 2000 dizin birleştirme için en iyi yöntemler