Jak sprawdzić, czy osiągam limit rozmiaru Express Edition?

10

Jestem zdezorientowany. AFAIK SQL Server 2005 Express ma limit wielkości bazy danych 4 GB . Mam jednak następujące wyniki z sp_spaceused:

jaki jest rzeczywisty rozmiar bazy danych

  1. Jak mogę sprawdzić, czy mój DB osiąga limit rozmiaru?
  2. Czy nieprzydzielone miejsce jest space leftważne, dopóki nie osiągnę limitu?
  3. Ile mam miejsca?
  4. Czy index_sizeliczy się limit?
g00fy
źródło
Możesz sprawdzić kolumnę backup_size w pliku msdb.dbo.backupset.

Odpowiedzi:

6

Oto dobry scenariusz I bezczelnie oszukany od tutaj :

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

Jest to dobre, ponieważ da ci wolne miejsce w każdym pliku DB (możesz mieć wiele plików i być może ktoś skonfigurował go, aby umieścić w nich jakieś obiekty), a także wolny rozmiar.

Na przykład masz plik danych 4 GB, który ma 3 GB wolnego miejsca. Być może masz 1 MDF bez dużej ilości danych, ale NDF z dużą ilością danych. Ta kwerenda pokaże ci wolny rozmiar w każdym pliku i do jakiej DB jest przydzielony ten plik. Pamiętaj, aby dodać wszystkie „SPACE_USED_MB” dla każdego DB, aby uzyskać całkowity rozmiar.

Powodzenia!

Edycja: Usunięto nieobsługiwane i błędne polecenie, o którym myślałem, że mogę uciec od opublikowania tutaj tego zapytania. :(

Ali Razeghi
źródło
PS, jeśli zamierzasz korzystać ze starych widoków kompatybilności wstecznej, możesz to nieco uprościć, używając sysaltfiles(to całkowicie eliminuje potrzebę wchodzenia do każdej bazy danych).
Aaron Bertrand
1
Dzięki Aaron za pliki sysalt, jeszcze tego nie zaglądałem! sp_msforeachdb ma wiele bolesnych problemów, ale pomyślałem o instalacji SQL Express, w której facet po prostu chce uruchomić zapytanie, aby sprawdzić, ile wolnego miejsca ma w porządku.
Ali Razeghi
Z wyjątkiem sytuacji, gdy pomija bazy danych i nie powoduje błędu ...
Aaron Bertrand
Tak, ale w tym przypadku, czy naprawdę uważasz, że będzie to problem, w którym użytkownik końcowy chce tylko liczyć rozmiar bazy danych? Myślę, że nie powinienem tego publikować nawet w przypadkach, gdy użytkownik końcowy absolutnie zobaczy, czy pominął DB, którego szuka, aby nie wzmocnić złego zachowania. Po prostu usunę tę część w tym momencie, masz rację, nie potrzebujemy tego polecenia nigdzie indziej.
Ali Razeghi
5

Rozmiar bazy danych to rozmiar pliku. Sprawdź rzeczywisty rozmiar pliku danych (dziennik transakcji się nie liczy). Tak, liczą się indeksy. Jeśli brakuje Ci miejsca, rozważ aktualizację do SQL 2012 Express, ponieważ zwiększa to limit rozmiaru do 10 Gigs.

mrdenny
źródło
6
SQL Server 2008 R2 Express ma również limit 10 GB (tylko dla kompletności)
marc_s
1

Gdy sp_spaceused pokazuje rozmiar bazy danych około 25 GB w pierwszym zestawie wyników, który obejmuje plik danych / indeksy i dziennik transakcji. Tylko rzeczywiste dane i indeksy liczą się do limitów SQL Server Express, więc masz około 3,3 GB danych (jak w drugim zestawie wyników), a pozostałe 22 GB będzie dziennikiem transakcji. Jeśli uruchomisz „sp_helpdb”, pokazuje to prawdziwy obraz, ponieważ raportuje wykorzystanie danych i dziennik transakcji w dwóch osobnych wierszach.

Ubercoder
źródło