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.
[Top]
SQL Server Management Studio Kullanarak
Dizin parçalanma denetlemek için
Nesne Explorer'da dizin'ın parçalanma denetlemek istediğiniz tabloyu içeren veritabanı genişletin.
Genişletme tablo ağıl.
Dizin'ın parçalanma denetlemek istediğiniz tablo genişletin.
Genişletme Dizinler ağıl.
Parçalanma ve seçmek istediğiniz dizini sağ Özellikler.
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ı.
[Top]
Transact-SQL'i Kullanma
Dizin parçalanma denetlemek için
İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.
Standart çubuğunda Yeni sorgu.
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).
[Top]
SQL Server Management Studio Kullanarak
Yeniden düzenlemek veya bir dizin yeniden oluşturma
Nesne Explorer'da, bir dizin yeniden düzenlemek istediğiniz tabloyu içeren veritabanı genişletin.
Genişletme tablo ağıl.
Bir dizin yeniden düzenlemek istediğiniz tablo genişletin.
Genişletme Dizinler ağıl.
Yeniden düzenlemek ve seçmek için istediğiniz dizini sağ yeniden.
İç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.
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.
Tıklayın Tamam.
Bir tabloda tüm dizinler yeniden düzenlemek için
Nesne Explorer'da dizinler yeniden düzenlemek istediğiniz tabloyu içeren veritabanı genişletin.
Genişletme tablo ağıl.
Dizinler yeniden düzenlemek istediğiniz tablo genişletin.
Sağ Dizinler ağıl ve seçme Yeniden düzenleme tüm.
İç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.
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.
Tıklayın Tamam.
Bir dizini yeniden oluşturmak için
Nesne Explorer'da, bir dizin yeniden düzenlemek istediğiniz tabloyu içeren veritabanı genişletin.
Genişletme tablo ağıl.
Bir dizin yeniden düzenlemek istediğiniz tablo genişletin.
Genişletme Dizinler ağıl.
Yeniden düzenlemek ve seçmek için istediğiniz dizini sağ yeniden.
İç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.
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.
Tıklayın Tamam.
[Top]
Transact-SQL'i Kullanma
Birleştirilmiş bir dizin yeniden düzenlemek için
İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.
Standart çubuğunda Yeni sorgu.
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
İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.
Standart çubuğunda Yeni sorgu.
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
İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.
Standart çubuğunda Yeni sorgu.
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
İçinde Object Explorer, örneğine bağlanmak Veritabanı Altyapısı.
Standart çubuğunda Yeni sorgu.
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).
[Top]
Ayrıca bkz.
Diğer Kaynaklar
Microsoft SQL Server 2000 dizin birleştirme için en iyi yöntemler