Disk alanını boşaltmak için MS SQL Server edinin


9

Kötü yönetilen bir veritabanı tablosu muazzam bir hale geldi. 48 + yetim kayıtları. Temizlemeye ve tehlikeli olarak dolu sabit diskimi normal duruma getirmeye çalışıyorum. Bu tablodan yaklaşık 400 milyon kayıt sileceğim. Ben yazarken bu çalışıyor. Sabit disk alanımda herhangi bir düşüş görmediğimi fark ettim ama sistem tablosu sorgularında bellek düşüşünü görüyorum, tablo boyutunu almaya çalışıyorum. Veritabanı "Basit Kurtarma Modeli" kullanıyor.

Veritabanını küçültmeniz gerektiğini söyleyen yanıtlarla buna benzer birçok soru var. Fakat parçalanmış veriler vb. Nedeniyle bunun ne kadar kötü / korkutucu olduğunu açıklarlar.

  1. Veritabanı bu boyutta olmamalı. Onu küçültmek hala kötü mü?
  2. Bu bir üretim veritabanıdır. Küçülürsem arızaya neden olur mu yoksa veritabanını kilitler mi?
  3. SQL Server Management Studio'da küçültme, veritabanı veya dosyalar için iki seçeneğiniz vardır. Durumum göz önüne alındığında en iyi seçenek ne olurdu?
  4. DB boş alan yüzdesi üzerinde bir kural var mı?

Shrink etiket açıklamasını okumak bile bunu yapmak istemiyor. Başka bir yol var mı?

Yanıtlar:


14

Bu tablodan yaklaşık 400 milyon kayıt sileceğim.

Umarım, işlem günlüğünü şişirmekten kaçınmak için bunu parçalar halinde yaparsınız .

sabit disk alanımda herhangi bir düşüş görmediğime dikkat et

Alan boşaltmak için açıkça veritabanı dosyasını küçültmek zorunda gibi alışkanlık. Sadece kayıtları silerken, SQL sunucu alanı işletim sistemine geri bırakmaz .

  1. Veritabanı bu boyutta olmamalı. Onu küçültmek hala kötü mü?

Veritabanlarının düzgün bir şekilde hesaplanması gerektiği için genellikle kötü bir uygulamadır. Veritabanınızın yine bu boyutta OLMADIĞINDAN % 100 eminseniz, veritabanını daraltmanız sizin için uygun olacaktır (senaryoda) .

  1. Bu bir üretim veri tabanıdır. Küçülürsem arızaya neden olur mu yoksa veritabanını kilitler mi?

Bir veritabanını küçültmek çok yoğun bir IO yoğunluğudur. DBCC SHRINKFILEBakım penceresi sırasında veya minimum aktivite olduğunda küçültmek tavsiye edilir .

  1. Yönetim stüdyosunda Veritabanı veya Dosyalar olmak üzere iki seçeneğiniz vardır. Durumum göz önüne alındığında en iyi seçenek ne olurdu?

Küçültmek için TSQL kullanmalısınız. (sorduğunuzdan beri FILE , veritabanı yerine gitmenin yoludur). Parçalarda büzülme veritabanı kullanabilirsiniz - parçalarda büzülme yapmak için tsql betiği.

Küçüldüğünüzde, indekslerinizi parçaladığınızı unutmayın.

  1. DB boş alan yüzdesi üzerinde bir kural var mı?

Veritabanları için Disk Alanı Gereksinimlerini Tahmin Etme makalesine bakabilirsiniz . Bir düzeltme kuralı yoktur, veritabanınızın nasıl büyümesi beklendiğini dikkate almanız gerekir. Ayrıca , veritabanlarınızın otomatik büyümesini de dikkate almanız gerekir .

Referanslar: İşlem Günlüğü Neden Büyüyor veya Boş Kalıyor?


5

