2009-05-14 19 views
6

Voglio essere in grado di scoprire quanto spazio è rimasto nei miei file di database in modo che possa sapere quando aumentare lo spazio in modo che non lo faccia quando l'applicazione è in esecuzione.Il modo migliore per trovare spazio libero nei database SQL Server?

Preferirei essere in grado di eseguire lo script in modo da poterlo eseguire su più database in maniera regolare.

Ho database SQL Server 2000 e SQL Server 2005 ma preferirei poter eseguire lo stesso script su entrambi.

Posso usare Management Studio per farlo manualmente sui database 2005, ma non sui database 2000.

+0

Qual è il problema con il server che lo fa quando è "hard out"? – Stu

+0

Il server sql si interrompe fondamentalmente mentre i file si estendono. Questo perché non c'è nessun posto dove scrivere alcuna informazione. – GordyII

+0

Si trattava di SQL 2000, forse la versione più recente è più efficace. – GordyII

risposta

-1

Per me, sql server ha sempre assegnato automaticamente più spazio finché l'hard disk non era pieno, quindi basta interrogare lo spazio libero sull'hard disk.

Quali impostazioni utilizzate per aumentare lo "spazio" di un database?

+3

SQL Server conserva uno spazio inutilizzato all'interno dei propri file di dati. Quando si esaurisce lo spazio disponibile, SQL Server aumenterà il file per adattarlo. Le prestazioni del database potrebbero essere influenzate durante tale crescita. In genere, ho impostato le dimensioni della crescita automatica su un valore ragionevole, dati i miei dati, e lo lascio andare. –

+0

Una query sullo spazio libero sul file system fornisce molte ipotesi, in particolare quando i dati sono facilmente disponibili dal server SQL. Se il dba è a conoscenza delle tendenze di capacità, allora un copione di crescita può fare il lavoro senza influenzare (la funzionalità integrata quasi certamente inciderà su perf). – JGurtz

14

Prova sp_spaceused:

Visualizza il numero di righe, disco spazio riservato, e di spazio su disco utilizzato da un tavolo, vista indicizzata, o Service coda Broker nel database corrente, o visualizza la spazio su disco riservato e utilizzato dall'intero database.

Credo che questo era presente in SQL Server 2000, ma non posso provarlo. Funzionerà nel 2005 e nel 2008.

E si può dare un'occhiata con sp_helptext, se si vuole legarlo in qualche logica lato server.

EDIT: espansione sul mio commento qui sotto, e con grazie al contributo originale a http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359, ecco un modo per abbattere l'utilizzo da parte del file:

select 
     name 
    , filename 
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
    , convert(decimal(12,2),round(fileproperty(a.name,'SpaceUsed')/128.000,2)) as SpaceUsedMB 
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'SpaceUsed'))/128.000,2)) as FreeSpaceMB 
from dbo.sysfiles a 
+0

C'è qualcosa di simile per ottenere spazio libero nei file di database? – GordyII

+3

Il dato che si desidera è dbo.sysfiles. Prova la dichiarazione alla fine di questo thread: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=82359 –

0

E 'possibile eseguire script SQL per controllare gratuitamente spazio manualmente. Ma è meglio creare lavori e assegnare avvisi per informare automaticamente l'amministratore, quando non è rimasto abbastanza spazio.

Il miglior articolo che ho trovato - Managing Database Data Usage With Custom Space Alerts (è richiesto il login SQLServerCentral) può essere seguito anche da personale di supporto senza molta esperienza DBA.

È inoltre possibile utilizzare l'articolo simile Monitor database file sizes with SQL Server Jobs.

Anche per controllo manuale preferisco sp_SOS (può essere scaricato da http://searchsqlserver.techtarget.com/tip/Find-size-of-SQL-Server-tables-and-other-objects-with-stored-procedure)

EXEC dbo.sp_SOS @OrderBy='T' 
0

Eseguire il comando qui sotto per sapere quanto spazio libero attualmente disponibile in SQL Server 2000:

DECLARE @command VARCHAR(5000) 
DECLARE @DBInfo TABLE 
(ServerName VARCHAR(100), 
DatabaseName VARCHAR(100), 
PhysicalFileName NVARCHAR(520), 
FileSizeMB DECIMAL(10,2), 
SpaceUsedMB DECIMAL(10,2), 
FreeSpaceMB DECIMAL(10,2), 
FreeSpacePct varchar(8) 
) 

SELECT @command = 'Use [' + '?' + '] SELECT 
@@servername as ServerName, 
' + '''' + '?' + '''' + ' AS DatabaseName , filename 
    , convert(decimal(12,2),round(a.size/128.000,2)) as FileSizeMB 
    , convert(decimal(12,2),round(fileproperty(a.name,'+''''+'SpaceUsed'+''''+')/128.000,2)) as SpaceUsedMB 
    , convert(decimal(12,2),round((a.size-fileproperty(a.name,'+''''+'SpaceUsed'+''''+'))/128.000,2)) as FreeSpaceMB, 
    CAST(100 * (CAST (((a.size/128.0 -CAST(FILEPROPERTY(a.name,' + '''' + 'SpaceUsed' + '''' + ') AS int)/128.0)/(a.size/128.0)) AS decimal(4,2))) AS varchar(8)) + ' + '''' + '%' + '''' + ' AS FreeSpacePct 
from dbo.sysfiles a' 

INSERT INTO @DBInfo 
EXEC sp_MSForEachDB @command 

SELECT * from @DBInfo 
Problemi correlati