Verificando espaço em disco e o espaço ocupado por tabelas!

By | 12/05/2010

Olá pessoal!

Inspirado no post do Diego Nogare, o qual comentei (com os scripts deste post), resolvi postar aqui também os scripts sobre verificação de espaço usado em disco e por tabelas!

Verificar o tamanho ocupado por tabelas no banco (a.k.a achar maiores tabelas):

Ordenado por quantidade de linhas:

SELECT object_name(id), rowcnt, dpages * 8 AS [tamanho KB] FROM sysindexes
WHERE indid IN (1,0) AND objectproperty(id,’isusertable’) = 1
ORDER BY rowcnt DESC

Ordenado por tamanho físico:

SELECT object_name(id), rowcnt, dpages * 8 AS [tamanho KB] FROM sysindexes
WHERE indid IN (1,0) AND objectproperty(id,’isusertable’) = 1
ORDER BY [tamanho KB] DESC

E para mostrar o espaço em disco disponível (valor absoluto e percentual) e o espaço total dos discos, é possível utilizar (a fonte deste script é o SQLDBATips):

DECLARE @hr int
DECLARE @fso int
DECLARE @drive char(1)
DECLARE @odrive int
DECLARE @TotalSize varchar(20)
DECLARE @MB bigint ; SET @MB = 1048576

CREATE TABLE #drives (drive char(1) PRIMARY KEY,
                      FreeSpace int NULL,
                      TotalSize int NULL)

INSERT #drives(drive,FreeSpace)
EXEC master.dbo.xp_fixeddrives

EXEC @hr=sp_OACreate ‘Scripting.FileSystemObject’,@fso OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso

DECLARE dcur CURSOR LOCAL FAST_FORWARD
FOR SELECT drive from #drives
ORDER by drive

OPEN dcur

FETCH NEXT FROM dcur INTO @drive

WHILE @@FETCH_STATUS=0
BEGIN

        EXEC @hr = sp_OAMethod @fso,’GetDrive’, @odrive OUT, @drive
        IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso
        EXEC @hr = sp_OAGetProperty @odrive,’TotalSize’, @TotalSize OUT
        IF @hr <> 0 EXEC sp_OAGetErrorInfo @odrive
        UPDATE #drives
        SET TotalSize=@TotalSize/@MB
        WHERE drive=@drive
        FETCH NEXT FROM dcur INTO @drive

END

CLOSE dcur
DEALLOCATE dcur

EXEC @hr=sp_OADestroy @fso
IF @hr <> 0 EXEC sp_OAGetErrorInfo @fso

SELECT drive,
       FreeSpace as ‘Livre(MB)’,
       TotalSize as ‘Total(MB)’,
       CAST((FreeSpace/(TotalSize*1.0))*100.0 as int) as ‘Livre(%)’
FROM #drives
ORDER BY drive

DROP TABLE #drives

RETURN
GO

A saída do script deverá ser semelhante a:

drive Livre(MB)   Total(MB)   Livre(%)
—– ———– ———– ———–
C     9541        49999       19
D     46002       317966      14
F     37549       99998       37
K     68581       476269      14

É isso pessoal, fazia tempo que não postava algo masi focado a área de DBA (a qual gosto muito também), espero que seja útil!

Abraços,
Thiago Zavaschi

2 thoughts on “Verificando espaço em disco e o espaço ocupado por tabelas!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *