Express Edition boyut sınırına ulaşıp ulaşmadığımı nasıl kontrol edebilirim?


10

Kafam karıştı. AFAIK SQL Server 2005 Express'in 4GB veritabanı veri boyutu sınırı vardır . Ancak ben şu sonuçları var sp_spaceused:

veritabanının gerçek boyutu nedir

  1. DB'mizin boyut sınırına ulaşıp ulaşmadığını nasıl kontrol edebilirim?
  2. Sınıralana space leftkadar ayrılmamış alan var mı ?
  3. Ne kadar alanım kaldı?
  4. index_sizeSınırda sayılır mı ?

Msdb.dbo.backupset dosyasının backup_size sütununu kontrol edebilirsiniz.

Yanıtlar:


6

İşte utanmadan buradan söktüğüm iyi bir senaryo :

use [Insert DB Name]

select
a.FILEID,
[FILE_SIZE_MB] = 
convert(decimal(12,2),round(a.size/128.000,2)),
[SPACE_USED_MB] =
convert(decimal(12,2),round(fileproperty(a.name, 'SpaceUsed')/128.000,2)),
[FREE_SPACE_MB] =
convert(decimal(12,2),round((a.size-fileproperty(a.name, 'SpaceUsed'))/128.000,2)) ,
NAME = left(a.NAME,15),
FILENAME = left(a.FILENAME,30)
from
dbo.sysfiles a

Bu iyi çünkü her DB dosyasındaki boş alanı verecektir (birden fazla dosyaya sahip olabilirsiniz ve belki de birisi her birine bazı nesneler koymak için ayarlanmış olabilir) ve ücretsiz boyut.

Örneğin, 3 GB boş alana sahip 4 GB veri dosyanız var. Belki çok fazla veriye sahip olmayan 1 MDF'ye, ancak çok fazla veriye sahip bir NDF'ye sahipsiniz. Bu sorgu size her dosyadaki boş boyutu ve bu dosyanın hangi DB'ye tahsis edildiğini söyleyecektir. Toplam boyutu elde etmek için her DB için tüm 'SPACE_USED_MB' yi eklemeyi unutmayın.

İyi şanslar!

Düzenleme: Bu sorgu için burada gönderme ile kurtulmak düşündüm desteklenmeyen ve buggy bir komut kaldırıldı. :(



PS, eski, geriye dönük uyumluluk görünümlerini kullanacaksanız, bunu kullanarak biraz basitleştirebilirsiniz sysaltfiles(bu, her veritabanına girme ihtiyacını ortadan kaldırır).
Aaron Bertrand

1
Sysaltfiles için teşekkürler Aaron, ben henüz buna bakmadım! sp_msforeachdb çok acı verici sorunları var, ama bir adam sadece ne kadar boş alan olduğunu görmek için bir sorgu çalıştırmak istediği bir SQL Express yükleme için düşündüm.
Ali Razeghi

Veritabanlarını atlaması ve hata oluşturmadığı durumlar hariç ...
Aaron Bertrand

Evet ama bu durumda, gerçekten son kullanıcının sadece bir db boyut sayısı istediği bir sorun olacağını düşünüyor musunuz? Son kullanıcı kesinlikle aradıkları DB atladı olmadığını görecek durumlarda bile göndermek gerekir gerektiğini kötü davranış pekiştirmek değil sanırım. Bu noktada o parçayı kaldıracağım, haklısın, başka bir yere sıvalı komuta ihtiyacımız yok.
Ali Razeghi

5

Veritabanının boyutu dosyanın boyutudur. Veri dosyasının gerçek boyutuna bakın (işlem günlüğü sayılmaz). Evet dizin sayısı. Alanınız biterse, boyut sınırını 10 Gig'e çıkardığı için SQL 2012 Express'e yükseltmeyi düşünün.


6
SQL Server 2008 R2 Express'in de 10 GB'lık bir sınırı vardır (yalnızca eksiksizlik için)
marc_s

1

Sp_spaceused ilk sonuç kümenizde veri dosyasını / dizinleri ve işlem günlüğünü içeren yaklaşık 25 GB veritabanı_boyutunu gösterdiğinde . Yalnızca gerçek veriler ve dizinler SQL Server Express sınırlarında sayılır, bu nedenle yaklaşık 3,3 GB veriye sahipsiniz (ikinci sonuç kümenizdeki gibi) ve kalan 22 GB işlem günlüğü olacaktır. "Sp_helpdb" komutunu çalıştırırsanız, veri kullanımı ve işlem günlüğü kullanımını iki ayrı satıra rapor ettiği için bu gerçek resmi gösterir.

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.