Bir yeniden düzenleme ve küçültme asla gerçekten tavsiye edilmez.
Veritabanının çevrimdışı olarak kullandığı uygulamaları alabilirseniz, işlemi küçültmeden önce tüm dizinleri ve birincil / yabancı anahtar kısıtlamalarını kaldırarak süreci hızlandırabilir ve dizin parçalanmasını azaltabilirsiniz (bu, yalnızca veri sayfaları, şu anda olmayan dizin sayfalarında değil, süreci hızlandırarak karıştırılır, sonra tüm dizinleri ve anahtarları yeniden oluşturur.
Dizinlerin büzülme işleminden sonra yeniden oluşturulması, bunların önemli ölçüde parçalanmaması gerektiği ve büzülme sırasında bunların giderilmesi, yeniden oluşturulması anlamına geldiğinde, sayfa tahsisinde, daha sonra parçalanmaya davet edebilecek dosyalar içinde çok sayıda küçük "delik" bırakmayacaktır.
Uygulamaları çevrimdışı olarak kullanabilmeniz için başka bir seçenek de, tüm verileri aynı yapıdaki yeni bir veritabanına geçirmek. Derleme işleminiz sağlamsa, o zamanki boş DB'yi hızlı bir şekilde oluşturabilmelisiniz, mevcut DB'den bir tane oluşturmazsanız (mevcut olanın bir yedeğini geri yükleyin, tablolardaki tüm içerikleri kesin / silin) ve tam bir küçültme yapın).
Hedefe tüm endeksleri bırakıp daha sonra yeniden oluşturmak isteyebilirsiniz, çünkü bu, endekslenmiş verilerin çoğunu değiştirirken daha verimli olabilir (bu durumda% 100). Kopyalama işlemini hızlandırmak için, hedef veri tabanının veri dosyalarının farklı fiziksel sürücülerdeki kaynak dosyalarına (SSD kullanmıyorsanız, bu durumda kafa hareketlerini azaltmakla ilgilenmenize gerek kalmaz), bunları taşıyın. İşiniz bittiğinde kaynak yere.
Ayrıca, hedefi yeni olarak oluşturmak (kaynağın bir kopyasını boşaltmak yerine), tüm geçerli verileri artı birkaç aylık büyümeye değecek bir başlangıç boyutuyla oluşturun - bu da veri kopyasını biraz daha hızlı hale getirecek süreç boyunca şimdi ve tekrar yeni bir alan tahsis etmeyecektir.
Bu, küçültmeyi kullanmaktan daha iyi olabilir çünkü verileri yeni bir veritabanına geçirmek, küçültme işleminin amaçlanan eylemini çoğaltır, ancak potansiyel olarak çok daha az parçalanmayla (bu yeniden düzenleme ve küçültmenin istenmeyen sonucu olur). Bir daralma, dosyanın sonuna yakın bir şekilde blokları alır ve ilgili verileri bir arada tutmak için hiçbir çaba sarf etmeden başlangıçta daha yakın olan ilk alana yerleştirir.
Sonrasında daha az bölüm kullanılmış sayfalar olması muhtemel olduğundan, sonucun alan açısından daha verimli olacağından şüpheleniyorum. Bir daralma, yalnızca kısmen kullanılmış sayfaları dolaştıracak, verilerin taşınması, özellikle bir tablonun kümelenmiş anahtarı / dizini (bir tablonun bulunduğu yerde) hedefine eklerseniz ve başka dizinler oluşturuyorsanız, tam sayfalara neden olma olasılığı daha yüksektir. Verilerin tümü taşındıktan sonra.
Elbette uygulamaları çevrimdışı duruma getiremiyorsanız, sadece bir psikiyatrist yapmak tek seçeneğinizdir, bu yüzden gerçekten alanın yeniden kazanılması gerekiyorsa bununla devam edin. Verilerinize, erişim düzenlerine, genel çalışma kümesi boyutuna, sunucunun RAM sayısına ve benzerlerine bağlı olarak, ekstra dahili parçalanma, sonuçta bu kadar önemli olmayabilir.
Kopyalama işlemi için, SSIS veya baz T-SQL de aynı şekilde çalışır (SSIS seçeneği daha az verimli olabilir ancak daha sonra bakımı potansiyel olarak daha kolay olabilir). Sonunda endekslerle birlikte FK ilişkileri oluşturursanız, her durumda basit bir "her tablo için kopyala" yapabilirsiniz. Elbette, bir kereye mahsus olmak üzere, küçültme + yeniden düzenleme muhtemelen de iyidir ama ben insanları düzenli olarak küçümsemeyi düşünmeden korkutmayı seviyorum! (İnsanları günlük olarak programladıklarını biliyorum).