Se você estiver usando uma ferramenta GUI, como o SSMS, para gerenciar seus bancos de dados, poderá verificar facilmente o tamanho do banco de dados clicando na GUI (clique com o botão direito do mouse no banco de dados, aponte para Relatórios , em seguida, Relatórios padrão e clique em Uso do disco ).
No entanto, se você preferir usar o T-SQL para gerenciar seus bancos de dados, precisará executar uma consulta que retorne essas informações.
Este artigo apresenta seis maneiras de verificar o tamanho de um banco de dados SQL Server usando T-SQL.
O procedimento armazenado sp_spaceused
Este é um procedimento armazenado do sistema que exibe o número de linhas, espaço em disco reservado e espaço em disco usado por uma tabela, exibição indexada ou fila do Service Broker no banco de dados atual ou exibe o espaço em disco reservado e usado por todo o banco de dados.
Para usá-lo, basta alternar para o banco de dados relevante e executar o procedimento. Assim:
USE WideWorldImporters; EXEC sp_spaceused;
Resultado:
database_name database_size unallocated space ------------------ ------------- ----------------- WideWorldImporters 3172.00 MB 2511.76 MB 1 row(s) returned reserved data index_size unused --------- --------- ---------- ------- 573688 KB 461728 KB 104120 KB 7840 KB 1 row(s) returned
Isso retorna dois conjuntos de resultados que fornecem as informações relevantes.
Você também pode fornecer um nome de objeto para retornar dados em um objeto específico no banco de dados. Nesse caso, apenas um conjunto de resultados será retornado.
Exemplo:
USE WideWorldImporters; EXEC sp_spaceused N'Application.Cities';
Resultado:
name rows reserved data index_size unused ------ -------------------- -------- ------- ---------- ------ Cities 37940 4880 KB 3960 KB 896 KB 24 KB
Neste exemplo, retornamos informações sobre as
Cities
mesa apenas. O procedimento armazenado sp_helpdb
Outro procedimento armazenado do sistema é
sp_helpdb
. Aqui está um exemplo de como chamar isso:
EXEC sp_helpdb N'WideWorldImporters';
Resultado:
name fileid filename filegroup size maxsize growth usage ------------ ------ ---------------- --------- ---------- ------------- -------- --------- WWI_Primary 1 /data/WWI.mdf PRIMARY 1048576 KB Unlimited 65536 KB data only WWI_Log 2 /data/WWI.ldf null 102400 KB 2147483648 KB 65536 KB log only WWI_UserData 3 /data/WWI_UD.ndf USERDATA 2097152 KB Unlimited 65536 KB data only
Neste caso, passamos o nome do banco de dados como argumento. Também podemos chamar
sp_helpdb
sem apresentar argumentos. Se fizermos isso, ele retornará informações sobre todos os bancos de dados no sys.databases
visualização do catálogo. O procedimento armazenado sp_databases
Outra opção é o
sp_databases
procedimento armazenado do sistema. Esse procedimento armazenado lista os bancos de dados que residem em uma instância do SQL Server ou são acessíveis por meio de um gateway de banco de dados. Veja como executá-lo:
EXEC sp_databases;
Resultado:
DATABASE_NAME DATABASE_SIZE REMARKS ------------------ ------------- ------- master 6848 null model 16384 null msdb 15616 null Music 16384 null Nature 16384 null Solutions 47104 null tempdb 16384 null Test 16384 null WideWorldImporters 3248128 null world 16384 null WorldData 16384 null
A visualização sys.master_files
O procedimento armazenado acima consulta os
sys.master_files
visualizar. Portanto, uma alternativa é ir direto para a visualização e escolher suas colunas:SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.master_files WHERE DB_NAME(database_id) = 'WideWorldImporters';
Resultado:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
Nesse caso, podemos ver o tamanho de cada arquivo de dados e arquivo de log, pois estão listados separadamente. Você também notará que eu executo um cálculo no
size
coluna para converter o valor em megabytes (MB). A visualização sys.database_files
Há também uma visualização do sistema chamada
sys.database_files
. Podemos usar essa visualização para retornar as mesmas informações do exemplo anterior:USE WideWorldImporters; SELECT name, size, size * 8/1024 'Size (MB)', max_size FROM sys.database_files;
Resultado:
name size Size (MB) max_size ------------ ------ --------- --------- WWI_Primary 131072 1024 -1 WWI_Log 12800 100 268435456 WWI_UserData 262144 2048 -1
Usar uma função de janela
Um problema potencial com os dois exemplos anteriores é que eles listam o tamanho de cada arquivo separadamente. Isso pode ser visto como positivo ou negativo, dependendo do que você deseja alcançar.
Também pode-se argumentar que as três primeiras soluções nesta página são problemáticas, porque fornecem apenas a soma total de todos os arquivos – elas não listam cada arquivo individual junto com seu tamanho.
E se você quiser ver o tamanho de cada arquivo individual, e o total de todos os arquivos para cada banco de dados?
Você pode usar o
OVER
cláusula para fazer exatamente isso. Aqui está um exemplo:
SELECT d.name AS 'Database', m.name AS 'File', m.size, m.size * 8/1024 'Size (MB)', SUM(m.size * 8/1024) OVER (PARTITION BY d.name) AS 'Database Total', m.max_size FROM sys.master_files m INNER JOIN sys.databases d ON d.database_id = m.database_id;
Resultado:
Database File Size (MB) Database Total ------------------ --------------- --------- -------------- master master 4 6 master mastlog 2 6 model modeldev 8 16 model modellog 8 16 msdb MSDBData 14 14 msdb MSDBLog 0 14 Music Music 8 16 Music Music_log 8 16 Nature Nature 8 16 Nature Nature_log 8 16 Solutions Solutions 8 46 Solutions Solutions_log 8 46 Solutions Solutions_dat_2 10 46 Solutions Solutions_dat_3 10 46 Solutions Solutions_log_2 10 46 tempdb tempdev 8 16 tempdb templog 8 16 WideWorldImporters WWI_Primary 1024 3172 WideWorldImporters WWI_Log 100 3172 WideWorldImporters WWI_UserData 2048 3172 world world 8 16 world world_log 8 16
Isso lista cada banco de dados, os arquivos para cada banco de dados, o tamanho do arquivo para cada arquivo, bem como o total de todos os arquivos para cada banco de dados. Isso requer que cada banco de dados (e seu tamanho total) seja listado várias vezes (uma vez para cada arquivo).