SQL Server sık ​​sık "emmek" büzülen endişe için iyi bir neden var. SQL 2005'teki Depolama Motorunun başkanı Paul Randal, ShrinkDB'nin çok kötü yazıldığını belirtti. Verileri en sonunda alarak boş alan bulacaktır ve en başına koyup DB dosyalarının 'ucunda' boş alan olana kadar bunu yapmaya devam edecektir. Bu noktada, alanı SQL Server'dan serbest bırakıp işletim sistemine geri verebilir. Veritabanı dosyalarınızı etkili bir şekilde tersine çevirirsiniz, böylece genellikle büyük parçalanma görürsünüz. Bu blog yayınındaki veya bu MCM Internals Video'daki görüşlerini okuyabilirsiniz

Her şeyde olduğu gibi, öncelikle bunları ortamınızda test etmeniz gerekir. Bunu yapmanın daha iyi bir yolu, verileri farklı bir dosya grubuna taşımaktır. Kümelenmiş dizin ile çevrimiçi dizin yeniden oluşturma ve sonra yeni dosya grubunda yeniden dizin yapabilirsiniz. Sonra eskisini bırakıp alanı serbest bırakabilir ve neredeyse hiç parçalanamazsınız. Bunun üzerinde çalışırken% 120 daha fazla yer kaplayacağını unutmayın. Buradaki sorun, sahip olmayabileceğiniz gibi ek boş alana bile ihtiyacınız olmasıdır. Bu bir kurumsal özelliktir.

Boş alan bu kadar yüksek bir seviyedeyse, uzun süren işlemleri önlemek için mermiyi ısırmanız ve DB'yi yavaşça küçültmeniz gerekebilir. Verilerinizin büyük ölçüde parçalanacağını ve her şeyi yeniden dizine eklemek istediğinizi unutmayın. Her şeyi yeniden endeksledikten sonra, kullanılmış alanınızı biraz havaya uçuracağınızı ve ek boş alana sahip olacağınızı unutmayın. Brent'in tavsiyelerine buradan bakın .

Boş alanın sizin için iyi olduğu ölçüde, parçalanma ve dosya büyüme faaliyetlerini ne kadar karşılayabileceğiniz meselesidir. IFI etkinken, dosya büyümesi neredeyse anında olur, ancak yine de parçalanırsınız. İyi bir kural, ihtiyacınız olduğunu düşündüğünüz kadar yer önceden konumlandırmak veya gerekiyorsa büyümeyi izlemek ve parçalar halinde düzenli olarak ayarlamaktır. Bu fiziksel parçalanmayı azaltır.

Ayrıca günlük dosyası büyümesi çok daha önemlidir. Ek günlük dosyaları VLF parçalanmasına neden olabilir. Bu, geri yüklemelerinizi çok daha yavaş hale getirir ve kontrol noktasını / kesikleri etkileyebilir. Parçalanmış bir günlükle aldığınız bazı performans riskleri. Bir Do DBCC LOGINFO();her veritabanı üzerinde. Kim Tripp başına sayıyı 50ish civarında tutmaya çalışın, ancak yüzlerce görürseniz, parçalama sorunlarınız vardır, bu da günlük dosyalarınızın işlemleri desteklemek için büyümesi gerektiği anlamına gelir. Paul Randal'a göre günlük dosyanızın ne olması gerektiğini görmenin iyi bir yolu, bir hafta boyunca büyümesine ve yeniden dizine eklemesine izin vermektir. Bu iyi bir nokta olabilir, belki de her ihtimale karşı biraz daha fazla boş alan atabilirsiniz. Günlüklerinizin DBCC LOGINFO () ile parçalanmadığından emin olun; yine ve eğer öyleyse, çok fazla büyüdükleri anlamına gelir. Kullanarak günlük dosyasını küçültün ve yeniden genişletinbu yöntem .


2

Sunucunuzun depolama ihtiyaçlarınızı değerlendirmeniz ve donanım / barındırma hizmetlerini uygun şekilde planlamanız için gereken süre içinde çökmemesini sağlayacak kadar küçültmeniz yerinde olur (bkz. Soru 4). Hayır kilitlemeyecek. Kısıtlamalara bakın . Veritabanını küçültün çünkü işleri basitleştirir.

Çalışmayı yürütmek ve planı yazmak için uzmanlıkla sözleşme yapılmasını öneriyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.