Come verificare se sto raggiungendo il limite di dimensioni di Express Edition?


10

Sono confuso. AFAIK SQL Server 2005 Express ha un limite di dimensioni dei dati del database di 4 GB . Tuttavia ho i seguenti risultati da :sp_spaceused

qual è la dimensione effettiva del database

  1. Come posso verificare se il mio DB sta raggiungendo il limite di dimensioni?
  2. Lo spazio non allocato è space leftfino a quando non raggiungo il limite?
  3. Quanto spazio mi rimane?
  4. Non index_sizeconta nel limite?

È possibile controllare la colonna backup_size di msdb.dbo.backupset.

Risposte:


6

Ecco una buona sceneggiatura che ho strappato spudoratamente da qui :

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

Questo è buono perché ti darà lo spazio libero in ogni file DB (potresti avere più file e forse qualcuno lo ha impostato per mettere alcuni oggetti in ciascuno) così come le dimensioni libere.

Ad esempio, hai un file di dati da 4 GB con 3 GB di spazio libero. Forse hai 1 MDF senza molti dati ma un NDF con molti dati. Questa query ti dirà la dimensione libera in ogni file e a quale DB è assegnato quel file. Ricorda di aggiungere tutti i "SPACE_USED_MB" per ciascun DB per ottenere la dimensione totale.

In bocca al lupo!

Modifica: rimosso un comando non supportato e errato che pensavo di poter fare a meno di pubblicare qui per questa query. :(



PS se hai intenzione di utilizzare vecchie visualizzazioni di compatibilità con le versioni precedenti, puoi semplificare un po 'usando sysaltfiles(questo annulla la necessità di andare in ogni database).
Aaron Bertrand

1
Grazie Aaron per i sysaltfile, non ho ancora esaminato quello! sp_msforeachdb ha molti problemi dolorosi, ma ho pensato a un'installazione di SQL Express in cui il ragazzo voleva solo eseguire una query per vedere quanto spazio libero ha a disposizione va bene.
Ali Razeghi,

Tranne quando salta i database e non genera un errore ...
Aaron Bertrand

Sì, ma in questo caso, pensi davvero che sarà un problema in cui l'utente finale desidera solo un conteggio delle dimensioni del database? Immagino che non dovrei pubblicarlo nemmeno nei casi in cui l'utente finale vedrà assolutamente se ha saltato il DB che sta cercando in modo da non rafforzare il comportamento scorretto. Rimuoverò quella parte a questo punto, hai ragione, non abbiamo bisogno di quel comando intonacato da nessun'altra parte.
Ali Razeghi,

5

La dimensione del database è la dimensione del file. Guarda le dimensioni effettive del file di dati (il registro delle transazioni non conta). Sì, gli indici contano. Se si sta esaurendo lo spazio, prendere in considerazione un aggiornamento a SQL 2012 Express in quanto aumenta il limite di dimensioni a 10 concerti.


6
SQL Server 2008 R2 Express ha anche un limite di 10 GB (solo per completezza)
marc_s

1

Quando sp_spaceused mostra la dimensione database_ di circa 25 GB nel primo set di risultati, inclusi il file di dati / gli indici e il registro delle transazioni. Solo i dati e gli indici effettivi contano ai fini dei limiti di SQL Server Express, pertanto sono disponibili circa 3,3 GB di dati (come nel secondo set di risultati) e i restanti 22 GB saranno il registro delle transazioni. Se si esegue "sp_helpdb", questo mostra l'immagine reale, in quanto riporta l'utilizzo dei dati e l'utilizzo del registro delle transazioni su due righe separate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.